비밀번호없이 user1이“su-user2”를 허용 할 수있는 파일이 이미 해당 파일에

martin사용자 martin-test가 비밀번호없이 사용자 로 전환 할 수 있도록해야 합니다

su - martin-test

나는 이것이에서 구성 될 수 있다고 생각한다 /etc/pam.d/su. 주석 처리를 해제 할 수있는 파일이 이미 해당 파일에 있습니다. 그러나 martin그룹에 사용자 를 추가하는 아이디어가 마음에 들지 않습니다 wheel. martin로 전환 할 수있는 것보다 더 많은 권한 을 부여하고 싶지 않습니다 martin-test. 또한 사용하고 싶지 않습니다 sudo.

사용자의 권한을 martin최소화 하면서 최선의 방법은 무엇입니까 ?



답변

의 줄 바로 아래에 다음 줄을 추가 pam_rootok.so하십시오 /etc/pam.d/su.

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

이 라인은 pam_succeed_if.so모듈을 사용하여 점검을 수행합니다 . 라인 에 대한 자세한 내용은 Linux-PAM 구성 파일 구문 을 참조하십시오 auth.

  • 첫 번째 줄은 대상 사용자 가 있는지 확인합니다 martin-test. 만약 그렇다면 아무 일도 일어나지 않으며 ( success=ignore) 다음 줄에서 계속해서 현재 사용자 를 확인합니다 . 그렇지 않은 경우 다음 줄은 건너 뛰고 ( default=1) 일반적인 인증 단계로 다음 줄을 계속합니다.
  • 두 번째 줄은 현재 사용자인지 확인합니다 martin. 일치하면 시스템은 인증 프로세스를 성공한 것으로 간주하고 ( sufficient)를 반환합니다 . 그렇지 않은 경우 아무 일도 일어나지 않으며 일반적인 인증 단계로 다음 줄을 계속 진행합니다.

su그룹으로 제한 할 수도 있습니다 . 여기에서 그룹 allowedpeoplesu비밀번호없이 할 수 있습니다 .

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople


답변

그룹을 변경 sudo하거나을 사용하지 않으려면 pam_execpam 단계에서 외부 스크립트를 실행하기 위해 호출되는 pam 모듈을 사용하십시오 .

/etc/pam.d/su뒤에 줄을 추가하십시오 pam_rootok.so.

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script 권한 755 (rwxr-xr-x) 및 다음 내용이 있습니다.

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

따라서이 스크립트는 다음과 같은 경우에 성공합니다 su.

  • 인증의 맥락에서 호출됩니다.
  • 호출 사용자가 martin
  • 인증 할 사용자는 martin-test입니다.

보다:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$


답변

루트 계정에 액세스 할 수 없지만 명령을 실행하는 데 사용하려는 사용자의 비밀번호가있는 경우 다음을 수행 할 수 있습니다.

  • 이것은 당신에게 토토의 암호를 물을 것입니다 : su-toto -c whoami
  • 이것은하지 않습니다 : ssh toto @ localhost whoami

toto의 authorized_keys에 공개 키를 설치하십시오.


답변

내 간단한 해결책은 다음과 같습니다.

sudo login -f martin-test

모든 비용으로 sudo를 피하고 싶다면 이것을 스크립트에 넣는 것이 가능해야한다고 생각합니다.

  1. 루트 및 루트 권한이있는 소유 ( setuid 플래그 사용)
  2. 모든 사람에 의해 실행 가능하며 sudo가 없습니다.

그러나 실제로 작동하게하기 위해 chown rootchmod +s ToTest.sh비트를 알 수는 없습니다 .

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

에코가 알려주는 것처럼 여전히 일반 사용자로 실행됩니다. 그리고 여전히 sudo 비밀번호가 필요합니다. 루트로 실행 중이 sudo면 마지막 줄에서를 제거 할 수 있습니다 …


답변