Odpowiedzi:
Tak. Oto --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
I trochę testowania (użyłem, sudo
ponieważ nie znam hasła do nobody
konta)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
Kiedy twoje polecenie przyjmuje argumenty, musisz je zacytować. Jeśli nie, zdarzają się dziwne rzeczy. Oto jestem - jako root - próbuję utworzyć katalog w / home / oli (jako oli) bez cytowania pełnego polecenia:
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
Jest odczytywany tylko mkdir
jako wartość -c
flagi i próbuje użyć go /home/oli/java
jako nazwy użytkownika. Jeśli go zacytujemy, to po prostu działa:
# 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: -
Uwaga: „Mam właściciela skryptu ustawionego jako root” nic nie robi; nawet jeśli masz ustawiony bit setuid, nadal nie działa
Zakładając, że faktycznie uruchamiasz skrypt jako root, możesz jednak użyć sudo
. su
służy głównie do przełączania użytkowników, podczas gdy sudo
służy do wykonywania poleceń jak inni użytkownicy. -u
Flaga pozwala określić, które użytkownik może wykonać polecenie jako:
sudo -u hudson command
sudo
można tylko dostać to: root is not in the sudoers file
. Co stanowi su - <username> -c "command to run"
jedyną opcję.
sudo -u kilgore mv this that
)
sudo cat /etc/passwd | grep user-abc
. Jeśli zobaczysz coś takiego:user-abc:x:994:994::/home/user-abc:/bin/false
to nie zadziała. Jest tak, ponieważ ostatnia część „/bin/false
” oznacza, że nie ma powłoki dla tego użytkownika.