vsftpd 服务
文件传输协议:File Transfer Protocol是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。
服务器端:vsftpd
客户端:lftp
安装:yum -y install vsftpd lftp
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本: /usr/lib/systemd/system/vsftpd.service
配置文件:/etc/vsftpd/vsftpd.conf
匿名用户共享文件位置:/var/ftp
系统用户共享文件位置:用户家目录
虚拟用户共享文件位置:为其映射的系统用户的家目录
一、vsftpd服务配置选项
- listen_port=21:命令端口监听
- connect_from_port_20=YES:主动模式端口为20
- ftp_data_port=20:指定主动模式的端口
- pasv_min_port=6000 | pasv_max_port=6010:被动模式端口范围,0为随机分配
- use_localtime=YES:使用当地时间
- max_clients=0:最大并发连接数
- max_per_ip=0:每个IP同时发起的最大连接数
- nopriv_user=nobody:vsftpd服务指定用户身份运行
- anon_max_rate=0:匿名用户的最大传输速率
- local_max_rate=0:本地用户的最大传输速率
- connect_timeout=60:主动模式数据连接超时时长
- accept_timeout=60:被动模式数据连接超时时长
- data_connection_timeout=300:数据连接无数据输超时时长
- idle_session_timeout=60:无命令操作超时时长
- ascii_upload_enable=YES:优先以文本方式上传
- ascii_download_enable=YES: 优先以文本方式下载
匿名用户相关:
- anonymous_enable=YES:支持匿名用户
- no_anon_password=YES:(默认NO) 匿名用户略过口令检查
- anon_world_readable_only:(默认YES)只能下载全部读的文件
- anon_upload_enable=YES:允许匿名上传,注意:文件系统权限
- anon_mkdir_write_enable=YES:允许匿名用户创建文件夹
- anon_umask=077:指定匿名用户上传文件的umask
- anon_other_write_enable=YES:匿名用户可删除和修改上传的文件
- chown_uploads=YES:(默认NO) 修改上传文件的默认的所有者和权限
- chown_username=user1:将匿名上传的文件的属主修改为user1
- chown_upload_mode=0644:将匿名上传的文件的权限修改为644
系统用户相关:
- guest_enable=YES:所有系统用户都映射成guest用户
- guest_username=ftp:配合上面选项才生效,指定guest用户
- local_enable=YES:是否允许linux用户登录
- write_enable-YES:允许linux用户上传文件
- local_umask=022:指定系统用户上传文件的默认权限
- local_root=/ftproot:非匿名用户登录所在目录
- chroot_local_user=YES:(默认NO,不禁锢)禁锢系统用户在家目录中
- chroot_list_enable=YES
-
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不禁锢
当chroot_local_user=NO时,则chroot_list中用户禁锢
日志相关:
xferlog_enable=YES:(默认)启用记录上传下载日志
xferlog_std_format=YES:(默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog:(默认)可自动生成
dual_log_enable=YES:使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log:(默认)可自动生成
登录提示信息相关:
ftpd_banner=Welcome to blah FTP service.
banner_file=/etc/vsftpd/ftpbanner.txt:显示指定文件中的提示信息,优先此项生效
dirmessage_enable=YES:(默认) 目录访问提示信息
message_file=.message:(默认)信息存放在指定目录下.message
访问控制相关:
pam_service_name=vsftpd:指定pam模块配置文件
使用pam模块完成用户认证
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers:默认此文件中用户拒绝登录
userlist_enable=YES:默认有此设置
userlist_deny=YES:(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list:用户认证黑名单,此为默认值
实验:基于SSL 实现 FTPS
[root@centos7 ~]#ldd `which vsftpd`| grep libssl.so #查看 是否支持SSL libssl.so.10 => /lib64/libssl.so.10 (0x00007feea94e2000)
1、创建自签名证书
[root@centos7 ~]#cd /etc/pki/tls/certs/ [root@centos7 certs]#make vsftpd.pem Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:magedu Organizational Unit Name (eg, section) []:30 Common Name (eg, your name or your server's hostname) []:vsftpd.ftp.com
2、配置vsftpd服务 并 支持SSL
[root@centos7 certs]#vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES ssl_enable=YES # 启用ssl allow_anon_ssl=NO # 匿名不支持SSL force_local_logins_ssl=YES # 本地用户登录加密 force_local_data_ssl=YES # 本地数据传输加密 rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem # 证书文件
3、用filezilla等客户端工具测试
二、虚拟用户的 实现
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
实验:基于文件验证的vsftp虚拟用户
1、创建用户数据库文件
[root@centos7 vsftpd]#vim /etc/vsftpd/vuser.txt
vuser1
user1
vuser2
user2
vuser3
user3
2、由于txt文件linux无法识别,所以要转化成 db 型文件 ,为了安全起见,设置权限
[root@centos7 vsftpd]#db_load -T -t hash -f vuser.txt vuser.db
[root@centos7 vsftpd]#chmod 600 vuser.db
[root@centos7 vsftpd]#rm -rf vuser.txt
3、创建系统用户和FTP 目录
[root@centos7 vsftpd]#useradd -r -d /date/ftp -s /sbin/nologin vuser [root@centos7 ~]#mkdir -pv /date/ftp/pub/ [root@centos7 ~]#chmod -w /date/ftp/ [root@centos7 ~]#setfacl -m u:vuser:rwx /date/ftp/pub/
4、创建pam配置 文件
[root@centos7 ~]#vim /etc/pam.d/vsftpd.db auth required pam_userdb.so db=/etc/vsftpd/vuser #调用vuser这个文件,这个文件里是我们创建的那三个虚拟用户的信息 account required pam_userdb.so db=/etc/vsftpd/vuser
5、修改配置 文件
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf # Make sure, that one of the listen options is commented !! listen_ipv6=YES guest_enable=YES #将系统用户影射成 vuser guest_username=vuser pam_service_name=vsftpd.db #将vsftp模块更改为我们创建的vsftpd.db userlist_enable=YES
6、给虚拟用户建立独立的配置文件
[root@centos7 ~]#vim /etc/pam.d/vsftpd.db
![](https://images2018.cnblogs.com/blog/1366408/201806/1366408-20180628172945990-1359870640.jpg)
首先我们根据刚开始创建的那3个用户,以第一个用户user1 来创建一个user1用户的配置文件,并允许user1可读写,其他用户只读
[root@centos7 vusers.d]#vim ftpuser1 anon_upload_enable=YES #允许匿名上传 anon_mkdir_write_enable=YES #允许匿名创建文件夹 anon_other_write_enable=YES #允许匿名删除文件夹
[root@centos7 ~]#systemctl restart vsftpd
测试
切换到另一台主机 用ftp 连接 登录成功
三、基于Mysql 的数据库验证