srvuser
서비스 사용자 와 그룹이 있습니다 maintainers
. 그룹만 명령이 maintainers
되도록 허용하려면 어떻게 해야 합니까 ? 나는 편집하려고 :srvuser
su
/etc/pam.d/su
auth sufficient pam_succeed_if.so use_uid user = maintainers and user ingroup maintainers
그러나 and
conf 파일에서는 분명히 허용되지 않습니다. 이 문제를 해결할 방법이 있나요?
답변1
문서에는 pam_succeed_if
다중 접속사를 지원함을 나타내는 내용이 없는 것 같으므로 이 작업은 모듈 외부에서 수행해야 합니다.
규칙을 작성하는 경우 required
두 가지 별도의 규칙을 만들어 간단하게 결합할 수 있습니다.
auth required pam_succeed_if.so user = srvuser
auth required pam_succeed_if.so use_uid user ingroup maintainers
그러나 긍정적인 결과가 반환되면 처리를 종료하는 규칙과 같은 규칙이 있는 경우 sufficient
이는 작동하지 않고 대신또는대신 조건. 그러나 PAM은 일종의 흐름 제어를 지원하므로 이전 모듈의 반환 값을 기반으로 일부 규칙을 건너뛸 수 있습니다. 보다여기 문서.
pam_permit
pam_succeed_if
모듈은 true를 반환하는 한 이 규칙을 따라야 하지만 , success
.
auth [success=ok default=2] pam_succeed_if.so user = srvuser
auth [success=ok default=1] pam_succeed_if.so use_uid user ingroup maintainers
auth [success=done default=ignore] pam_permit.so
... # other modules
보시다시피 구문이 끔찍하므로 실제로 어디에서나 사용하기 전에 구성을 테스트하는 것이 좋습니다.
su
물론 그룹 구성원이 다른 사용자의 권한으로 프로세스를 실행하도록 허용하기 위해 반드시 , 또는 PAM이 필요한 것은 아닙니다 sudo
. 일반적인 파일 권한을 사용하여 setuid 바이너리를 생성하고 특정 그룹의 구성원만 이를 실행하도록 허용할 수 있습니다.
# chown srvuser.maintainers ls
# chmod 4510 ls
# ls -l ls
-r-s--x--- 1 srvuser maintainers 118280 Mar 26 19:03 ls
여기서 단점은 및 와 달리 su
setuid sudo
바이너리 실행은 어디에도 기록되지 않으며 대상 사용자로 실행되는 프로세스에 의해 setuid 바이너리가 수정되거나 삭제될 수 있다는 것입니다. 이 문제를 해결하려면 setuid
대상에 대한 실행을 기록한 다음 exec
실제 명령을 기록하는 간단한 고정 함수 래퍼를 만들 수 있습니다.