CentOS 6 환경에서 SFTP 서버 구축하기

사용자 계정 및 디렉터리 준비

먼저 SFTP 전용 계정을 생성하고 필요한 디렉터리 구조를 구성합니다.

[root@mail ~]# useradd -s /sbin/nologin -M ftpaccess
[root@mail ~]# echo "ftpaccess:SecureP@ssw0rd!" | chpasswd

chroot 환경을 위한 디렉터리를 생성하고 권한을 설정합니다. 루트 소유권 설정이 필수입니다.

[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/upload

SSH 서버 설정 변경

/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 컨텍스트 설정
쓰기 거부업로드 경로 권한 미설정하위 디렉터리에 사용자 쓰기 권한 부여

태그: CentOS 6 SFTP OpenSSH chroot SSH

7월 17일 07:44에 게시됨