一直以为 ftp 很简单, 之前 ECS 的测试环境 ftp 用宝塔搭的, 确实方便省事, 但是宝塔占用了我测试的 80 端口, 于是就把宝塔全卸了. 重新安装 ftp, 安装之后, 不管是本地系统账号还是新建的 ftp 账号, 不是这报错就是那报错, 折腾了一两个小时...
分享备忘, 新人防坑.
一, 安装
- # 1. 安装软件
- $ sudo apt-get install vsftpd
- # 2. 修改 /etc/shells, 避免报错 530 login incorrect
- $ vi /etc/shells
增加 /usr/sbin/nologin
- # 3. 增加 ftp 账户 (如果使用系统账号也可不添加)
- $ sudo useradd -d /home/ftp -g ftp -s /usr/sbin/nologin ftpname
指定 / home/ftp 为 ftp 文件目录, 创建 ftpname 用户创建 ftp 用户组.
- # 4. 设置 ftpname 密码
- $ sudo passwd ftpname
二, vsftp 配置文件
$ sudo vi /etc/vsftpd.conf 重点配置标注下
- listen=YES
- listen_ipv6=YES
- anonymous_enable=NO # 禁用匿名账号登陆
- local_enable=YES # 允许本地账号登陆
- write_enable=YES # 允许 ftp 的写操作
- anon_upload_enable=NO
- anon_mkdir_write_enable=NO
- dirmessage_enable=YES
- use_localtime=YES
- xferlog_enable=YES
- connect_from_port_20=YES
- ftpd_banner=Welcome to FTP service.
- # 允许写入跟路径, 这条不加容易出现 500 OOPS: vsftpd: refusing to run with writable root inside chroot () 报错
- allow_writeable_chroot=YES
- # 这三条设置用户限定在 ftp 文件目录, 不能跨出该目录外, 但在 / etc/vsftpd.chroot_list 文件中列出的用户除外.
- chroot_local_user=YES # 所有用户被限制在 ftp 目录内, 不能跨出该目录, 除非有例外情况;
- chroot_list_enable=YES # 这里就是例外情况
- chroot_list_file=/etc/vsftpd.chroot_list # 跨目录例外情况 白名单
- secure_chroot_dir=/var/run/vsftpd/empty
- pam_service_name=vsftpd
- rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
- rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
- ssl_enable=NO
- local_root=/home/ftp # 设置 ftp 文件主目录 (登陆 ftp 后显示的目录)
- # 在 vsftpd.user_list 里的用户允许登陆 ftp, 注意同时注释掉在 ftpuser 黑名单 里面的用户
- userlist_enable=YES
- userlist_deny=NO
- userlist_file=/etc/vsftpd.user_list # 允许 ftp 登陆账号 白名单
三, 用户黑白名单实现
1. ftpuser 黑名单
/etc/ftpusers 是一个黑名单配置, 禁止访问 ftp 的用户, 不受任何配置项影响, 安装 ftp 后默认会把系统默认用户都存放在这里.
2. userlist_enable/userlist_deny/vsftpd.user_list 共同控制
vsftpd.user_list 为白名单还是黑名单受 userlist_enable,userlist_deny 配置控制, 一般情况下设置为白名单 (即下面第一种配置).
(1) userlist_enable=YES,userlist_deny=NO
此时 vsftpd.user_list 为白名单, 在此列表的用户可以访问 ftp, 其他用户不能.
(2) userlist_enable=YES,userlist_deny=YES
此时 vsftpd.user_list 为黑名单, 在此列表的用户不能访问 ftp, 其他用户可以.
(3) userlist_enable=NO,userlist_deny=YES 和 NO 时
所有用户被允许登陆, 此时 userlist_deny 和 userlist_file 配置失效.
来源: http://www.bubuko.com/infodetail-2944818.html