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

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

스크립트 내에서 다른 사용자로 명령을 실행하는 방법을 알고 싶습니다.

스크립트 소유자를 루트로 설정했습니다. 또한 스크립트에서 다음 명령을 실행하여 hudson 사용자로 실행했습니다.

su -c command hudson

이것이 올바른 구문인가요?

답변1

예. 이것은 --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: -

답변2

참고: "스크립트 소유자를 루트로 설정했습니다"는 setuid 비트를 설정하더라도 아무 작업도 수행하지 않습니다.아니면


그러나 실제로 스크립트를 루트로 실행한다고 가정하면 주로 사용자를 전환하고 다른 사용자로 명령을 실행하는 데 sudo. 이 플래그를 사용하면 명령을 실행하는 사용자를 지정할 수 있습니다.susudo-u

sudo -u hudson command

관련 정보