日: 2019年2月7日

  • sftpサーバを構築する

    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

    上記手順をコピペで。