一, 简要说明
ftp: 文件传输协议
vsftpd: 非常安全的 ftp 进程
二, 工作模式
ftp 的命令端口为 21
主动模式(不推荐):ftp 数据端口为 20, 服务器连接客户端, 因为客户端都有防火墙, 所有使用不便
被动模式(推荐): 服务器告诉客户端我开放的端口, 客户端连接服务器
三, 安装 vsftpd
- yum -y install vsftpd
- setenforce 0
- sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装完成后, 防火墙设置开启 21 和配置文件中 (pasv_min_port 到 pasv_max_port) 的端口
配置文件:/etc/vsftpd/vsftpd.conf
主程序:/usr/sbin/vsftpd
四, 被动模式配置 ftp
1. 通用配置
- #anonymous
- anonymous_enable=NO
- #local system user
- local_enable=YES
- allow_writeable_chroot=YES
- #passive mode and port
- pasv_enable=YES
- pasv_min_port=20000
- pasv_max_port=20999
- #listen
- listen=YES
- listen_ipv6=NO
- connect_from_port_20=YES
- #log
- xferlog_enable=YES
- xferlog_file=/var/log/xferlog
- #welcome info
- dirmessage_enable=YES
- #trans limit
- idle_session_timeout=120
- data_connection_timeout=120
- tcp_wrappers=YES
- max_clients=10
- max_per_ip=10
- #safe
- local_umask=022
- chroot_local_user=YES
2. 匿名用户配置(不推荐)
匿名用户 anonymous, 对应服务器的 ftp 用户, 访问的文件夹为 / var/ftp, 除 root 不能有写权限
开启配置
- #anonymous
- anonymous_enable=YES
3. 系统用户配置(不推荐)
因为 ftp 是明文传输, 如果被抓包了就能看到系统用户的用户名和密码, 导致服务器不安全
相关配置
- #local system user
- local_enable=YES
- write_enable=YES
五, 虚拟用户配置(推荐)
可以基于数据库和文件两种模式, 文件模式配置如下:
1. 创建用户数据库文件
vm_user.txt 格式必须是一行用户名一行密码如
- tom
- 123456
- vi /etc/vsftpd/vm_user.txt
- cd /etc/vsftpd/
- db_load -T -t hash -f vm_user.txt vm_user.db
- chmod 600 vm_user.db
2. 创建映射的用户和 FTP 目录
useradd -s /sbin/nologin ftpuser
3. 创建 pam 文件
- vi /etc/pam.d/vm-vsftpd
- auth required pam_userdb.so db=/etc/vsftpd/vm_user
- account required pam_userdb.so db=/etc/vsftpd/vm_user
4. 在 vsftp.conf 中进行配置
- #vm_ftp
- guest_enable=YES
- guest_username=ftpuser
- pam_service_name=vm-vsftpd
- user_config_dir=/etc/vsftpd/vm_ftp.d/
5. 为虚拟用户进行单独权限设置
- mkdir /etc/vsftpd/vm_ftp.d/
- mkdir /home/ftpuser/life
- chown -R ftpuser:ftpuser /home/ftpuser/
- vi /etc/vsftpd/vm_ftp.d/tom
- write_enable=YES
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES
- local_root=/home/ftpuser/life
6. 完整的 vsftpd.conf 配置如下
- #anonymous
- anonymous_enable=NO
- #local system user
- local_enable=YES
- allow_writeable_chroot=YES
- #passive mode and port
- pasv_enable=YES
- pasv_min_port=20000
- pasv_max_port=20999
- #listen
- listen=YES
- listen_ipv6=NO
- connect_from_port_20=YES
- #log
- xferlog_enable=YES
- xferlog_file=/var/log/xferlog
- #welcome info
- dirmessage_enable=YES
- #trans limit
- idle_session_timeout=120
- data_connection_timeout=120
- tcp_wrappers=YES
- max_clients=10
- max_per_ip=10
- #safe
- local_umask=022
- chroot_local_user=YES
- #vm_ftp
- guest_enable=YES
- guest_username=ftpuser
- pam_service_name=vm-vsftpd
- user_config_dir=/etc/vsftpd/vm_ftp.d/
7. 重启并加入开机启动项
- systemctl restart vsftpd
- systemctl enable vsftpd
六, 配置说明
anonymous_enable=YES 是否启用匿名用户
local_enable=YES 是否启动系统用户
write_enable=YES 可以上传文件
anon_upload_enable=YES 默认匿名用户不能上传, 开启上传, 但是默认 var/pub 目录本身没有写权限,
anon_mkdir_write_enable=YES 匿名用户可以创建文件夹
anon_other_write_enable=YES 匿名用户其他写权限
dirmessage_enable=YES 是否显示欢迎信息 目录下的隐藏文件. message 为内容
xferlog_enable=YES 是否启动传输日志
xferlog_file=/var/log/xferlog 指定日志文件
xferlog_std_format=YES 日志文件是否使用标准格式
chown_uploads=YES 上传后是否改变属主
chown_username=whoever 改变的属主为
idle_session_timeout=600 命令连接超时
data_connection_timeout=120 数据连接超时
ascii_upload_enable=YES 以文本模式上传
ascii_download_enable=YES 以文本模式下载
chroot_local_user=YES 全部用户锁定到家目录
chroot_list_enable=YES 需要例外
chroot_list_file=/etc/vsftpd/chroot_list 例外用户列表
allow_writeable_chroot=YES 当设置禁锢目录后, 默认对根文件夹没有写权限才能登陆, 该设置可以启用写入
listen=YES 是否监听
pam_service_name=vsftpd pam 验证文件模块名
userlist_enable=YES 启用 user_list 文件
userlist_deny=NO 当为 yes 时, 列表中的不能登录, 当为 no 时只有列表中的用户才能登陆
tcp_wrappers=YES 可以通过 host 文件进行限制
nax_clients = 10 最多客户端连接数
max_per_ip = 10 每个 ip 可以连接几个
来源: http://www.bubuko.com/infodetail-3304353.html