CentOS 搭建 vsftpd

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

Installation,Starting/Stopping

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

version:

  1. 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

  1. # vim /etc/vsftpd/virtual_user_list.txt
  2. xxx
  3. xxx@xxx
  4.  
  5. # db_load -T -t hash -f /etc/vsftpd/virtual_user_list.txt /etc/vsftpd/virtual_user_list.db
  6. # chmod 600 /etc/vsftpd/virtual_user_list.db
  7.  
  8. # cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default
  9. # vi /etc/pam.d/vsftpd
  10. auth required pam_userdb.so db=/etc/vsftpd/virtual_user_list
  11. 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 的格式如下:
  1. <user1>
  2. <passwd1>
  3. <user2>
  4. <passwd2>
  5. ...
  • /etc/pam.d/vsftpd
    文件为 vsftpd 认证用户时需要读取的文件,需在 vsftpd 的配置中指定此文件文件名(见下文)
    Note: 用上述两行覆盖之前的内容,而不是追加,否则用户登录时会返回 530 Login incorrect,/var/log/secure:
  1. pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=xxx rhost=...

Basic configuration

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

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

  • Run vsftpd in standalone mode
  1. listen=YES
  2. #listen_ipv6=YES

Note: listenlisten_ipv6 只能开启一个

  • Disable anonymous login
  1. anonymous_enable=NO
  • Specifiy the PAM service name for vsftpd
  1. pam_service_name=vsftpd

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

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

Create local user vsftpd:

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

Create “home” directory for vritual user xxx:

  1. # mkdir /data/ftp
  2. # mkdir /data/ftp/xxx
  3. # chown vsftpd:vsftpd /data/ftp/xxx
  • Specifiy listening address
  1. listen_address=10.105.87.168 # default: 0.0.0.0
  2. listen_port=10101 # default: 21

chroot

  1. ftp> pwd
  2. 257 "/data/ftp/xxx"
  3. ftp> cd ../../..
  4. 250 Directory successfully changed.
  5. ftp> pwd
  6. 257 "/"

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

  1. chroot_local_user=YES
  2. chroot_list_enable=YES
  3. chroot_list_file=/etc/vsftpd/chroot_list

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

  1. # cd /etc/vsftpd
  2. # touch chroot_list
  3. # chmod 600 chroot_list

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

  1. ftp> pwd
  2. 257 "/"

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

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

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

  1. # chmod a-w /data/ftp/xxx

Appendix: a full configuration example

  1. anonymous_enable=NO
  2. local_enable=YES
  3. write_enable=YES
  4. local_umask=022
  5.  
  6. #anon_upload_enable=YES
  7. #anon_mkdir_write_enable=YES
  8.  
  9. dirmessage_enable=YES
  10. xferlog_enable=YES
  11. connect_from_port_20=YES
  12.  
  13. #chown_uploads=YES
  14. #chown_username=whoever
  15.  
  16. #xferlog_file=/var/log/xferlog
  17. xferlog_std_format=YES
  18.  
  19. #idle_session_timeout=600
  20. #data_connection_timeout=120
  21.  
  22. #nopriv_user=ftpsecure
  23.  
  24. #async_abor_enable=YES
  25.  
  26. #ascii_upload_enable=YES
  27. #ascii_download_enable=YES
  28.  
  29. #ftpd_banner=Welcome to blah FTP service.
  30.  
  31. #deny_email_enable=YES
  32. #banned_email_file=/etc/vsftpd/banned_emails
  33.  
  34.  
  35. chroot_local_user=YES
  36. chroot_list_enable=YES
  37. chroot_list_file=/etc/vsftpd/chroot_list
  38.  
  39. #ls_recurse_enable=YES
  40.  
  41. listen=YES
  42. #listen_ipv6=YES
  43.  
  44. pam_service_name=vsftpd
  45. userlist_enable=YES
  46. tcp_wrappers=YES
  47.  
  48.  
  49. guest_enable=YES
  50. guest_username=vsftpd
  51. virtual_use_local_privs=YES
  52. user_sub_token=$USER
  53. local_root=/data/ftp/$USER

猜你在找的CentOS相关文章