はじめに
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
上記手順をコピペで。