Je me demandais comment exécuter une commande en tant qu'autre utilisateur à partir d'un script.
J'ai le propriétaire du script défini en tant que root. J'ai également la commande suivante en cours d'exécution dans le script pour exécuter la commande en tant qu'utilisateur hudson:
su -c command hudson
Est-ce la bonne syntaxe?
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 compte nobody
)
$ Sudo su -c whoami nobody
[Sudo] password for oli:
nobody
Lorsque votre commande prend des arguments, vous devez la citer. Sinon, des choses étranges se produiront. Ici, je suis - en tant que root - essayant de créer un répertoire dans/home/oli (comme oli) sans en citant la commande complète:
# su -c mkdir /home/oli/Java oli
No passwd entry for user '/home/oli/Java'
Il s'agit uniquement de mkdir
comme valeur de -c
flag et essaie d'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: -
Remarque: "J'ai le propriétaire du script défini comme root" ne fait rien; même si vous avez le bit setuid défini ne fonctionne toujours pas
En supposant que vous exécutez réellement le script en tant que root, vous pouvez cependant utiliser Sudo
. su
sert principalement à changer d'utilisateur, tandis que Sudo
sert à exécuter des commandes en tant que d'autres utilisateurs. Le -u
L'indicateur vous permet de spécifier quel utilisateur exécuter la commande comme:
Sudo -u hudson command