sftpサーバを構築する

はじめに

sftpサーバを立てる手順を明記する。

権限まわりがシビアなのでハマるのできちんと整理する

前提

ftpuserというユーザーを作り、uploadというディレクトリに対してファイルを置く設定とする。

設定

usermod -aG sftp ftpuser

ls -l/home/ftpuser/upload/
chmod 750 /home/ftpuser/upload

sshd -t
service sshd reload

vi /etc/ssh/sshd_config 

sshd_configは以下の通り

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintLastLog yes
UsePrivilegeSeparation sandbox
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp internal-sftp
Match group sftp
    #ChrootDirectory /home/ftpuser/upload
    ChrootDirectory /home/ftpuser
    ForceCommand internal-sftp

権限を適切にすること

 

# ls -ld /home/ftpuser/
drwxr-xr-x 4 root root 4096 May 29 15:29 /home/ftpuser/

# ls -ld /home/ftpuser/upload/
drwxr-x--- 2 ftpuser ftpuser 4096 May 29 16:00 /home/ftpuser/upload/

上記権限になっていないと、以下のような権限エラーになることがある

Permission denied (publickey).
This service allows sftp connections only.

/var/log/secureには以下のような記載がある

fatal: bad ownership or modes for chroot directory "/home/ftpuser" [postauth]
pam_unix(sshd:session): session closed for user ftpuser

ftpの場合(おまけ)

Comment Edit
yum install vsftpd -y

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org

Elastic_IP=`curl http://169.254.169.254/latest/meta-data/public-ipv4`

cat << EOF >> /etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=${Elastic_IP}
pasv_min_port=60001
pasv_max_port=60010
use_localtime=YES
force_dot_files=YES
EOF

sed -i -e "/^anonymous_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^dirmessage_enable/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#ascii_upload_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#ascii_download_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#chroot_local_user/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^#chroot_list_enable/s/#//g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^tcp_wrappers/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^connect_from_port_20/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
sed -i -e "/^xferlog_std_format/s/YES/NO/g" /etc/vsftpd/vsftpd.conf
echo "user_config_dir=/etc/vsftpd/user_conf" >> /etc/vsftpd/vsftpd.conf
echo "ftpuser" > /etc/vsftpd/chroot_list

service vsftpd start
chkconfig vsftpd on

sudo su
useradd ftpuser
passwd ftpuser

上記手順をコピペで。