web-dev-qa-db-fra.com

Cet utilisateur n'est actuellement pas disponible - mais permet d'exécuter le script par cet utilisateur

J'ai créé un utilisateur spécial dans/etc/passwd avec:

secure:x:2000:2000:secure:/bin:/usr/sbin/nologin

Je ne veux pas autoriser la connexion de cet utilisateur (via console, ssh, ftp, de toute façon).

Il est juste pour exécuter un script via:

Sudo su secure -c '/home/someuser/secure.script'

Mais ça me donne This user is currently not available.. Comment le configurer pour pouvoir exécuter le script de cette façon mais empêcher toute connexion (console, ssh, ftp, ...) de cet utilisateur au système?


J'ai remarqué que lorsque je tape /usr/sbin/nologin sur la ligne de commande, l'ordinateur répond par This account is currently not available..

24
peter

Il s'agit d'un cas d'utilisation typique de Sudo.

Vous mélangez Sudo qui permet d'exécuter des commandes avec un autre utilisateur et est hautement configurable (vous pouvez spécifier de manière sélective quel utilisateur peut exécuter quelle commande avec quel utilisateur) et su qui passe à un autre utilisateur si vous connaître le mot de passe (ou sont root). su exécute toujours le shell écrit en /etc/passwd, même si su -c est utilisé. Pour cette raison, su n'est pas compatible avec /usr/sbin/nologin.

Tu devrais utiliser

Sudo -u secure /home/someuser/secure.script

Comme Sudo est configurable, vous pouvez contrôler qui peut utiliser cette commande et s'il/elle doit entrer un mot de passe pour l'exécuter. Vous devez modifier /etc/sudoers en utilisant visudo pour ce faire. (Soyez prudent lorsque vous éditez/etc/sudoers et utilisez toujours visudo pour le faire. La syntaxe n'est pas anodine et une erreur peut vous bloquer de votre compte root.)

Cette ligne dans sudoers permet à toute personne du groupe somegroup d'exécuter la commande en tant que secure:

%somegroup    ALL=(secure) /home/someuser/secure.script

Cela permet à toute personne du groupe somegroup d'exécuter la commande en tant que secure sans entrer de mot de passe:

%somegroup    ALL=(secure) NOPASSWD: /home/someuser/secure.script

Ceci permet user1 pour exécuter la commande en tant que secure sans entrer de mot de passe:

user1    ALL=(secure) /home/someuser/secure.script
31
cg909

J'ai découvert que le problème principal était "/usr/sbin/nologin" dans /etc/passwd Lorsque je veux exécuter su dans ce cas, il doit avoir -s /bin/bash à l'intérieur, par exemple: su -s /bin/bash -c '/home/someuser/secure.script' secure

16
peter

su utilise le shell spécifié dans /etc/passwd.

Vous n'avez pas besoin d'utiliser su avec Sudo.

Par conséquent, ne mélangez pas su avec Sudo: utilisez Sudo -u secure '/home/someuser/secure.script'.

2
ctrl-alt-delor