Vsftp服务基础
用户控制列表文件ftpusers和user_list
ftpusers:将被禁止登录ftp服务器
user_list:可能被禁止,具体取决于vsftpd.conf,
当userlist_enable=YES,user_list文件生效,表示禁用
当userlist_enable=NO,user_list文件失效,表示此文件内的用户可以登陆
当userlist_deny=YES,仅禁用user_list的用户登录
当userlist_deny=NO,仅允许user_list的用户登录
主配置文件vsftp.conf
在vsftpd的主配置文件中,配置行采用“配置项=参数”的格式。下面是vsftpd.conf文件中常见的一些配置项及含义说明。
配置示例 含义说明 匿名用户 anonymous_enable=YES 是否允许匿名访问 anon_umask=022 设置匿名用户上传文件的默认权限 anon_root=/var/ftp 设置匿名用户的FTP根目录(缺省为/var/ftp/) anon_upload_enable=YES 是否允许匿名用户上传文件 anon_mkdir_write_enable=YES 是否允许匿名用户创建目录的写入权限 anon_other_write_enable=YES 是否允许匿名用户有其他的写入权限。比如文件覆盖,删除,更改 anon_max_rate=0 限制匿名用户最大传输速度,单位为字节 本地用户 local_enable=YES 是否允许本地系统用户访问 local_umask=022 设置本地用户所上传文件的默认权限掩码值 local_root=/var/ftp 设置本地用户的FTP根目录(缺省为用户的宿主目录) chroot_local_user=YES 是否将FTP用户禁锢在宿主目录中 local_max_rate=0 限制用户的最多传输速率(0为无限制),单位默认为字节 全局配置 listen=YES 是否以独立运行的方式监听服务 listen_port=21 设置监听FTP服务的端口号 write_enable=YES 启用任何形式的写入权限(如上传、删除文件等)都需要开启此项 download_enable=YES 是否允许下载文件(建议仅限于浏览、上传的FTP服务器时可将其设为NO) dirmessage_enable=YES 用户切换进入目录时显示.message文件(如果存在)的内容 xferlog_enable=YES 启动xferlog日志,默认记录在“\var\log\xferlog”文件 xferlog_std_format=YES 启用标准的xferlog日志格式若禁用此项,将使用vsftpd自己的日志格式 dual_log_enable=YES 启用采用VSFTPD自己的日志记录方式 log_ftp_protocol=YES 记录所有的ftp命令日志 syslog_enable=YES 是否将在日志信息写入系统日志(/var/log/messages中) connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接) pasv_enable=YES 允许被动模式连接 pasv_max_port=24600 设置用于被动模式的服务器最大端口号 pasv_min_port=24500 设置用于被动模式的服务器最小端口号 pam_service_name=vsftpd 设置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应得文件名) userlist_enable=YES 是否启用user_list用户列表 userlist_deny=YES 是否禁用user_list列表文件中的用户账号 max_per_ip=0 对于来自相同IP地址的客户端,最多允许多个并发连接(0无限制) tcp_wrappers=YES 是否启用TCP_Wrappers主机访问控制(TCP Wrappers的应用将在后续讲解) ssl_enable=YES allow_anon_ssl=NO 安装前检查环境
检查版本安装vsftpd:#rpm -qa |grep vsftpd
检查安装版本信息:#rpm -qv vsftpd
检查配置防火墙:开放TCP21端口
最好关闭selinux
启动vsftpd前的配置
以下俩个操作时在启动前进行配置,如果没有配置则无法正常登陆vsftpd服务器,如果使用Centos6.x之前的版本则只需要关闭SELinux
#setsebool ftpd_disable_trans 1 #解除SELinux保护
#setsebool -P ftp_home_dir=1 #解除无法列出服务器目录的情况
如果没有#setsebool -P ftp_home_dir=1则,当连接FTP时出现
500 OOPS: change directory:/home/ftp
500 OOPS: 500 OOPS:Child died
Vsftpd特殊属性配置参数(均在vsftpd.conf完成)
pasv_enable=no#将FTP设为被动模式
local_max_rate=300000#限制上传下载为300K,1KB=1000Btyes
配置特定用户的带宽
#vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/limit#默认没有,必须加
#mkdir /etc/vsftpd/limit#创建管理用户带宽的配置文件夹
#vi /etc/vsftpd/limit/ken#创建针对ken用户上传带宽的限制的配置文件
local_max_size=300000#配置ken用户带宽为300KB
限制客户端可连接的IP地址利用tcp_wrappers host.deny host.allow
#vi /etc/vsftpd/vsftpd.conf
tcp_wrappers=YES#检查是否为YES
#vi /etc/hosts.deny#编辑限制配置文件
vsftpd:all:Deny#限制所有网段都不可连接
#vi /etc/hosts.allow
vsftpd:192.168.233.*:Allow#开发192.168.233网段可以连接
限制黑名单用户
#vi /etc/vsftpd/vsftpd.conf
userlist_enable=YES#默认为YES,如果为NO则黑名单不生效
#vi /etc/vsftpd/user_list #编辑黑名单
禁止用户切换目录
#vi /etc/vsftpd/vsftpd.conf
chroot_local_user=YES #默认不启用,去掉#表示启用
建立基于虚拟用户的vsftpd服务安装与配置
安装支持虚拟用户插件
#yum -y install db4-utils
建立用户名密码列表文件
#vi /etc/vsftpd/vusers.list
mike#用户
123#对应密码
yilang#用户
123#对应密码
使用db_load工具将列表文件转化为DB数据库文件
#cd /etc/vsftpd/
#db_load -T -t hash -f vusers.list vusers.db
建立FTP访问的根目录虚拟用户对应的系统账号
#useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot/ #上传下载目录存放地
ls -lh /boot/ > /var/ftproot/vutest.file#建立测试文件
建立PAM认证文件
#vi /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
修改vsftpd.conf,添加虚拟用户支持
#vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES #使用虚拟用户需要启动本地
write_enable=YES #启用任何形式的写入权限
anon_umask=022 #文件上传的权限
guest_enable=YES#启用映射
guest_username=virtual#将映射用户指导virtual
pam_service_name=vsftpd.vu#修改使用PAM文件位置
创建完虚拟用户之后所有虚拟用户登陆权限都相同,需要为不同的虚拟用户建立独立的配置文件(权限)
为yilang的虚拟用户建立独立的配置文件
#vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
#mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
#vi yilang
local_root=/ftpdatavg1fs/ftproot/yilang #使用户不能离开主目录(禁锢)
anon_upload_enable=YES #可上传
anon_mkdir_write_enable=YES #可创建文件夹
anon_other_write_enable=YES #是否允许匿名用户有其他的写入权限。比如文件覆盖,删除,更改
后期操作维护
添加虚拟账户
例如:添加zhangsan虚拟账户,分配只能上传权限;并且禁止离开主目录
#vi /etc/vsftpd/vusers.list
zhangsan #账户名
123456 #密码
#db_load -T -t hash -f vusers.list vusers.db#刷新DB数据库
分配zhangsan的登录权限
1.配置主配置文件
#vi vsftpd.conf
chroot_list_enable=YES
2.建立zhangsan的独立根目录文件
#mkdir /ftpdatavg1fs/ftproot/zhangsan #
#chown -R virtual.virtual /ftpdatavg1fs/ftproot/zhangsan #注意一定要给权限
3.配置虚拟指定用户根目录,这里以zhangsan为例
#vi /etc/vsftpd/vuser_dir/zhangsan #配置权限文件
local_root=/ftpdatavg1fs/ftproot/zhangsan #指定根目录
anon_upload_enable=YES #可上传
#service vsftpd reload
修改虚拟用户密码
例如:修改zhangsan密码为163.com
#vi /etc/vsftpd/vusers.list#在配置文件修改zhangsan下一行的字符
zhangsan
123456 修改为163.com保存退出
#db_load -T -t hash -f vusers.list vusers.db#刷新DB数据库
#service vsftpd reload
Vsftp的使用SSL/TLS加密传输(安装与配置)
ftp默认的传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题
检查vsftp是否支持SSL:从2.0.0版本开始,vsftpd支持命令连接和数据连接的加密传输。vsftpd服务器版本查看:rpm -qa vsftpd 输出:vsftpd-2.2.2-11.el6.i686
检查vsftp是否支持SSL:ldd /usr/sbin/vsftpd | grep libssl,如果输出类似与libssl.so.10 => /usr/lib/libssl.so.10 (0x00dfb000),那么支持。如果不支持,那么重新编译vsftp,然后再重新安装
用openssl生成vsftpd的证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/certs/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem
修改vsftpd.conf,设置强制启用ssl
vsftpd配置文件支持SSL设置
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
#implicit_ssl=no // 是否启用隐式ssl功能,不建议开启
#listen_port=990 // 隐式ftp端口设置,如果不设置,默认还是21,但是当客户端以隐式ssl连接时,默认会使用990端口,导致连接失败!!
#debug_ssl=YES // 输出ssl相关的日志信息