it-swarm-eu.dev

su options - spuštění příkazu jako jiného uživatele

Zajímalo by mě, jak spustit příkaz jako jiný uživatel ze skriptu.

Majitel skriptu je nastaven jako root. Mám také spuštěn následující příkaz ve skriptu, který příkaz spouští jako uživatel hudson:

su -c command hudson

Je to správná syntaxe?

86
garbagecollector

Ano. Zde je --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

A nějaké testování (použil jsem Sudo, protože neznám heslo pro účet nobody)

$ Sudo su -c whoami nobody
[Sudo] password for oli: 
nobody

Když váš příkaz vezme argumenty, musíte jej citovat. Pokud tak neučiníte, objeví se podivné věci. Tady se snažím vytvořit kořenový adresář v/home/oli (jako oli) bez citovat celý příkaz:

# su -c mkdir /home/oli/Java oli
No passwd entry for user '/home/oli/Java'

Jako hodnotu příznaku -c Je pouze načteno mkdir a jako uživatelské jméno se pokouší použít /home/oli/Java. Pokud to citujeme, prostě to funguje:

# 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: -
89
Oli

Poznámka: „Mám majitele skriptu nastaveného jako root“ nic nedělá; i když máte nastavený bit setuid stále nefunguje


Za předpokladu, že skript ve skutečnosti používáte jako root, můžete však použít Sudo. su je primárně pro přepínání uživatelů, zatímco Sudo je pro provádění příkazů jako ostatní uživatelé. Příznak -u Umožňuje určit, který uživatel má provést příkaz, jako:

Sudo -u hudson command
58
Michael Mrozek