sshd_config.d
Debian에서 SSH 관련 설정은 /etc/ssh/ 디렉토리 내에서 진행한다. 해당 디렉토리에는 다음 이미지와 같은 파일과 디렉토리가 존재한다.
Password 방식의 Authentication을 제한하기 위해서 /etc/ssh/sshd_config 파일의 PasswordAuthentication을 no로 설정해주고, ssh restart를 진행했으나, 여전히 Password 방식의 authentication이 가능했다.
/etc/ssh/sshd_config.d 디렉토리 내에 50-cloud-init.conf 파일을 발견했고, 해당 파일 내에서 PasswordAuthentication yes가 설정되어 있음을 확인했다. yes를 no로 바꿔주고 sudo systemctl restart ssh를 하자, 드디어 PasswordAuthentication이 불가능해졌다.
sshd service를 위한 설정은 기본적으로 sshd_config 파일을 반영하는데, 해당 파일 내에 Include /etc/ssh/sshd_config.d/*.conf가 적혀있다. 이로 인해, sshd_config.d 디렉토리 내 설정파일들이 sshd_config 파일보다 우선순위를 가지진다. 즉, sshd_config 파일 내의 설정보다 sshd_config.d 디렉토리 내의 설정 파일이 우선순위를 가진다. 때문에 sshd_config 파일 내에서 PasswordAuthentication no로 설정해주었더라도, sshd_config.d 디렉토리 내 설정파일에서 PasswordAuthentication yes로 설정해주었다면, Password 방식의 authentication이 가능한 것이다. 이는 PasswordAuthentication 뿐만 아니라 Port, UsePAM 등의 설정도 모두 포함된다.
다음은 /etc/ssh/sshd_config 파일 내에서 Include /etc/ssh/sshd_config.d/*.conf가 적힌 부분이다.
Include /etc/ssh/sshd_config.d/*.conf에 해당하는 파일이 존재함을 확인할 수 있다. 필자의 경우, 50-cloud-init.conf 파일에 PasswordAuthentication yes로 설정되어있었고, 이를 no로 수정해주었다.
Debian의 man pages에서는 sshd_config과 관련하여 다음과 같은 정보를 제공하고 있다.
/etc/ssh/sshd_config.d/.conf* files are included at the start of the configuration file, so options set there will override those in /etc/ssh/sshd_config.
https://manpages.debian.org/unstable/openssh-server/sshd_config.5.en.html
그렇다면, 왜 SSH 설정파일을 분리하는 것일까?
모든 SSH 설정을 sshd_config 파일에서 한번에 관리하게 되면, 설정이 늘어남에 따라 설정 파일 관리가 복잡해질 수 있다. 이때 sshd_config.d 디렉토리 내에 여러 설정파일을 사용해 SSH 설정을 모듈화한다면, 설정 파일 관리가 상대적으로 쉽고, 유지보수 측면에도 도움이 된다. 특히나 클라우드 제공업체에서는 가상머신을 생성해서 자원을 사용자에게 제공하는데, 여러 자원들이 다른 SSH 설정을 가질 수 있다. 이때 사용자의 보안 요구에 다라서 sshd_config.d 파일을 사용하게 되면, 클라우드 서비스의 기존 설정(sshd_config)을 유지하면서, 자원마다 개별적인 ssh 설정이 가능해진다. 따라서 각 자원별로 SSH 설정 관리가 용이해진다.
그 외에도, 다음과 같은 장점들이 있다.
- 10-admin.conf, 20-dev.conf 등의 설정파일을 추가로 사용하여, 그룹에 따라서 설정을 다르게 적용할 수 있다
- 보안 정책 추가, 삭제, 수정이 용이하다
- 새로운 보안 정책이 필요할 경우, 기존 설정파일을 수정하는 것이 아닌 sshd_config.d 디렉토리 내에 파일을 추가함으로써 새로운 보안 정책을 적용할 수 있다.
- 이 경우, 추가된 보안 정책을 삭제 혹은 수정하고자 할 때도, 단순히 추가된 설정 파일을 삭제 혹은 수정해주기만 하면 되기 때문에 효율적이고 안전하다.
- 서비스별로 보안 정책을 다르게 적용할 수 있다. 예를 들어,
- 웹서버의 ssh 설정에는 PasswordAuthentication을 yes로
- 데이터베이스 서버의 ssh 설정에는 PasswordAuthentication을 no로 설정하는 것이 그 예이다.
[References]
https://manpages.debian.org/unstable/openssh-server/sshd_config.5.en.html