비밀번호없이 user1이“su-user2”를 허용


51

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

su - martin-test

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

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


2
sudo예 를 들어 sudo -u martin-test -i. 당신이 특별히 요구하는 이유가 su있습니까?
jordanm

나는 sudo이것 때문에 그냥 설치하고 싶지 않습니다 (일반적으로 사용 sudo하지 않으며 특히 마음에 들지 않습니다). 그리고 사용하는 pam것이 더 깨끗하고 투명한 방법 이라고 생각 합니다.
Martin Vegter

3
@MartinVegter 스크립트 답변에서 알 수 있듯이 일종의 pam 메커니즘을 통해이 작업을 수행하는 것은 매우 추악합니다. 실제로 이것은 정확히 sudo의도 된 것입니다. 일반적으로 사용하지 않는 것 외에 어떤 반대가 있습니까?
Patrick

1
깨끗한 솔루션이 가능하다면 pam그 이상을 선호합니다 sudo. sudo유일한 가능성 이라면 그것보다 좋습니다. 에 대한 저의 반대 의견 sudo은 대부분 이데올로기 적입니다 sudo foo. 관리가 필요할 때 루트로 로그인합니다. 그렇지 않으면 사용자로 로그인하면이 두 가지 역할을 혼합해서는 안됩니다. 또한 이미 pam인프라가 설치되어 있습니다. setuid보안 버그가 발생할 수있는 다른 프로그램 을 설치하고 싶지 않습니다 .
Martin Vegter

5
@MartinVegter sudo foo특정 명령 을 수행 할 필요는 없습니다 . Sudo는 sudo -s쉘을 시작합니다. sudo는 매우 일반적인 유틸리티로, 일부 팸 트릭보다 훨씬 철저한 보안이 철저히 검증되었습니다 . 또한 작업에 대한 루트 셸을 얻는 것이 특정 명령을 실행하는 것보다 훨씬 안전하지 않다고 주장합니다. 쉘을 시작할 때 모든 것을 루트로 실행 합니다. 이러한 것들 중 하나 (예 : simple ls)에 보안 취약점이있는 경우, 보안 허점을 열었습니다.
패트릭

답변:


61

의 줄 바로 아래에 다음 줄을 추가 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

1
특정 그룹에 속한 경우 권한을 부여하려면 다음을 수행하십시오. auth enough pam_succeed_if.so 사용자 그룹 GROUP
shrimpwagon

@gnp 슈퍼 감사합니다 !! nrpe로 iCinga를 작업하면서 다른 사용자로 명령을 실행해야합니다 !! 많은 도움 !!!!!!! 감사!!!!!
saravanakumar

@GnP에 제발 도와주세요 askubuntu.com/questions/821793/...
Nullpointer

변경 사항을 적용하는 방법에 대한 정보를 추가하는 것이 좋습니다.
Kyslik

@Kyslik 무슨 뜻인가요? 필요한 파일을 편집하는 방법에 대한 지침은 답변에 있습니다 ...
GnP

12

그룹을 변경 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:~$ 

1
pam_access는 스크립트에 의존하지 않고 유사한 기능을 제공하는 데 사용될 수 있습니다. (이것은 pam_access가 만든 일입니다.)
jsbillings

1
@jsbillings 다른 답변을 하시겠습니까?
Hauke ​​Laging

1
상황에 맞게 /etc/pam.d/su사용하려면 어떻게 수정해야 pam_access합니까?
Martin Vegter

3
@jsbillings 실제로 pam_access는 할 수 없습니다. supam 스택을 진행할 때는 변경중인 사용자가 아니라 변경중인 사용자에 따라 수행됩니다. 따라서와 같은 규칙을 추가 + : martin : ALL하면 누구나로 변경할 martin 있습니다. 변경하더라도 martinmartin-test, 아직 사람이 그것을 할 수있게된다. 당신은 당신이 온 사용자와 당신이 변경하고있는 사용자를 모두 분석해야합니다. 실제로, 이것은 정확히 무엇 sudo을위한 것 입니다.
Patrick Patrick

0

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

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

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


신중한 답변 .. 그러나 누군가 실행하려고하는 명령은 이미 컴퓨터에 있습니다. 따라서 동일한 서버에 대한 ssh'ing은 없습니다.
Raja Anbazhagan

-1

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

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면 마지막 줄에서를 제거 할 수 있습니다 ...


쉘 (또는 다른 스크립트) 스크립트의 setuid 플래그는 Linux에서 작동하지 않으며 적절한 이유가 있습니다. 작업 SUID 플래그 위의 스크립트는 즉시 함정이 될 것이라고주의 : 그것은 당신이 어디에 당신이 모르는 가정하면 때문 "ENV"(매우 자기 defeatingly 통해 bash에 종사 bash하다, 왜 위치를 알고 있다고 가정 할 env또는 심지어 존재 하는가?). 그러나 결국 bash이것이 정확히 무엇인지 알 수 없습니다 . 호출하는 사용자 디렉토리에서 올 수 있으며 1 분 전에 소스 코드에서 컴파일되었습니다. 내가 어디로 가는지 알아? 또는 사용자가 다음을 대체 할 수 있습니다 whoami.
David Tonhofer

내 두뇌는 현재 이러한 문제와 너무 멀리 떨어져있어 완전히 설명하기는 쉽지만 자세한 설명은 여전히 ​​고맙습니다.
Frank Nocke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.