Secure Shell
SSH는 원격접속을 수행하기 위한 서비스이다. 서버 원격작업이나 파일 전송을 SSH로 처리할 수 있다.
SSH 접속을 허용할 계정은 Access-Users&Groups에서 로그인 쉘을 지정해 줘야 한다.
로그인 쉘이 nologin인 경우, 인증에 성공하더라도 쉘이 없으므로 자동으로 접속이 종료된다.
Services-SSH 메뉴로 진입한다.
우상단 Enable을 활성화한 뒤 설정을 진행한다. 사실 여기에서 설정할 수 있는 내용은 거의 없고, Extra options을 써야 한다.
- TCP port : 접속 포트는 보안상 이유로 변경하는 것을 권장한다.
- Permit root login : SSH로 직접 root 로그인을 허용한다. 보안상 이유로 꺼 두는것을 권장한다.
- TCP forwarding : SSH 터널링을 허용한다.
- Private key : 서버 개인키를 입력한다. 빈칸으로 두면 자동 생성한 값을 사용한다.
Extra options
여기에 입력한 내용은 sshd_config 파일에 그대로 반영되므로, manpage 참고해서 설정하면 된다.
개인키 로그인 사용하기
AuthorizedKeysFile /mnt/disk0/.ssh/%u/authorized_keys2
RSA 개인키 인증을 사용하는 경우 개인키 파일을 저장하는 위치를 지정한다.
개인키 파일을 하드디스크에 저장해야 하는데, %u 키워드로 사용자 이름을 대체할 수 있으므로 적절히 변형하여 사용한다.
개인키 파일은 소유자 이외에는 어떠한 권한도 주면 안 된다.
특정 사용자/그룹만 로그인 허용하기
DenyUsers user01 user02 ... AllowUsers sshuser01 sshuser02 ... DenyGroups nossh ... AllowGroups admin sshusers ...
DenyUsers > AllowUsers > DenyGroups > AllowGroups 순서로 우선권을 갖는다.
- DenyUsers에 속해 있다면 AllowUsers/AllowGroups에 속해 있더라도 접속이 차단된다.
- AllowUsers에 속해 있다면 DenyGroups에 속해 있더라도 접속이 허용된다.
- DenyGroups에 속해 있다면 AllowGroups에 속해 있더라도 접속이 차단된다.
네 옵션이 모두 없다면 암시적으로 모든 유저에게 SSH 접속이 허용된다. 하나라도 지정되어 있다면 목록에 명시되지 않은 유저는 차단되도록 바뀐다.
user@host 식으로 특정 호스트에서만 접속을 허용/차단할 수도 있으나, 호스트 필터링은 방화벽을 사용하는 것이 유용할 것이다.
Chroot
파일 전송을 위해 sftp 접속을 허용하려는 경우, 보안상 시스템 폴더로의 접근을 차단해야 할 필요가 있다. Chroot를 사용하고, ForceCommand로 OpenSSH 내장 sftp를 사용하도록 fallback한다.
ChrootDirectory %h ForceCommand internal-sftp
일부 유저나 그룹에만 이 설정을 적용하려면 다음과 같이 Match 블록을 사용한다. Match 블록은 설정파일 맨 끝에 위치해야 한다.
Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp
Chroot를 사용하면 /dev/stdout 등 시스템 디렉터리에도 접근할 수 없게 되므로, ssh 쉘 사용은 불가능하게 되며 sftp만 사용할 수 있다. /dev 등 시스템 디렉터리를 가상으로 만들어 주는 작업은 jail 구성이므로 이 문서에서는 다루지 않는다.