일부 사용자끼리 특정 디렉터리 내 읽기/쓰기 권한을 주어 파일을 공유하고 싶다.
공유 계정은 아래의 조건을 만족해야 한다.
- 공유 계정은 SSH 접근 불가능
- 지정된 공유 디렉터리 상위로 이동 불가
SSH 서버의 sshd_config 설정을 통해 어렵지 않게 구현할 수 있다.
1. 사용자 생성
먼저 공유할 계정을 생성한다.
쉘 접근이 불필요한 계정일 경우 nologin으로 설정한다.
$ useradd share
$ passwd share
$ vi /etc/passwd
share:x:1010:1010::/home/share:/usr/sbin/nologin
2. sftp & Chroot 적용
아래의 sshd_config 설정을 적용하면 ssh로 쉘에 접근 할 수 없다.
$ vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User share
ChrootDirectory /home/share
ForceCommand internal-sftp
$ service ssh restart
3. 디렉터리 설정
SSH 재시작 후 share 계정으로 SSH 쉘 접근이 불가능해지고, sftp로만 접근할 수 있게 된다.
만약 SSH가 연결이 반복적으로 끊어지는 문제가 발생한다면, Chroot 디렉터리의 권한 설정이 잘못된 경우일 수 있다.
아래와 같이 Chroot 디렉터리와 상위 디렉터리의 권한을 설정한다.
- Chroot 디렉터리 및 상위 디렉터리 권한: root 소유자, 755 권한
- Chroot 디렉터리의 그룹: share
예시로 /home/directory/share를 ChrootDirectory 라면 권한은 다음과 같이 되어야한다.
drwxr-xr-x root:root home/
drwxr-xr-x root:root directory/
drwxr-xr-x root:share share/
만약 상위 디렉터리의 권한을 변경할 수 없는 상황이라면, 심볼릭 링크를 사용할 수 있다.
Chroot 디렉터리로 사용하고 싶은 디렉터리의 상위 경로(/test/direc/tory/) 권한을 변경할 수 없고, /home/share는 Chroot 권한 조건을 만족할 수 있는 경우 다음과 같이 설정할 수 있다.
$ ln -s /test/direc/tory/share /home/share
그 후, sshd_config에서 Chroot 경로를 /home/share로 지정하고 SSH 서비스를 재시작하면 Chroot가 정상 작동한다.
'Server' 카테고리의 다른 글
Github Actions로 push 이벤트 발생 시 내 서버로 배포 자동화하기 (0) | 2023.09.05 |
---|---|
아파치 HTTP 인증(Basic/Digest authentication) 적용 (0) | 2022.04.28 |
MYSQL 외부접근 허용하기 (0) | 2019.04.11 |
아파치 보안 설정 (0) | 2018.04.11 |