bash 스크립트의 일부를 다른 사용자로 실행


답변:


42

스크립트에서 sudo 명령을 사용하십시오.

의 형태의:

sudo -u username command

Sudo 명령 실행은 명령을 사용자로 사용자 이름 .

스크립트가 루트로 실행되는 경우 암호를 묻는 메시지가 표시되지 않습니다. 그렇지 않으면,이 기사 는 하나의 명령 행에서 비밀번호로 sudo 를 사용하는 방법을 설명합니다 이 기사에서는 암호없이 sudo 를 사용하는 방법에 대해 설명 합니다.


5
이것은 훌륭하고 쉽지만 한 번에 하나씩 대신 명령 그룹에 대해 이것을 수행하는 방법이 있습니까?
Andrew

bash 스크립트를 작성하고 실행 가능하게 chmod +x script.sh한 다음sudo -u username script.sh
NiCU

나는이 나 자신을 궁금하고는 나를 위해 일한 다음 앤드류 : sudo는 -u IC에서 쉬 -c 'CMD1 && CMD2'
Karussell

i사용자 환경을 얻으려면 옵션 도 포함하십시오
neoDev

6

이 답변 은 좋지만 serverfault 조언은 약간 위험합니다. 누구든지 루트로 아무것도 실행할 수 있습니다! 의견을 형식화 할 수 없으므로 여기에 게시하고 있습니다.

visudo를 사용하여 필요한 권한을 최대한 정확하게 부여하는 것이 좋습니다. 다음 visudo과 같은 줄을 입력 하고 추가하십시오 :

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2

많은 호스트에서 동일한 것을 실행 해야하는 경우 다음을 사용하여 열 수 있습니다.

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2

그러나 나는 어느 쪽도 사용하지 않을 것이다 :

username ALL=(ALL) NOPASSWD: ALL

또는 username 호스트 이름 = ALL

sudoer 맨 페이지는 피투성이의 세부 정보를 많이있다


특정 사용자 만 사용할 수있는 명령에 대해서만 작동합니까?
Manish Mathai

특정 사용자 만 명령을 실행할 수 있도록 지정할 수 있습니다 (위 예 username에서는 명령을 실행할 수있는 사용자 이름으로 바꿉니다). 실행하려는 실행 파일이 특정 사용자 만 실행할 수 sudo -u username commandline있는 경우 스크립트 행에 해당 사용자 이름을 전달 하면됩니다.
James Polley

@Manish. 예. sudoers 파일의 내용은 "이 호스트에서이 사용자 이름으로 암호를 제공하지 않고 command1을 실행할 수 있도록 허용하는 것입니다."
DaveParillo

6

# I = 좋아요 :

#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"

echo 1: $USER

#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_

echo 3: $USER

# ./운영

1: root
2: nobody
3: root

10
설명 텍스트를 추가 할 수 있습니까?
Kazark

4

sonarqube의 경우 :

sudo -u sonar /usr/bin/sonar start

어디 sonar명령을 실행하는 데 사용되는 사용자의 이름입니다/usr/bin/sonar start


2

확실하지는 않지만 해당 스크립트의 끝만 다른 사용자로 실행되도록 su someuser하려면 스크립트 끝 전에 추가 할 수 있습니다 .

뭔가 빠졌습니까?

도움이 되길 바랍니다.

문안 인사


1
나는 이것이 가장 적절한 대답이라고 생각하며 sudo를 제안하는 다른 모든 대답을 가지고 있으며, 일부 최소 Linux 설치에서는 기본적으로 설치되지 않습니다.
Tim

1

이런 식으로 스크립트 끝은 다른 사용자 (루트)에 의해 실행됩니다. $[LINENO+2]exit $?전화에 유의하십시오 . 스크립트의 끝을 한 번만 실행하고 sudo호출 의 종료 코드를 유지하려면 필요 합니다.

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.