3 min read

Secure Shell

SSH는 원격접속을 수행하기 위한 서비스이다. 서버 원격작업이나 파일 전송을 SSH로 처리할 수 있다.

SSH 접속을 허용할 계정은 Access-Users&Groups에서 로그인 쉘을 지정해 줘야 한다.
로그인 쉘이 nologin인 경우, 인증에 성공하더라도 쉘이 없으므로 자동으로 접속이 종료된다.

Services-SSH 메뉴로 진입한다.

Secure Shell

우상단 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 구성이므로 이 문서에서는 다루지 않는다.