BASH 스크립팅, 단일 명령을위한 www-data su


26

필자가 작성한이 블로그 게시물에 설명 된대로 서브 버전 리포지토리 및 관련 웹 사이트 생성을 자동화하는 작업을하고 있습니다 . www-data 사용자에게 다음 명령을 실행하는 부분에 문제가 있습니다.

svnadmin create /svn/repository

스크립트 시작 부분에 루트 또는 sudo로 실행 중인지 확인하고 한 명령 이후의 모든 것을 루트로 실행해야합니다. 하나의 명령을 www-data로 실행 한 다음 루트로 다시 전환하여 완료하는 좋은 방법이 있습니까?

답변:


24

su - www-data -c 'svnadmin create /svn/repository'루트로 실행되는 스크립트에서 사용 하십시오. 따라서이 명령 만 www-data 사용자가 실행합니다.


향후 시청자를위한 업데이트 :

당신이받을 경우 "This account is currently not available"오류를 사용하는 것이 좋습니다 :

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

( 사용자의 로그인 정책 -s을 수용 www-data하지 않는 플래그에 대한 @Petr의 소중한 언급 )


1
예, 스크립팅의 기본 규칙을 잊어 버린 것 같습니다 ... RTFM. 감사!
Brendon Dugan

15
이것을 시도하면, 오류가 발생합니다This account is currently not available.
rubo77

또한이 오류가 발생하지만 아래 futbolsalas15의 대답은 정상적으로 작동합니다.
앤드류

18
su - www-data -s /bin/bash -c 'your_command'이 작업을 수행하는 데 사용하십시오 . 사용자 www-data에는 셸이 /usr/sbin/nologin있으므로 -s매개 변수가 없으면 오류 메시지가 나타납니다.
Petr

63

'su'는 아마도 암호를 요청하는 것이며 아마도 www-data에는 암호가 없습니다. 나는 명령을 추천한다 sudo:

 sudo -u www-data command

조건은 사용자가 root이거나 sudoers 파일에서 구성되어야한다는 것입니다.


4
와우, 왜 이것이 정답이 아닌가? 이걸 찾기 엔 너무 길었어
Captain Hypertext

3

사용 su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
su 명령은 로그인을 비활성화 한 계정 (예 : www-data)에서는 작동하지 않습니다. sudo를 사용해야합니다.
Frantumn

2

2 가능한 접근법 :


1) sudo명령 :

대부분의 경우 sudo명령에 액세스 할 수 있으므로 솔루션은 다음과 같습니다.

sudo -u target_user target_command


2) su명령 (sudo가 설치되지 않은 경우 Ex. alpine-linux images) :

su - target_user -c 'target_command'

경우에 당신은 수신 '이 계정은 현재 사용할 수 없습니다' 사용자는 효과 없음 로그인 (쉘 액세스) 정책을 가지고, 오류가 발생했습니다. 그렇다면 다음을 사용하십시오.

su - target_user -s /bin/bash -c 'target_command'

( 사용자의 로그인 정책 -s을 수용 www-data하지 않는 플래그에 대한 @Petr의 소중한 의견에 근거 )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.