Oui. Voici le --help
:
$ su --help
Usage: su [options] [LOGIN]
Options:
-c, --command COMMAND pass COMMAND to the invoked shell
-h, --help display this help message and exit
-, -l, --login make the shell a login shell
-m, -p,
--preserve-environment do not reset environment variables, and
keep the same shell
-s, --shell SHELL use SHELL instead of the default in passwd
Et quelques tests (j'ai utilisé sudo
car je ne connais pas le mot de passe du nobody
compte)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
Lorsque votre commande prend des arguments, vous devez la citer. Si vous ne le faites pas, des choses étranges se produiront. Je suis, en tant que root, en train de créer un répertoire dans / home / oli (en tant qu'oli) sans citer la commande complète:
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
Il ne lit mkdir
que la valeur du -c
drapeau et tente de l'utiliser /home/oli/java
comme nom d'utilisateur. Si nous le citons, cela fonctionne:
# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
File: ‘/home/oli/java’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 811h/2065d Inode: 5817025 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ oli) Gid: ( 1000/ oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
Birth: -
sudo cat /etc/passwd | grep user-abc
. Si vous voyez quelque chose comme ceci:user-abc:x:994:994::/home/user-abc:/bin/false
alors cela ne fonctionnera pas. C'est parce que la dernière partie "/bin/false
" signifie qu'il n'y a pas de shell pour cet utilisateur.