sudo 자격 증명 타임스탬프 시간 초과를 일시적으로 비활성화하는 방법은 무엇입니까?

sudo 자격 증명 타임스탬프 시간 초과를 일시적으로 비활성화하는 방법은 무엇입니까?

다음 bash 스크립트가 있다고 가정해 보겠습니다.

#!/bin/bash
sudo command1
command2
sudo command3

command2나는 루트로 실행하고 싶지 않기 때문에 sudo. sudo command1안타깝게도 command2완료하는 데 약 2시간이 걸립니다. 따라서 sudo 자격 증명 타임스탬프가 시간 초과되고 스크립트가 도착하면 sudo command3비밀번호를 다시 입력하라는 메시지가 표시됩니다.

에 설명된 대로 sudo 자격 증명 타임스탬프 시간 초과를 완전히 비활성화하고 싶지 않습니다.https://superuser.com/a/149740예를 들어. 제한 시간을 일시적으로 비활성화하여 이 bash 세션이 끝날 때까지 해당 세션에 대한 자격 증명을 효과적으로 유지하고 싶습니다.

답변1

sudo최선의 선택은 sudo 타임스탬프를 새로 고치고 더 이상 권한이 필요하지 않을 때 종료하는 (백그라운드) 바쁜 대기 루프라고 생각합니다 . 다음은 sleep 6two hour 대신 실행되고 및 대신 표시되는 명령을 command2실행하는 샘플 스크립트입니다 ./bin/echocommand1command2

#!/bin/sh
sudo /bin/echo command 1
while :; do sudo -v; sleep 1; done &
infiloop=$!
sleep 6
sudo /bin/echo command 3
kill "$infiloop"

실제 스크립트의 경우 보다 편안한 루프를 사용하는 것이 좋습니다.

#!/bin/sh
sudo command1
while :; do sudo -v; sleep 59; done &
infiloop=$!
command2
sudo command3
kill "$infiloop"

sleep 59sudoers의 기존 설정을 기반으로 플레이버를 조정합니다 timestamp_timeout. 타임스탬프 시간 제한이 60초인 경우 선택할 수 있는 방법을 보여주기 위해 59를 선택했습니다.

답변2

해결책이 매우 분명해 보이기 때문에 여기서 뭔가를 놓치고 있는 것 같습니다.

command2루트로 실행하고 싶지 않으므로 sudo.

그러나 스크립트를 변경하면 sudo루트로 실행하지 않고도 전체 스크립트를 실행할 수 있습니다.command 2

#!/bin/bash
command1
sudo -u ${SUDO_USER:-$USER} command2
command3

답변3

통과상쾌함백엔드 자격 증명:

#!/bin/bash


configurePermissions () {
    sudo -v
    refreshPermissions "$$" &
}


refreshPermissions () {
    local pid="${1}"

    while kill -0 "${pid}" 2> /dev/null; do
        sudo -v
        sleep 10
    done
}


configurePermissions

답변4

뭐, 합쳐질 수도 있지명령을 실행한 후 sudo가 자동으로 비밀번호를 잊어버리게 만드는 방법은 무엇입니까?그리고"sudo -S"를 명시적으로 사용하는 목적은 무엇입니까?

  1. 사용자 비밀번호를 읽고 환경 변수에 저장합니다.
  2. sudo자격 증명을 무시하려면 플래그를 사용하여 실행하면 -k항상 비밀번호를 묻는 메시지가 표시됩니다.
  3. 플래그를 통해 stdin비밀번호를 전달합니다 .sudo-S
  4. 비밀번호 환경 변수 제거

어떤 경우에는 유용할 수 있지만 사용자의 비밀번호를 환경 변수에 저장하는 것이 좋은 생각인지 잘 모르겠습니다.

관련 정보