루트가 아닌 사용자로부터 /etc/sudoers.d/에 파일을 추가하는 방법은 무엇입니까?

루트가 아닌 사용자로부터 /etc/sudoers.d/에 파일을 추가하는 방법은 무엇입니까?

사용자가 루트가 아닌 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

관련 정보