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.
.
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
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
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'
.