스크립트에서 다른 사용자로 명령을 실행하는 방법이 궁금합니다.
스크립트 소유자가 루트로 설정되어 있습니다. 또한 hudson 사용자로 명령을 실행하기 위해 스크립트 내에서 다음 명령을 실행하고 있습니다.
su -c command hudson
이것이 올바른 구문입니까?
예. 여기 --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로 without 전체 명령을 인용합니다 :
# 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