CentOS 搭建 vsftpd

前端之家收集整理的这篇文章主要介绍了CentOS 搭建 vsftpd前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Installation,Starting/Stopping

# yum install vsftpd
# /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
# service vsftpd {start,stop,status,...} # 2.2.2(/etc/init.d/vsftpd)
# systemctl {start,...} vsftpd[.service] # 3.02(/usr/lib/systemd/system/vsftpd*)

version:

vsftpd-3.0.2-9.el7.x86_64

Create FTP user

There are 3 kinds of users in vsftpd:
1. anonymous
2. guest - virtual user
3. local user

PAM with virtual users

# vim /etc/vsftpd/virtual_user_list.txt
xxx
xxx@xxx

# db_load -T -t hash -f /etc/vsftpd/virtual_user_list.txt /etc/vsftpd/virtual_user_list.db
# chmod 600 /etc/vsftpd/virtual_user_list.db

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default
# vi /etc/pam.d/vsftpd
auth       required     pam_userdb.so db=/etc/vsftpd/virtual_user_list
account    required     pam_userdb.so db=/etc/vsftpd/virtual_user_list
  • /etc/vsftpd/virtual_user_list.txt
    用于生成 db_load 读取生成用户密码数据库 /etc/vsftpd/virtual_user_list.db,PAM 读取 /etc/vsftpd/virtual_user_list.db 进行访问控制,文件名可以任意取,只需要配置正确就行。
    db_load 上述命令行选项对应的 /etc/vsftpd/virtual_user_list.txt 的格式如下:
  • @H_404_61@
    <user1>
    <passwd1>
    <user2>
    <passwd2>
    ...
    • /etc/pam.d/vsftpd
      文件为 vsftpd 认证用户时需要读取的文件,需在 vsftpd 的配置中指定此文件文件名(见下文)
      Note: 用上述两行覆盖之前的内容,而不是追加,否则用户登录时会返回 530 Login incorrect,/var/log/secure:
    • @H_404_61@
      pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=xxx rhost=...

      Basic configuration

      # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default
      # vim /etc/vsftpd/vsftpd.conf

      Note: 每一个配置项结尾都不能有多余的空格

      • Run vsftpd in standalone mode
      • @H_404_61@
        listen=YES
        #listen_ipv6=YES

        Note: listenlisten_ipv6 只能开启一个

        • Disable anonymous login
        • @H_404_61@
          anonymous_enable=NO
          • Specifiy the PAM service name for vsftpd
          • @H_404_61@
            pam_service_name=vsftpd

            即上文编辑过的 /etc/pam.d/vsftpd
            Note: 只填文件名,不填目录

            • Configure virtual user
            • @H_404_61@
              guest_enable=YES # enable virtual user
              guest_username=vsftpd # the local user that the virtual user is mapped to
              virtual_use_local_privs=YES # virtual users use the same privileges as local users.
              user_sub_token=$USER
              local_root=/data/ftp/$USER

              Create local user vsftpd:

              # useradd -m -b /home -s /sbin/nologin vsftpd
              # chmod 700 /home/vsftpd

              Create “home” directory for vritual user xxx:

              # mkdir /data/ftp
              # mkdir /data/ftp/xxx
              # chown vsftpd:vsftpd /data/ftp/xxx
              • Specifiy listening address
              • @H_404_61@
                listen_address=10.105.87.168    # default: 0.0.0.0
                listen_port=10101               # default: 21

                chroot

                ftp> pwd
                257 "/data/ftp/xxx"
                ftp> cd ../../..
                250 Directory successfully changed.
                ftp> pwd
                257 "/"

                通过 FTP 能直接访问上级目录,这样会有较大的安全隐患,因此我们使用 chroot 限制每个虚拟用户的根目录为自己的 “home” 目录:

                chroot_local_user=YES
                chroot_list_enable=YES
                chroot_list_file=/etc/vsftpd/chroot_list

                创建文件 chroot_list,并且保证文件 chroot_list 为空,即所有用户均被限定:

                # cd /etc/vsftpd
                # touch chroot_list
                # chmod 600 chroot_list

                2.2.2 版本已到达了限定目录的效果

                ftp> pwd
                257 "/"

                但是 3.0.2 版本会返回如下错误

                500 OOPS: vsftpd: refusing to run with writable root inside chroot()

                因此需要去掉根目录的写权限:

                # chmod a-w /data/ftp/xxx

                Appendix: a full configuration example

                anonymous_enable=NO
                local_enable=YES
                write_enable=YES
                local_umask=022
                
                #anon_upload_enable=YES
                #anon_mkdir_write_enable=YES
                
                dirmessage_enable=YES
                xferlog_enable=YES
                connect_from_port_20=YES
                
                #chown_uploads=YES
                #chown_username=whoever
                
                #xferlog_file=/var/log/xferlog
                xferlog_std_format=YES
                
                #idle_session_timeout=600
                #data_connection_timeout=120
                
                #nopriv_user=ftpsecure
                
                #async_abor_enable=YES
                
                #ascii_upload_enable=YES
                #ascii_download_enable=YES
                
                #ftpd_banner=Welcome to blah FTP service.
                
                #deny_email_enable=YES
                #banned_email_file=/etc/vsftpd/banned_emails
                
                
                chroot_local_user=YES
                chroot_list_enable=YES
                chroot_list_file=/etc/vsftpd/chroot_list
                
                #ls_recurse_enable=YES
                
                listen=YES
                #listen_ipv6=YES
                
                pam_service_name=vsftpd
                userlist_enable=YES
                tcp_wrappers=YES
                
                
                guest_enable=YES
                guest_username=vsftpd
                virtual_use_local_privs=YES
                user_sub_token=$USER
                local_root=/data/ftp/$USER

猜你在找的CentOS相关文章