Sudo - sudo가 있는지 및/또는 남은 시간을 확인하는 명령이 있습니까?

Sudo - sudo가 있는지 및/또는 남은 시간을 확인하는 명령이 있습니까?

(원래 Stack Overflow에 게시됨) 대신 여기에서 시도해 보라고 제안했습니다. 원본 게시물은 다음과 같습니다.

제목을 참조하세요. sudo를 쿼리할 수 있는 명령이 필요합니다. 이상적으로는 sudo가 아직 남아 있으면 성공을 반환하고 sudo가 만료되면 false를 반환합니다. 남은 시간을 확보하는 것도 유용할 수 있습니다. (걱정된다면 sudo -v재검증만 하면 됩니다.) 아, 그리고 비밀번호를 물어볼 필요도 없습니다.

내가 찾은 가장 가까운 것은 이지만 sudo -n true-n옵션은 직장의 Centos 5 시스템에만 있습니다. -n비밀번호를 요청해야 하면 실패합니다. 이 기능을 얻는 다른 방법이 있습니까? 내가 작업하는 모든 컴퓨터에 실제로 루트가 없기 때문에 원하는 대로 새 버전의 sudo를 설치할 수 없다고 가정합니다.

가치 있는 일을 위해 sudo 상태를 표시하라는 메시지를 받을 수 있도록 이 작업을 수행하고 있습니다. 나는 어떤 터미널이 적극적으로 sudo가 가능한지 알고 싶습니다. 루트일 때 색상을 변경하는 프롬프트도 있지만 루트를 자주 사용하지 않으므로 사용이 제한됩니다.

답변1

-n옵션은 최신 버전에서 사용할 수 있지만 sudo말씀하신 대로 옵션이 아닙니다. sudo비밀번호를 묻는 메시지가 표시되는지 확인하는 것 외에는 원하는 작업을 수행할 수 있는 실제 방법이 없습니다 . 시각적 표시가 필요한 경우 sudo /bin/bash루트 bash 세션을 시작하는 것이 어떨까요? 이는 안전하지 않지만 누군가가 sudo에 대한 즉각적인 변경 사항을 인식하는 경우에도 다소 안전하지 않습니다.

답변2

나는 이것이 정말 오래된 질문이라는 것을 알고 있지만 여기에 오늘 스크립트에서 한 내용이 있습니다. sudo라는 것은 모든 명령을 sudo(또는 최소한 가동 시간)로 실행할 수 있다는 것을 의미한다고 가정합니다.

CAN_I_RUN_SUDO=$(sudo -n 가동 시간 2>&1 | grep "load" | wc -l)
if [ ${CAN_I_RUN_SUDO} -gt 0 ]
그 다음에
    echo "sudo 명령을 실행할 수 있어요"
또 다른
    echo "Sudo 명령을 실행할 수 없습니다."
fi

그러나 사용자가 에서 제한 사항을 갖고 있는 경우에는 visudo이 확인만으로는 충분하지 않습니다. 예를 들어 사용자가 make 명령만 사용할 수 있는 경우입니다. 작동할 것으로 알고 있는 몇 가지 명령을 실행해 보십시오.

필터를 추가할 수 있습니다 grep -v Sorry. 예:

$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)

잘못된 긍정을 방지하기 위한 것입니다.

답변3

@wags007의 답변을 단순화하려면

if sudo -n true
then
  sudo id
else
  echo "sorry, but did not want to bother you"
fi

그러나 귀하의 경우https://www.sudo.ws/man/1.8.15/sudoers.man.html구성에 따라 defaults mail_badpassfalse 결과가 나오는 모든 테스트에 대해 메일이 전송됩니다(메시지가 표시되었을 것입니다). 이러한 성가신 변경을 피하려면 sudoers 파일의 해당 부분을 다음으로 변경하십시오.

Defaults       mail_badpass
Defaults!      /bin/true !mail_badpass

결과적으로 /bin/true를 제외한 모든 명령에 대해 보안 경고 메일이 전송됩니다. 네, 이제 누군가는 sudo true보안 경고 메일을 보내지 않고도 무제한으로 전화를 걸어 비밀번호를 무차별 대입 공격할 수 있습니다.

참고: visudosudoers 파일을 편집하려면 항상 즐겨 사용하는 편집기 대신 사용하세요. 그렇게 하지 않으면 계정이 폐쇄될 위험이 있습니다.

답변4

sudo 매뉴얼에 따르면 sudo 세션은 타임스탬프 파일( )에 따라 결정되므로 /usr/lib/sudo/<username>타임스탬프 파일의 날짜/시간을 확인하면 얼마나 남았는지 알 수 있을 것이다. 그러나 내 시스템에는 타임스탬프 파일이 실제로 디렉터리이고 그 안에 암호화된 내용이 포함된 세 개의 파일이 있습니다(그리고 일부 이상한 타임스탬프도 있지만 /usr/lib/sudo/<username>타임스탬프가 내가 sudo에 비밀번호를 제공한 시간과 일치하는 것 같습니다). . /usr/lib/sudo/<username>/0가장 최근 sudo실행 의 타임스탬프가 있는 것 같습니다 .

관련 정보