공유 키 .ssh / authorized_keys와 sudo를 함께 작동시키는 방법?


15

.ssh / authorized_keys를 설정하고 pub / private 키를 사용하여 새로운 "user"로 로그인 할 수 있습니다 ... 또한 sudoers 목록에 "user"를 추가했습니다 ... 지금 문제는 언제입니다 다음과 같은 간단한 sudo 명령을 실행하려고합니다.

$ sudo cd /root

암호를 입력하라는 메시지가 표시되지만 작동하지 않습니다 (설정 한 개인 키 암호를 사용하고 있습니다)

또한 다음을 사용하여 사용자의 비밀번호를 비활성화했습니다

$ passwd -l user

내가 무엇을 놓치고 있습니까?

어딘가에 나의 초기 언급이 잘못 이해되고 있습니다 ...

시스템을 강화하려고합니다 ... 궁극적 인 목표는 pub / private 키를 사용하여 로그인과 간단한 암호 인증을 수행하는 것입니다. certified_keys 파일을 통해 모든 것을 설정하는 방법을 알아 냈습니다.

또한 궁극적으로 루트 계정을 통한 서버 로그인을 방지합니다. 그러나 그렇게하기 전에 두 번째 사용자 (항상 시스템에 로그인 할 사용자)를 위해 sudo가 필요합니다.

이 두 번째 사용자의 경우 "passwd -l user ..."를 통해 사용자를 잠그지 않으면 정기적 인 비밀번호 로그인을 방지하고 공개 / 비공개 키 로그인 만 강제 실행하려고합니다. 그런 다음 키를 사용하지 않으면 여전히 일반 비밀번호로 서버에 접속하십시오.

그러나 더 중요한 것은 암호가 비활성화 된 사용자와 함께 술집 / 개인 키 설정을 사용하려면 sudo를 가져와야한다는 것입니다.


편집 : 좋아, 나는 그것을 가지고 있다고 생각한다 (해결책) :

1) / etc / ssh / sshd_config를 조정하고 설정했습니다. PasswordAuthentication no 이것은 ssh 비밀번호 로그인을 방지합니다 (이 작업을 수행하기 전에 공개 / 개인 키 설정이 작동하는지 확인하십시오)

2) sudoers 목록을 조정 visudo하고 추가했습니다.

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) root는 비밀번호가있는 유일한 사용자 계정입니다. 비밀번호가 설정되지 않은 두 개의 사용자 계정 "dimas"및 "sherry"로 테스트 중입니다 (비밀번호는 비어 있음 passwd -d user)

위의 내용은 기본적으로 모든 사람이 암호를 사용하여 시스템에 로그인하는 것을 방지합니다 (공개 / 개인 키를 설정해야 함).

또한 sudoers 목록의 사용자에게는 관리 기능이 있습니다. 그들은 또한 su다른 계정에 할 수 있습니다. 따라서 기본적으로 "dimas"는 할 수 sudo su sherry있지만 "dimas는 할 수 없습니다 su sherry. 마찬가지로 sudoers 목록에없는 모든 사용자는 su user또는 할 수 없습니다 sudo su user.

참고 위의 방법으로 작동하지만 보안이 취약한 것으로 간주됩니다. "dimas"또는 "sherry"사용자로 코드에 액세스 할 수있는 모든 스크립트는 루트 액세스 권한을 얻기 위해 sudo를 실행할 수 있습니다. 설정, Firefox와 같은 원격 코드 실행 또는 사용자가 원치 않는 코드를 실행할 수있는 다른 결함에도 불구하고 원격 사용자가 로그인 할 수있는 ssh의 버그는 이제 루트로 실행할 수 있습니다. Sudo는 항상 비밀번호를 요구해야합니다. 그렇지 않으면 다른 사용자 대신 루트로 로그인 할 수도 있습니다.

답변:


10

ssh그리고 sudo서로 아무 상관이 없습니다. 업 설정 ssh인증 방법에 대한 아무것도하지 않을 것입니다 sudo. 비밀번호 sudo를 이해하지 못합니다 ssh.

passwd -l더 이상 비밀번호로 인증 할 수 없도록 사용자 계정을 잠그기위한 것입니다. 그것은 당신이 원하는 것과 거의 반대이며, 사용자는 암호없이 인증 할 수 있습니다.

나는 당신이 원하는 것은 생각 NOPASSWD의 옵션을 사용자의 sudoers파일 .

(PS,.로 cd명령을 실행할 이유 가 없습니다 sudo. cd상위 프로세스로 전파되지 않으므로 sudo종료 하자마자 시작한 곳으로 돌아갑니다.)

편집 : 당신은 계정 암호를 잠그고 sudo가 공개 / 개인 키를 이해하기를 원한다고 계속 말합니다. 죄송합니다, sudo는 ssh 키를 사용하지 않습니다. ssh가 아닙니다. 사용자가 자신의 비밀번호로 로그인 하지 못하게 하려면 정답은 계정을 잠그지 말고 ssh 비밀번호 인증비활성화 하는 것입니다 . 그런 다음 ssh certified_keys를 통해 로그인 한 후 sudo에 사용할 수있는 사용자의 비밀번호를 보유 할 수 있습니다.


ok, 그러나 사용자가 다음을 통해 암호를 가지고 있지 않다는 사실은 다음과 같습니다 : passwd -l user ... sudo 명령이 작동하지 않습니까?
farinspace

@farinspace 그렇습니다. 질문을 더 잘 이해하고 비평을 크게 확장했습니다. passwd -l계정이 잠겨 있다는 의미에서 비밀번호를 제거합니다. 즉, 비밀번호가 작동하지 않습니다. sudo에서 비밀번호 인증을 끄려고합니다.
coneslayer

어떻게이 논리 : 시스템이 술집 / 개인 키 로그인을 통해 경화 ... 다시에만 관리자가의 sudoers 목록에 사용자를 추가 할 수있을 것입니다로의 sudoers 파일에 암호를 끄면 여전히 안전 할 것
farinspace

개인 키를 사용하는 경우 암호를 설정하는 것이 일반적이거나 서버 로그인시 암호를 설정하지 않고 암호 입력을 우회 할 정도로 충분히 안전합니다
farinspace

4
@coneslayer이 회신은 100 % 정확하지 않습니다. 아래에서 볼 수 있듯이 sudo는 ssh 인증을 준수하도록 구성 할 수 있습니다.
Andre de Miranda

18

원하는 것은 가능하지만 pam-ssh-agent-auth 라는 PAM 모듈을 컴파일해야하므로 약간의 경험이 필요합니다 .

이 과정은 상당히 간단합니다.

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

sudo 구성을 편집하십시오.

$ sudo visudo

다음을 추가하십시오.

Defaults env_keep += SSH_AUTH_SOCK

sudo PAM 설정을 변경하여 계속하십시오.

$ sudo vi /etc/pam.d/sudo

추가 (@include 행 바로 위) :

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account


4
이것은 허용 대답해야한다
크리스토퍼 몬산토

1
이 지침 (특히 /etc/pam.d/sudo지침)은 현재 Ubuntu 버전에서 최신 버전이 아닙니다. 답변에 업데이트 된 지침을 제공했습니다.
Chris Pick

4

Andre de Miranda의 답변은 pam_ssh_agent_auth를 사용하는 훌륭한 솔루션을 제공 하지만 부품이 오래되었습니다. /etc/pam.d/sudo많은 최신 Linux 버전을 사용할 때 특히 지침.

Ubuntu 12.04를 정확하게 실행하는 경우 실제로 ppa : ppa : cpick / pam-ssh-agent-auth 에서 pam_ssh_agent_auth 빌드를 제공하여 프로세스를 단순화했습니다 .

다음을 실행하여 패키지를 설치할 수 있습니다.

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

설치 후,이 PAM 모듈을 sudo와 함께 사용하려면 sudo의 설정 및 PAM 구성을 구성해야합니다. Ubuntu 12.04에서는 다음 두 파일을 작성하여이를 수행 할 수 있습니다.

/etc/sudoers.d/pam-ssh-agent-auth :

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo :

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

요리사를 사용하는 경우
https://github.com/cpick/pam-ssh-agent-auth
http : //community.opscode 중 한 곳에서 내 요리 책으로 위 프로세스를 자동화 할 수 있습니다 . .com / cookbooks / pam-ssh-agent-auth .

쿡북 files디렉토리에는 Ubuntu 12.04와 정확하게 작동하는 위에서 설명한 파일 /etc/pam.d/sudo/etc/sudoers.d/pam-ssh-agent-auth파일이 포함되어 있으며 다른 버전 / 디스크를 사용할 때 유용한 시작점이되어야합니다.


-1

암호 입력을 무시하는 유일한 방법은 sudoers파일 에서 암호를 비활성화하는 것입니다 .

이와 같은 내용은 root모든 회원 에게 비밀번호없이 wheel 모든 권한을 부여 합니다.

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

그러나 이것은 권장되지 않습니다 . 이 서버에서 실행할 특정 명령이 있으면 해당 명령에만 액세스 할 수 있도록하십시오. 또는 보안 구멍을 뚫을 필요가없는 다른 방법으로 원하는 작업을 수행 할 수 있습니다.


암호를 사용하지 않아도 문제는 다음과 같은 방법으로 사용자 암호를 비활성화 한 것입니다. passwd -l user ... 여전히 pub / private 키를 통해 시스템에 로그인 할 수 있습니다 (개인 키에는 안전한 암호가 있습니다) , 내가 sudo를 할 때 암호를 요구하지만 이것은 개인 키의 암호가 아닙니다. 사용자가 암호를 비활성화하면이 암호는 어디에 설정됩니까 (시스템에서 암호를 유지하지 않으려 고합니다. 개인 키))
farinspace

"사용자가이 암호를 비활성화 한 경우이 암호는 어디에 설정되어 있습니까?" 어디에도 없습니다. 계정을 잠 갔기 때문에 입력 할 수있는 비밀번호가 없습니다.
coneslayer

원격 시스템에서 계정을 다시 활성화 한 다음 암호를 설정해야합니다. 어느 쪽이든, 반드시 두 머신 모두에서 비밀번호를 유지해야합니다. 결함이있는 경우 로컬 로그인 이외의 다른 이유가없는 경우
Jack M.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.