it-swarm-ko.tech

su 옵션-다른 사용자로 명령 실행

스크립트에서 다른 사용자로 명령을 실행하는 방법이 궁금합니다.

스크립트 소유자가 루트로 설정되어 있습니다. 또한 hudson 사용자로 명령을 실행하기 위해 스크립트 내에서 다음 명령을 실행하고 있습니다.

su -c command hudson

이것이 올바른 구문입니까?

86
garbagecollector

예. 여기 --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: -
89
Oli

참고 : "스크립트 소유자를 루트로 설정했습니다"는 아무 것도하지 않습니다. setuid 비트가 설정되어 있어도 여전히 작동하지 않습니다


그러나 실제로 스크립트를 루트로 실행한다고 가정하면 Sudo를 사용할 수 있습니다. su은 주로 사용자 전환을위한 것이고 Sudo는 다른 사용자로서 명령을 실행하기위한 것입니다. -u 플래그를 사용하면 다음과 같이 명령을 실행할 사용자를 지정할 수 있습니다.

Sudo -u hudson command
58
Michael Mrozek