- SFTP 서버에 여러 사용자를 관리할때 각 사용자가 본인의 홈 디렉토리 이외에 어떠한 디렉토리도 확인이 불가능 하도록 구성
- chroot 환경이란 본인의 홈 디렉토리가 마치 root 디렉토리인 것처럼 보이게 하는 기술
- 아래 구성은 Centos 6, 7, 8 모두에서 사용 가능
> groupadd sftpusers
# 사용자 그룹이 sftpusers 인 경우 chroot 적용
> vi /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp -f local2 -l INFO /* 일반 유저의 sftp logging 설정. local2를 설정한 이유는 secure 파일에 저장하기 위함. */
Match Group sftpusers
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l INFO /* chroot에서 사용할 ForceCommand에서는 -f 옵션이 적용되지 않음. 디폴트로 secure 파일에 저장 됨. */
> systemctl restart sshd
> vi /etc/rsyslog.conf
# SFTP Logging
local2.* /var/log/secure /* 일반 유저의 log를 secure 파일에 전송 */
> systemctl restart rsyslog
1. ID 생성
> useradd -g sftpusers -s /sbin/nologin user1
> passwd user1
2. 작업 디렉토리 생성 및 권한 부여
# 각 사용자의 home 디렉토리는 root.root의 소유여야 하고, 작업 디렉토리는 해당 사용자의 소유여야 함
> mkdir -p /ftp_incoming/user1/workspace
> chown user1.sftpusers /ftp_incoming/user1/workspace/
> chmod 755 /ftp_incoming/user1
3. home 디렉토리 변경
> usermod -d /ftp_incoming/user1 user1
4. workspace(작업 디렉토리) 디렉토리를 당사 유저가 이용할 수 있도록 권한 수정
> chmod 707 /ftp_incoming/user1/workspace
5. sftp logging을 위하여 디렉토리 생성
> mkdir -p /ftp_incoming/user1/dev
6. SFTP 서비스 특성상 패스워드 변경이 쉽지 않기 때문에 패스워드 변경 정책 변경
> chage -M 99999 user1
> chage -m 0 user1
7. sftp 전용 사용자의 logging을 위해 rsyslog.conf에 socket 추가
> vi /etc/rsyslog.conf
$AddUnixListenSocket /ftp_incoming/user1/dev/log /* chroot 환경에서 /dev/log 를 참조할 수 없기때문에 user별로 log socket을 생성하여 secure 파일에 logging */
> systemctl restart rsyslog
> vi add_sftp_user.sh
#!/bin/sh
echo "Input SFTP User Account :"
read sftpuserid
if [ ! $sftpuserid ]; then
echo "Are you kidding -_-?"
exit 0
fi
echo "$sftpuserid : OK? (y/n)"
read yorn
if [ $yorn == "y" ]; then
useradd -g sftpusers -s /sbin/nologin $sftpuserid
mkdir -p /ftp_incoming/$sftpuserid/workspace
chown $sftpuserid.sftpusers /ftp_incoming/$sftpuserid/workspace/
usermod -d /ftp_incoming/$sftpuserid $sftpuserid
chmod 755 /ftp_incoming/$sftpuserid
chmod 707 /ftp_incoming/$sftpuserid/workspace
mkdir -p /ftp_incoming/$sftpuserid/dev
chage -M 99999 $sftpuserid
chage -m 0 $sftpuserid
passwd $sftpuserid
echo "vi /etc/hosts.allow !!! (Add Client IP)"
echo "vi /etc/rsyslog.conf !!! (Add Unix Listen Socket)"
else
echo "Are you kidding -_-?"
fi
댓글 영역