사용자가 루트가 아닌 Centos 6.8용 스크립트를 작성하려고 합니다. 사이트에 관리자가 없으므로 동일한 스크립트를 통해 (/etc/sudoers.d에 파일을 추가하여) 스크립트를 sudoers에 추가해야 합니다.
스크립트가 사용자에게 루트 비밀번호를 묻는 메시지를 표시해야 하는 것 같습니다. 그렇죠? 그렇지 않은 경우 이 문제를 해결하기 위한 규칙은 무엇입니까(루트에서 실행할 때 sudoer에 두 번째 스크립트를 추가하는 것 제외)?
나는 비슷한 것을 시도했습니다 :
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
이:
ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
제안을 따르세요여기, 그러나 이는 계속하라는 메시지만 제공합니다.
내 기본적인 질문은 암호를 묻는 메시지를 표시하고 이를 사용하여 사용자에게 스크립트 실행 권한을 부여하는 방법입니다.
또 다른 옵션은 스크립트를 루트로 실행하는 것이지만 그렇게 할 수 있는지 확인하고 싶었습니다.
답변1
권한을 에스컬레이션하기 위해 비밀번호를 묻는 메시지를 표시하려면 다음을 추가하세요.
sudo -v
이 앞에 줄에 있어요. 스크립트는 중지되고 비밀번호를 요청한 후 허용되는 비밀번호를 입력한 후 계속하거나 비밀번호 확인에 실패하면 종료됩니다.
효과적으로:
#!/bin/bash
# Initiate sudo session
sudo -v
# Execute command; sudo session for tee is already active.
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
장기 실행 스크립트인 경우 조기 실행 함수로 만드는 것이 좋습니다.
sudo -v
while true;
do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2>/dev/null &
스크립트는 다음과 같습니다.
#!/bin/bash
sudoChk () {
sudo -v
while true;
do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2>/dev/null &
}
sudoChk
#...long running commands...
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
exit 0
당신은 또한 다음을 찾고 있을 수도 있습니다:
sudo sh -c
바꾸다
sudo su -c