FTP服务简介
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP(File Transfer Protocol: 文件传输协议)作用: Internet 上用来传送文件的协议
常见FTP服务器:
- windows:Serv-U FTP Server,filezilla_server
- Linux:ProFTPD:(Professional FTP daemon)一个Unix平台上或是类Unix平台上(如Linux,
FreeBSD等)的FTP服务器程序。
主角:vsftpd
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
特点: 它是一个安全、高速、稳定的FTP服务器;
模式: C/S 模式
默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数
FTP协议有两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
用户列表文件ftpusers和user_list
- Ftpusers文件:此文件中的用户将禁止登陆ftp服务器,不管该用户是否在user_list文件中出现,默认已包含root、bin等系统运行用户。
- User_list文件:此文件中包含的用户可能被禁止登陆,也可能被允许登陆,取决于配置文件中vsftpd.conf的设置,当存在userlist_enable=yes,user_list列表文件就生效,若userlist_deny=yes,则仅禁止此列表中的用户登录,若指定userlist_deny=no,则仅允许列表中的用户登录
Vsftp主配置文件路径:/etc/vsftpd/vsftpd.conf
Vsftp常用参数和作用:
部署匿名访问ftp
注意事项:
Linux系统ftp匿名用户对应的系统用户为ftp,windows对应的是anonymous,其宿主目录为/var/ftp/也就是匿名访问vsftpd服务时所在的ftp根目录。基于安全考虑,ftp根目录的权限不允许匿名用户或其他用户具有写入权限(否则会500错误),默认开启了user_list_enable=yes列表这个列表就是黑名单,在user_list语句下加入user_deny=no那么列表就是白名单
1.使用yum方式安装vsftp程序,关闭防火墙和selinux
yum install -y vsftpd //yum方式安装vsftpd
systemctl stop firewalld //关闭防火墙
setenforce 0 //关闭selinux
2.过滤配置文件空行和注释行
cat /etc/vsftpd/vsftpd.conf | grep -v "^#" > /etc/vsftpd/vsftpd.conf
- 编辑配置文件,开启匿名访问,设置匿名访问权限
注意:如果复制内容参数后不要留空格,否则启动服务报错
vim /etc/vsftpd/vsftpd.conf //编辑vsftp配置文件
-------------输入以下内容-----------------
anonymous_enable=YES //开启匿名访问
anon_upload_enable=yes //开启匿名访问上传权限
anon_umask=022 //设置umask值,文件644,目录755
anon_root=/ var/ftp/pub //设置匿名访问的根目录
anon_mkdir_write_enable=yes //开启匿名创建目录的权限
anon_other_write_enable=yes //开启匿名其他权限(删除,重命名)
--------------------------以下保持默认-----------------------
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
4.保存配置文件的修改并退出,重启vsftpd服务
又或者直接黏贴这个配置文件
vsftpd.conf实现匿名用户上传下载删除配置文件
允许匿名用户和本地用户登陆。
anonymous_enable=YES
local_enable=YES
本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自 己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载
write_enable=YES
若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO
no_anon_password=YES
定义匿名登入的使用者名称。默认值为ftp
ftp_username=ftp
使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限
anon_root=/var/ftp
如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO
anon_upload_enable=YES
如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES
anon_world_readable_only=YES
如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO
anon_mkdir_write_enable=YES
如果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)默认值为NO
anon_other_write_enable=YES
设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO
chown_uploads=NO
设置匿名用户上传文件(非目录)的属主名。建议不要设置为root
chown_username=username
设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700
anon_umask=077
standalone (must config)
设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制
listen=YES
设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_clients=0
设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效
max_per_ip=0
设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效
listen_address=IP地址
:wq //保存并退出
systemctl restart vsftpd //重启vsftpd服务
这一步及其容易出错,我们切记千万别动指定的ftp目录/var/ftp权限
一动就玩完,我们只需要在ftp的目录下再次创建一个目录并且授予其读取写入的权限即可
5.使用windows访问ftp验证
注意:如果windows访问ftp提示以下错误:
解决办法:
基于系统用户的ftp
注意事项:
7.3以上系统用户不能设置属性为/sbin/nologin,否则用户无法登陆
7.3以下可以设置系统属性为/sbin/nologin
ftp根目录的权限不允许匿名用户或其他用户具有写入权限(否则会500错误),其他用户全局配置加入allow_writeable_chroot=YES、更改目录的属主、更改755权限即可解决,匿名无法解决
基于系统用户和基于虚拟用户不能同时配置,也就是说pam_service_name参数只能存在一个,要么使用本地系统用户验证pam文件,要么使用虚拟用户pam验证文件否则会出现无法登陆的情况
默认userlist_enable=yes等于userlist列表是黑名单,如果要设置为白名单再下面添加一条userlist_deny=no,然后在userlist文件中添加允许访问的用户,windows匿名用户为anonymous,linux匿名用户为ftp
1.创建用户wangwu,设置不能登录系统,设置用户的家目录
useradd -s /sbin/nologin wangwu -d /ftp/wangwu/ //创建wangwu用户,设置家目录
passwd wangwu //为wangwu设置密码
tail /etc/passwd //查看用户信息
2.创建用户的ftp根目录,设置目录的属主,使其具有写入权限
mkdir -p /ftp/wangwu //创建wangwu的根目录
chown wangwu /ftp/wangwu/ //修改目录的属主为wangwu
3.设置用户的登录密码
passwd wangwu //设置wangwu用户密码
4.编辑配置文件,开启本地用户访问
vim /etc/vsftpd/vsftpd.conf
-------------------------------添加以下内容------------------------------
local_enable=YES //开启本地用户访问
chroot_local_user=Yes //设置用户禁锢在家目录
allow_writeable_chroot=YES //根目录有写入无法登陆,加入此项
local_umask=022 //设置上传文件和创建目录权限,文件644目录755
local_root=/ftp/ //设置本地用户ftp根目录
5.保存配置文件的修改并退出,重启vsftpd服务
:wq //保存并退出
systemctl restart vsftpd //重启vsftpd服务
6.使用windows访问ftp,使用用户账号进行验证
虚拟用户的FTP
注意事项:
基于虚拟用户如果全局配置中设置了匿名的其他权限,在虚拟用户的权限文件什么权限也没有,最终用户将有全局配置的匿名权限,要限制虚拟用户权限,取消全局配置里面的anon的权限,然后在用户权限文件中添加相应的权限
用户验证的列表文件权限一定要设置为600,否则无法验证成功
虚拟用户有anon_upload_enable=yes上传权限不加umask值的话上传后权限为600,只能上传不能下载,需要在主配置文件或者单独用户权限文件中添加anon_umask=022值;
部署基于虚拟用户的ftp
1.在vsftpd目录创建一个虚拟用户文件,写入用户名和密码,基数为为用户名,偶数为密码
vim vuser.list
2.使用db_load工具将明文密码文件转换为hash加密文件
db_load -T -t hash -f vuser.list vuser.db //将虚拟用户文件加密
chmod 600 vuser.db //更改权限只有root可以查看写入
3.创建一个虚拟用户映射到的一个本地用户,并设置虚拟用户的家目录,权
限等
useradd -s /sbin/nologin -d /var/ftproot xuni //创建映射用户,设置家目录
chmod -R 755 /var/ftproot/ //修改家目录权限为755
4.建立用于支持虚拟用户的pm文件,新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数库文件的路径,但不用写数据库文件的后缀
vim /etc/pam.d/vsftpd.vu
-----------------写入以下内容------------------------
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
5.修改配置文件添加pam认证文件、开启虚拟用户访问、设置映射的虚拟用户、
vim /etc/vsftpd/vsftpd.conf
--------------------添加以下内容----------------------
guest_enable=yes //启用虚拟用户的访问
guest_username=xuni //设置虚拟用户映射的本地用户
pam_service_name=vsftpd.vu //设置用于认证的pam文件
allow_writeable_chroot=YES //根目录有写入无法登陆,加入此项
6.为不同虚拟用户设置不同的权限,例如qqq有上传、创建、修改、查看、删除的权限,而只允许www有查看的权限
mkdir /etc/vsftpd/vusers_dir //创建目录存放虚拟用户的权限文件
cd /etc/vsftpd/vusers_dir/ //切换到权限文件目录
touch www //创建www用户的权限文件不需要任何内容
vim qqq //新建一个qqq用户的权限文件
--------------------添加以下内容----------------------------
anon_upload_enable=yes //允许用户上传文件
anon_mkdir_write_enable=yes //允许用户创建目录
anon_other_write_enable=yes //允许用户有其他权限(重命名、删除等)
7.修改配置文件,添加虚拟用户的权限文件存放路径
vim /etc/vsftpd/vsftpd.conf //编辑主配置文件
--------------------添加以下内容-----------------------------
user_config_dir=/etc/vsftpd/vusers_dir //指定权限文件的存放路径
8.重启服务,登录ftp验证
systemctl restart vsftpd //重启vsftpd服务
FTP访问控制
1.主机访问控制:通过tcp_wrappers=YES实现,设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。
比如:若要仅允许192.168.1.1—192.168.1.254的用户可以连接FTP服务器,则在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.1. :allow
vsftpd:all :deny
2.对于用户的访问控制可以通过/etc目录下的vsftpd/user_list和ftpusers文件来实现。