OS 사용자의 비밀번호를 변경할 수 있는 L0 팀을 위한 sudo 규칙을 추가할 예정입니다.
하지만 L0 팀이 sudo를 사용하여 루트 비밀번호를 변경하는 것을 원하지 않습니다. 어떻게 해야 할까요?
PS - !/usr/bin/passwd 루트 - 작동하지 않습니다
답변1
사용자 인증이 기존 /etc/shadow 비밀번호로 수행되는 경우 유일한 방법은 루트가 아닌 사용자의 비밀번호만 변경할 수 있는 유사한 프로그램을
직접 작성하는 것 입니다(예: pass ). /etc/shadow는 실제로 구문 분석하거나 작성하는 것이 어렵지 않습니다.passwd
sudo yourprogram
더 현명하게 말하면, "팀"이 있는 경우 일종의 중앙 집중식 로그인 메커니즘(LDAP/Kerberos?)이 있을 수 있으며, 그러면 LO 팀("L0"이 무엇이든)을 passwd
전혀 사용하면 안 되지만 이 시스템을 직접 사용할 수 있습니다. 보다 세분화된 액세스 제어를 제공합니다.
답변2
일반적인 질문과 마찬가지로 sudo
대답은 "sudo를 통해서만 실행할 수 있는 래퍼 스크립트 작성"입니다.
즉, 사용자 이름이 제공되었고 루트(및/또는 다른 시스템 계정)가 아닌지 확인하기 위해 매개변수를 확인하는 스크립트를 작성하십시오. 또는 해당 사용자 이름에 해당하는 UID가 일반 사용자에게 할당된 범위 내에 있는지 확인할 수도 있습니다. 일반적으로 배포판에 따라 500+ 또는 1000+입니다.
필요한 유효성 검사를 통과한 경우 passwd
적절한 매개변수를 사용하여 실행하세요. 그렇지 않은 경우 오류 메시지와 함께 중단하고 실패한 시도를 기록할 수도 있습니다.
그런 다음 구성을 sudo
통해 사용자는 루트로 스크립트를 실행할 수 있지만아니요 passwd
그 자체.
스크립트는 루트로 실행되므로 스크립트에서 실행되는 모든 프로그램(passwd 포함)도 루트로 실행됩니다.
또한 스크립트는 루트로 실행되기 때문에 스크립트에서 실행되는 내용과 실행 방법에 특히 주의해야 합니다. 변수를 참조하고 사용자 제공 데이터를 신뢰하지 마십시오(즉, 유효성을 검사하지 않고 다른 프로그램에 직접 인수를 전달하지 마십시오. 명시적으로 금지되지 않은 모든 것을 허용하는 것보다 명시적으로 허용되지 않은 모든 것을 거부하는 것이 일반적으로 더 좋습니다. 그러면 허점이 줄어들 것입니다.) 스크립트를 짧게 유지하고, 이해하고 디버깅하기 쉽게 유지하세요. 입력을 검증하고 작업을 완료하는 데 필요한 최소한의 작업을 수행해야 합니다.