文章目录
vsftpd特点
- vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外,vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;
- 任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;
- 所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd
指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login
的要求等等动作; - 此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。
CentOS卸载vsftpd的方法
查找vsftpd服务
[root@gsl371 ~]# rpm -qa vsftpd
vsftpd-3.0.2-25.el7.x86_64
删除查找到的vsftpd服务
如果需要删除vsftpd,通过以下方法删除。
注:在卸载vsftpd之前,先停止vsftpd
[root@gsl371 ~]# systemctl stop vsftpd.service
[root@gsl371 ~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Mon 2019-06-17 15:31:38 CST; 32s ago
Main PID: 800 (code=killed, signal=TERM)
Jun 17 15:01:00 gsl371 systemd[1]: Starting Vsftpd ftp daemon...
Jun 17 15:01:01 gsl371 systemd[1]: Started Vsftpd ftp daemon.
Jun 17 15:31:38 gsl371 systemd[1]: Stopping Vsftpd ftp daemon...
Jun 17 15:31:38 gsl371 systemd[1]: Stopped Vsftpd ftp daemon.
[root@gsl371 ~]#
卸载vsftpd:
[root@gsl371 ~]# rpm -e vsftpd-3.0.2-25.el7.x86_64
返回结果显示:
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave #删除时将备份vsftp的用户列表文件
安装vsftpd组件
[root@gsl371 ~]# yum -y install vsftpd
启动ftp
[root@localhost home]# systemctl start vsftpd.service
放开21端口(如果关闭了防火墙,可跳过此步骤)
[root@localhost /]# firewall-cmd --zone=public --add-port=21/tcp --permanent
[root@localhost /]# firewall-cmd --reload
设置selinux(如果关闭了selinux,可跳过此步骤)
查看ftp的状态
[root@localhost /]# getsebool -a|grep ftp
显示结果:
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
将以下两项状态设置为on:
[root@localhost vsftpd]# setsebool -P allow_ftpd_full_access on
[root@localhost vsftpd]# setsebool -P tftp_home_dir on
vsftpd服务的配置
关闭匿名用户
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
在vsftpd.conf配置文件中修改以下三项:
anonymous_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
然后重启ftp服务:
[root@localhost vsftpd]# systemctl restart vsftpd.service
通过配置重启之后,匿名用户不可以登录了。
建立ftp虚拟宿主账户
新建一个不能登录系统的系统用户. 只用来登录ftp服务 ,将来也可作为虚拟ftp用户的宿主用户,这里如果没设置用户目录。默认是在/home下:
[root@localhost vsftpd]# useradd ftpuser -s /sbin/nologin
为ftpuser用户设置密码:
[root@localhost /]# passwd ftpuser
至此,ftp功能已经可以正常使用,可通过客户端或命令行方式登录ftp服务器。
C:\Users\gsl>ftp x.x.x.x
连接到 x.x.x.x。
220 (vsFTPd 3.0.2)
用户(47.93.242.62:(none)): ftpuser
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
虚拟用户配置
虚拟用户可以更好的控制用户的访问系统的权限。
建立虚拟FTP用户的帐号数据库文件
1、编辑虚拟数据库文件 vi /etc/vsftpd/ftp.list
user1
123
user2
123
user3
123
注:该虚拟用户数据库文件的奇数行为用户名,偶数行为密码。
2、将虚拟用户数据库文件转换为认证模块识别的数据文件
db_load -T -t hash -f /etc/vsftpd/ftp.list /etc/vsftpd/ftp.db
注:如果上边转换数据文件命令报错,有可能是系统没有安装db_load这个命令,或是没有安装db4这个包,根据不同系统包名不同,大概如下。
# yum -y install libdb-utils #CentOS7是libdb-utils
# yum -y install db4 db4-utils #CentOS6是db4-utils
3、给虚拟用户数据库文件和认证模块识别的数据文件指定权限
chmod 600 /etc/vsftpd/ftp.*
创建一个虚拟用户映射的真实系统用户(宿主用户)
如果上一步做过,可跳过此步。
1、创建一个目录作为上传数据目录,也可以在创建用户时指定目录。
mkdir /data/
注:我们也用这个目录来作为系统用户的家目录,这样更安全。
2、创建用户并指定家目录
useradd -d /data/ -s /sbin/nologin ftpuser
3、查看是否创建系统用户并指定家目录为/data/
cat /etc/passwd
4、给这个用户家目录设置权限
chmod 755 /data/
5、创建每个虚拟用户的家目录
mkdir /data/file_1
注:这里创建的三个目录为三个虚拟用户的家目录,user1虚拟用户家目录为/data/file_1,
user2虚拟用户家目录为/data/file_2,user3虚拟用户家目录为/data/file_1/file_3。
6、递归更改用户家目录属性
chown -R ftpuser:ftpuser /data/
注:创建一个虚拟用户映射的真实系统用户,指定它的家目录为其他目录,默认为/home目录,虚拟用户可能没有权限访问,指定让这个用户不能登录系统,并赋予指定家目录权限为755即可。
配置pam认证模块
1、备份pam认证模块配置文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
2、配置pam认证模块文件 vi /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so db=/etc/vsftpd/ftp
account required pam_userdb.so db=/etc/vsftpd/ftp
注:清除这里所有文件,只需要编辑这两行文件即可。切记这里的db=/etc/vsftpd/ftp是指定的数据库转换文件路径,也就是我们前边创建的ftp.db这个文件的路径,可能有些童鞋会问,不对啊,你这里怎么没有后缀.db呢?问的好!这就是pam认证的方式,只需要路径而不需要后缀名,如果说你偏加后缀也没关系,那就只有报错喽!
3、认证方式(以下只需要看看即可,跟实验操作没关系)
通过修改vsftpd的PAM配置文件 /etc/pam.d/vsftpd来决定vsftpd使用何种认证方式,可以是本地系统的真实用户认证(模块pam_unix),也可以是独立的用户认证数据库(模块pam_userdb),也可以是网络上的LDAP数据库(模块pam_ldap)等。所有这些模块都存放在/lib/security/目录(对AMD64则是/lib64/security/)
配置vsftpd配置文件
1、备份vsftpd配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
2、编辑vsftpd配置文件 vi /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
#
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
## my add here
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/dir
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=10030
pasv_max_port=10035
注:以上截图的文件路径没有的别急,我们在下边创建了,只不过是先在这配置文件写上而已,列如:user_config_dir=/etc/vsftpd/dir和chroot_list_file=/etc/vsftpd/chroot_list
这俩个文件在下边会创建,所以不用担心,或者搞不懂。其余别的自行百度查询意思即可。
创建几个不同权限的虚拟用户
1、创建根本目录列表文件
vi /etc/vsftpd/chroot_list
user1
user2
user3
注:有多少个虚拟用户,分别按照以上格式写在根本目录列表文件里。这个文件对应的是
/etc/vsftpd/vsftpd.conf文件的这行chroot_list_file=/etc/vsftpd/chroot_list
2、创建虚拟用户配置文件目录
mkdir /etc/vsftpd/dir在这里插入代码片
3、创建虚拟用户配置文件(多少用户创建多少个)
1)创建user1虚拟用户配置文件 vi /etc/vsftpd/dir/user1
local_root=/data/file_1/
#指定虚拟用户的具体主路径
write_enable=YES
#设定允许写操作
anon_umask=022
anon_world_readable_only=NO
#local_umask=022
#设定上传文件权限掩码
anon_upload_enable=YES
#设定不允许匿名用户上传
anon_mkdir_write_enable=NO
#设定不允许匿名用户建立目录
anon_other_write_enable=YES
idle_session_timeout=600
#设定空闲连接超时时间
data_connection_timeout=120
#设定单次连续传输最大时间
max_clients=10
#设定并发客户端访问个数
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
local_max_rate=50000
#设定该用户的最大传输速率,单位b/s
注:每个虚拟用户都从这里指定访问权限,当前user1虚拟用户拥有完全权限。
2)创建user2虚拟用户配置文件 vi /etc/vsftpd/dir/user2
local_root=/data/file_2/
#指定虚拟用户的具体主路径
write_enable=YES
#设定允许写操作
anon_umask=022
anon_world_readable_only=NO
#local_umask=022
#设定上传文件权限掩码
anon_upload_enable=YES
#设定不允许匿名用户上传
anon_mkdir_write_enable=YES
#设定不允许匿名用户建立目录
#anon_other_write_enable=YES
idle_session_timeout=600
#设定空闲连接超时时间
data_connection_timeout=120
#设定单次连续传输最大时间
max_clients=10
#设定并发客户端访问个数
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
local_max_rate=50000
#设定该用户的最大传输速率,单位b/s
注:当前user2用户只用上传下载的权限。
3)创建user3虚拟用户配置文件 vi /etc/vsftpd/dir/user3
local_root=/data/file_1/file_3
#指定虚拟用户的具体主路径
write_enable=YES
#设定允许写操作
anon_umask=022
anon_world_readable_only=NO
#local_umask=022
#设定上传文件权限掩码
anon_upload_enable=YES
#设定不允许匿名用户上传
#anon_mkdir_write_enable=NO
#设定不允许匿名用户建立目录
#anon_other_write_enable=YES
idle_session_timeout=600
#设定空闲连接超时时间
data_connection_timeout=120
#设定单次连续传输最大时间
max_clients=10
#设定并发客户端访问个数
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
local_max_rate=50000
#设定该用户的最大传输速率,单位b/s
注:当前user3用户只有上传和下载和创建目录的权限,无其他权限。
4、重启vsftpd服务 systemctl restart vsftpd
5、查看监听端口 netstat -antupl | grep vsftpd
测试虚拟用户是否生效
1、虚拟用户测试方式:
方式一:本地服务器使用ftp命令测试 ftp 127.0.0.1
方式二:使用真机机器访问服务器 ftp://ftp服务器地址
2、虚拟用户权限测试方式
方式一:使用user1,完全权限登陆,实现所有操作。
注:此操作无法演示,但实验已经成功。
方式二:使用user2,只有上传下载功能,无其他任何权限。
方式三:使用user3,只有上传下载和新建目录的权限,无其他权限。
注:此操作无法演示,但实验已经成功。
八、被动模式开启方式:
1、首先需要在vsftpd配置文件添加如下数据
pasv_enable=YES
pasv_min_port=10030
pasv_max_port=10035
2、设置防火墙iptables
1)然后开启对应的端口即可,如下
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 10030:10035 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -p tcp –dport 21 -j ACCEPT
2)在然后对于防火墙需要按顺序开启如下模块
/usr/sbin/modprobe ip_conntrack_ftp
/usr/sbin/modprobe ip_nat_ftp
总结:以上完全实现了vsftpd的虚拟用户搭建,但是切记尽量使用,vsftpd的被动模式,因为主动模式会被防火墙自动拦截。除非完全在内网使用并且每台机器都关闭了防火墙。