사용자 계정 및 디렉터리 준비
먼저 SFTP 전용 계정을 생성하고 필요한 디렉터리 구조를 구성합니다.
[root@mail ~]# useradd -s /sbin/nologin -M ftpaccess
[root@mail ~]# echo "ftpaccess:SecureP@ssw0rd!" | chpasswdchroot 환경을 위한 디렉터리를 생성하고 권한을 설정합니다. 루트 소유권 설정이 필수입니다.
[root@mail ~]# mkdir -p /data/ftpchroot/ftpaccess/upload
[root@mail ~]# chown root:root /data/ftpchroot/ftpaccess
[root@mail ~]# chmod 755 /data/ftpchroot/ftpaccess
[root@mail ~]# chown ftpaccess:ftpaccess /data/ftpchroot/ftpaccess/upload
[root@mail ~]# chmod 700 /data/ftpchroot/ftpaccess/uploadSSH 서버 설정 변경
/etc/ssh/sshd_config 파일을 편집하여 SFTP 전용 설정을 추가합니다.
# 기본 SSH 설정
Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
# SFTP 서브시스템 설정
Subsystem sftp internal-sftp
# 특정 사용자에 대한 chroot 적용
Match User ftpaccess
ChrootDirectory /data/ftpchroot/ftpaccess
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no핵심 설정 설명:
internal-sftp: 외부 프로세스 없이 내장 SFTP 서버 사용ChrootDirectory: 사용자가 접근 가능한 최상위 디렉터리 제한ForceCommand: 셸 접속을 차단하고 SFTP만 허용
서비스 재시작 및 검증
설정 적용을 위해 SSH 데몬을 재시작합니다.
[root@mail ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]로컬에서 연결 테스트를 수행합니다.
[root@mail ~]# sftp ftpaccess@localhost
ftpaccess@localhost's password:
Connected to localhost.
sftp> pwd
Remote working directory: /
sftp> ls
upload
sftp> put /etc/hosts
Uploading /etc/hosts to /upload/hosts
hosts 100% 192 0.2KB/s 00:00문제 해결 가이드
| 증상 | 원인 | 해결책 |
|---|---|---|
| "broken pipe" 오류 | ChrootDirectory 권한 부적절 | 디렉터리 소유자를 root로, 권한을 755 이하로 설정 |
| 인증 실패 | SELinux 정책 제한 | setenforce 0 또는 적절한 SELinux 컨텍스트 설정 |
| 쓰기 거부 | 업로드 경로 권한 미설정 | 하위 디렉터리에 사용자 쓰기 권한 부여 |