답변:
예. 여기에 --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
그리고 일부 테스트 ( 계정 sudo
의 비밀번호를 모르는 데 사용 했습니다 nobody
)
$ sudo su -c whoami nobody
[sudo] password for oli:
nobody
명령이 인수를 취할 때 인용해야합니다. 그렇지 않으면 이상한 일이 발생합니다. 여기서 전체 명령 을 인용 하지 않고 / home / oli (oli로)에 디렉토리를 만들려고합니다 .
# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
플래그 mkdir
의 값으로 만 읽히고 사용자 이름 -c
으로 사용하려고합니다 /home/oli/java
. 인용하면 작동합니다.
# 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: -
참고 : "스크립트 소유자를 루트로 설정했습니다"는 아무 것도하지 않습니다. setuid 비트가 설정되어 있어도 여전히 작동하지 않습니다
그러나 실제로 스크립트를 루트로 실행한다고 가정하면을 사용할 수 있습니다 sudo
. su
주로 사용자 전환을위한 것이며 sudo
다른 사용자로서 명령을 실행하기위한 것입니다. -u
플래그는 명령을 같이 실행하는 사용자 지정할 수 있습니다 :
sudo -u hudson command
sudo
하면 이것을 얻을 수 있습니다 root is not in the sudoers file
. 어떤 수 su - <username> -c "command to run"
있는 유일한 옵션을 선택합니다.
sudo -u kilgore mv this that
)
sudo cat /etc/passwd | grep user-abc
. 이 같은 것을 보면user-abc:x:994:994::/home/user-abc:/bin/false
작동하지 않습니다. 마지막 부분 "/bin/false
"은 해당 사용자에 대한 쉘이 없음을 의미하기 때문입니다.