linux centos7.2配置vsftpd之详细步骤

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的被动模式,因为主动模式会被防火墙自动拦截。除非完全在内网使用并且每台机器都关闭了防火墙。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值