라는 내용으로 검색을 해보면, 국내 해외 가리지 않고 대부분 /etc/sudoers
에 NOPASSWD
를 사용하라고 한다.
그러나, 이는 sudo의 인증 자체를 무력화시키는 방법으로, 물리적 취약점 외에도 악의적 스크립트에 의한 root 탈취 등 보안 리스크가 크다고 볼 수 있다.
여기서는 pam-ssh-agent-auth를 이용하여 sudo에 ssh-agent 인증을 추가하는 방법을 알아본다.
libpam-ssh-agent-auth 설치
먼저 libpam-ssh-agent-auth
를 설치한다.
$ sudo apt update
$ sudo apt install libpam-ssh-agent-auth
pam.conf 수정
pam.conf
를 수정하여 위에서 설치한 libpam-ssh-agent-auth
를 사용하도록 한다.
배포판에 따라 차이가 있지만 Ubuntu의 경우 /etc/pam.d
폴더가 존재하고 /etc/pam.d
가 존재하면 /etc/pam.conf
가 무시되기 때문에 /etc/pam.d
를 수정해야 한다.
common-auth
상위에 오도록 아래와 같이 수정한다.
/etc/pam.d/sudo
...
# ssh-agent auth
auth sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
...
sudo
버전이 1.8.5
미만인 경우, sudoers
도 수정해야 한다.
/etc/sudoers ($ sudo visudo
)
...
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# ssh-agent auth
Defaults env_keep+=SSH_AUTH_SOCK
...
따라했는데 안되는 이유
ssh-agent
가 켜져있고- 키가 등록되어 있고
- 클라이언트에 ssh-agent 포워딩이 활성화되어 있고
~/.ssh/
와~/.ssh/authorized_keys
가root
또는 현재 사용자의 소유이며 자기 자신을 제외하고는 쓰기 권한이 없어야
하는데 이 중 무언가 하나가 빠졌을 것이다.
그래도 모르겠는 경우
상기한 /etc/pam.d/sudo
의 pam_ssh_agent_auth.so
가 있는 줄 끝에 debug
를 붙인 다음 /var/log/auth.log
를 잘 살펴보면 왜 안되는지 이유를 알려줄 것이다.
ssh-agent 인증의 보안성
기본적으로 포워딩되었다고 하더라도 ssh-agent 소켓은 다른 유저가 사용할 수 없다.
그러나 root는 모든 것이 가능하므로 당연히 내 ssh-agent 소켓을 접근해서 나의 개인키로 다른 곳에 인증하는 것 또한 가능하다.
root에 내가 아닌 다른 사람이 접근할 수 있는 환경이라면 NOPASSWD
로 인한 보안 위협을 차단하고 새로운 형태의 보안 위협을 만드는 것이 될 수 있으므로 사용하지 않는 것이 좋겠다.