下载vsftpd;
开启防火墙;
开启selinux:
[root@localhost ~]# setenforce 1
在防火墙默认域添加ftp服务;
取消runtime配置启用permanent配置:
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# getsebool -a | grep ftp
[root@localhost ~]# setsebool -P ftpd_full_access on
vsftpd默认配置文件:/etc/vsftpd/vsftpd.conf
vsftpd默认发布目录:/var/ftp/pub/
将 /dev/cdrom挂载到发布目录上,则最简单的ftp服务就做好了,时使用真机即可访问到。
配置ftp可匿名登录
修改配置文件中的内容:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
最后再添加发布目录下的文件的other部分的权限。就可以通过浏览器使用匿名用户anonymous或ftp访问或者在另外一台虚拟机访问,通过get和put下载和上传。
配置系统用户登录
创建两个用户作为登录ftp的用户,user
1和user2,并且为他们设置密码,可以使用passwd命令,也可以使用以下方法设置命令。
[root@localhost pub]# echo user2 | passwd --stdin user2
创建好用户了以后,在设置ftp通过使用系统用户登录之前先把配置文件里匿名用户登录的相关配置给no掉。例如:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
配置配置文件里的
local_enable=YES
write_enable=YES
这两条配置完了以后记得重启服务。重启服务以后就可以使用用户和密码进行登录ftp了,登录进去了以后的目录默认是该用户的家目录。
可以到自己想到的目录下下载文件,要保正要有对这个文件的读写权限。
通过系统用户登录ftp这个方法,登录以后是可以浏览其他目录的,这样对ftp服务器是极其不安全的。
限制用户登录课访问的目录
修改配置文件:
chroot_local_user=YES
local_root=/var/ftp/
修改保存退出重启后,所有的用户访问ftp时就只能访问到/var/ftp/目录下;
但是有时候我们还是希望某个用户它能够浏览多个目录,希望他有较大的权限,可以乱窜,这时我们就激活一个列表,使的这个列表里面的用户拥有这样的权限:
依旧还是修改配置文件:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
配置完成以后,配置指定的这个文件里面的用户就可以拥有这样的权限;
登录ftp:
ftp IP
ftp user1@ip
lftp IP
ftp://user1:user1@ip
除了网页登录ftp以外还可以使用工具登录ftp,例如flashftp,下载即可使用。
ftp
主动被动模式
ftp服务默是主动模式的,因为配置文件里面有:
connect_from_port_20=YES
那我们要将它该成被动模式的话,只要在配置文件里面添加一条就可以:
pasv_enable=YES
在一般情况下不需要改,除非防火墙有特殊要求。
限制用户
上面说的只要是系统用户就可以登录,那系统用户也太多了,导致系统的安全性不高啊。所以,我们就要对系统用户进行限制。那就有两种限制方法。
第一种:
通过 /etc/pam.d/vsftpd文件来管理,在配置文件中有这么一条代表它的皮皮之文件是受pam.d限制的:
pam_service_name=vsftpd
而且这一条下面还有那么一条:
userlist_enable=YES
#系统默认它是YES
那这条是什么意思,它有什么作用呢?这就得关乎到另一个文件:/etc/vsftpd/user_list ,这个文件是一个用户列表文件。在这个文件里面有详细的说明。说明:
当vsftpd的配置文件里面的:
userlist_enable=YES
则/etc/vsftpd/user_list 这个文件里面的用户是不可以用来登录ftp的,如果不想哪个用户用户来登录ftp就将这个用户写在这个文件就行,但是当系统用户很多的时候,如此处理就会比较麻烦。这时,我们可以在YES的下面添加一条:
userlist_enable=NO
则这个文件的作用就变了,刚是这个文件里面的用户不能用来登录ftp,现在是只有这个文件里面的用户可以用来登录ftp。
第二种:
第二种是用来限制服务端的。有这么两个文件
/etc/hosts.deny(拒绝)
/etc/hosts.allow(允许)
如果要让服务的配置文件支持这两个文件的限制,那么服务的配置文件里面就得有那么一条:
tcp_wrappers=YES
支持后就可以在这两个文件里面配置限制的内容了。
内容格式为:
#限制主机
vsftpd:192.168.43.23/255.255.255.0
#限制网段
vsftpd:192.168.43.0/255.255.255.0
#限制网段,但是又想放行其中的一个ip
vsftpd:192.168.43.0/255.255.255.0 excpt 192.168.43.23
或者也可以将要通行的ip写在allow的文件里面。
当deny文件和allow文件的内容发生冲突时,就像192.168.43.23这个ip同时出现在这两个文件中,那么这时系统就会听allow这个文件的。
除了vsftpd这服务还有一些服务也是支持这个两个文件的,那么要怎样才知道某个服务是否支持这两个文件呢?
which vsftpd
ldd /usr/sbin/vsftpd | grep libwrap
如图有东西则为支持:
命令还可以这样写:
ldd `which vsftpd` | grep libwrap
#不是单引号
如果没有东西则不支持:
虚拟账户
我们希望不同的用户访问ftp访问到的内容是不同,例如销售部用户访问的是销售的内容,人力部用户访问的是人力部的内容。而且不使用系统用户进行访问,这时我们就用到了虚拟用户,所有的虚拟用户都依赖一个真实用户。所以首先创建一个系统用户xuniftp,这个用户以后是不想能够使用它进行登录ftp的,就可以执行创建用户命令:
[root@localhost ~]# useradd xuniftp -s /bin/false
##这个用户啥干不了,
后面就是创建虚拟用户了,那就需要写一个虚拟用户列表,虚拟用户的列表的路径//etc/vsftpd/,文件名:virtualuser.list
[root@localhost vsftpd]# cat virtualuser.list
uuser1#用户
puser1#密码
uuser2
puser2
uuser3
puser3
这是一个明文的用户密码文件,系统要使用它旧的将它调成一个数据库,并且用hash加密它。
命令:
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/virtualuser.list /etc/vsftpd/virtualuser.db
数据库的后缀名是.db。调号以后可以用file民法零来查看它的文件属性。创建好真实用户和虚拟用户以后,就要弄认证了,/etc/pam.d/vsftpd 这个文件是用来管理认证的,就是你想访问这个服务有哪些认证方式。如果想认证虚拟用户访问的话,在文件里添加以下内容:
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualuser
然后把其他的都注释掉。
如果要这个服务支持这个认证文件,服务的主配置文件要有这个:
pam_service_name=vsftpd
最后就是给不同的用户创建不同的目录
mkdir -p /ftpdate/xuni{1,2}
创建好了以后就是将用户和目录绑定起来
修改配置文件:
anonymous_enable=NO
#禁止匿名用户登录
chroot_local_user=YES
#设置用户访问时不可以乱窜
guest_enable=yes
#激活虚拟用户的功能
guest_username=xuniftp
#声明虚拟用户依赖ftpxuni这个真实用户
user_config_dir=/etc/vsftpd/virtualuserconf
#指定虚拟用户的配置文件的目录
virtual_use_local_privs=yes
#指明虚拟用户和这个对应真实的用户的权限一样
保存重启vsftpd后,在/etc/vsftpd/virtualuserconf/目录下给不同的虚拟用户创建他们自己的配置文件:
[root@localhost virtualuserconf]# vim xuniuser1
[root@localhost virtualuserconf]# cat xuniuser1
local_root=/ftpdate/xuni1
[root@localhost virtualuserconf]# vim xuniuser2
[root@localhost virtualuserconf]# cat xuniuser2
local_root=/ftpdate/xuni2