vsftpd服务的搭建

1.vsftpd介绍
vsftpd:是非常安全的ftp守护进程(Very secure ftp Daemon)。
进程:正在进行(运行running)的程序。
守护进程Daemon:网络服务类的程序都会有守护进程。守护进程是指实时监测服务访问状态的程序。通常都是在系统后台运行。
FTP的工作端口:
21 控制端口,用于在客户机和服务器之间建立连接。
20 数据端口。用于服务器给客户机主动进行数据连接。

2.配置思路
1.关闭安全功能,并查状态:
2.查软件是否已安装,如果未安装就安装软件。
3.启动服务,并允许开机自动启动
4.设置共享目录,重新加载设置。
5.做本地(内测)访问测试,做异地(公测)访问测试。

3.vsftpd的配置文件
/etc/logrotate.d/vsftpd 日志轮滚策略文件
/etc/pam.d/vsftpd pam认证文件(重点)
/etc/vsftpd/ftpusers 黑名单文件(重点)
/etc/vsftpd/user_list 用户访问列表文件(重点),默认是黑名单,但是可以设置成白名单
将user_list设置成白名单文件。
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO 找到此行,如果没有就在最后添加此行
/etc/vsftpd/vsftpd.conf 服务的主配置文件(重点)

4.主配置文件
12:anonymous_enable=YES 允许匿名访问共享
16:local_enable=YES 允许本地普通用户(是指用useradd创建的用户)访问共享
19:write_enable=YES 允许写操作,即可写权限
23:local_umask=022 本地用户的umask值
37:dirmessage_enable=YES 允许显示目录信息
40:xferlog_enable=YES 允许xferlog日志,xferlog文件路径是/var/log/xferlog文件,仅记录文件的上传和下载日志
43:connect_from_port_20=YES 启用20号端口的连接(data数据端口)
57:xferlog_std_format=YES 启用xferlog标准(std是standard)格式的日志
115:listen=NO 不启用ipv4监听
124:listen_ipv6=YES 启用IPV6监听,会向下兼容ipv4
126:pam_service_name=vsftpd vsftpd的pam用户认证服务文件,是/etc/pam.d/vsftpd文件
127:userlist_enable=YES 启用user_list用户列表文件
128:tcp_wrappers=YES 启用tcp_wrappers防火墙功能,用来做基于IP的TCP访问控制

vsftpd.conf默认设置的功能:
1.允许匿名用访问共享,访问的是/var/ftp目录,且只能下载文件,不能上传文件。
2.允许普通用访问共享,访问的是用户自己的家目录,既能下载文件,也能上传文件。
3.普通用户用ftp命令登录到vsftpd服务器之后,能chroot到服务器的其他目录路径下,此功能不安全,建议关掉。

5.vsftpd的chroot牢笼四种情况:
全部不锁(默认情况)
全部加锁(用两行代码)
少数不加锁(用三行代码)
少数加锁(用四行代码)

1.全部不锁(默认)
#chroot_local_user=YES 允许本地用户chroot牢笼功能(change root),默认为NO不启用
#chroot_list_enable=YES 启用chroot_list文件功能,默认NO不启用此功能

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list

2.全部加锁
chroot_local_user=YES 启用本地用户chroot牢笼功能(change root),默认为NO不启用
allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行)

3.少数不加锁
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
在vim /etc/vsftpd/chroot_list 添加如下内容
lucy
lily
用tom、lucy、lily做访问测试,tom启用了牢笼功能,lucy、lily是不启用牢笼功能的。

4.少数加锁
#chroot_local_user=YES 启用本地用户chroot牢笼功能(change root),默认为NO不启用
allow_writeable_chroot=YES 允许chroot牢笼功能下执行写操作(centos7中必加此行)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路径
在vim /etc/vsftpd/chroot_list 添加如下内容
lucy
lily
用tom、lucy、lily做访问测试,lucy、lily启用了牢笼功能,tom是不启用牢笼功能的。

6.实现允许anonymous匿名用户既能下载又能上传文件文件。
1.文件共享软件必须允许这个用户有可读可写的权限。
2.用户对共享目录自身要有可读可写的权限。
3.匿名用户仅允许上传文件到/var/ftp中的子目录中。如/var/ftp/upload,且ftp匿名用户对upload目录要有可读可写权限。
警告:/var/ftp目录的属主、属组不允许修改,且other权限不允许有w可写权限,否则用ftp匿名用户访问共享时会提示500错误。

实现要求:
第1步,在vsftpd.conf配置文件中允许anonymous匿名用户有可读可写的权限。
vim /etc/vsftpd/vsftpd.conf 找到如下代码,去掉29、33行的#号
12 anonymous_enable=YES
29 #anon_upload_enable=YES 允许匿名用户上传
33 #anon_mkdir_write_enable=YES 允许匿名用户用mkdir创建目录
anon_other_write_enable=YES 允许匿名用户执行rm删除等操作(添加此行)
anon_world_readable_only=NO 关闭匿名用户只读的限制(为YES时会无法下载)

第2步,用root用户创建/var/ftp/upload目录,权限为777或属主和属组均为ftp,重启vsftpd服务,在win7/10中用ftp匿名用户访问共享ftp://192.168.11.11,上传一个文件到upload共享目录,看是否能传上去。结果是可以匿名用户上传文件到upload目录中。
mkdir -v /var/ftp/upload
chown -v ftp:ftp /var/ftp/upload 或 chmod -v 777 /var/ftp/upload
systemctl restart vsftpd

7.vsftpd的tcp_wrapers防火墙设置
tcp_wrapers的功能:是一个迷你的TCP防火墙,可以用来做基于TCP协议的应用程序的IP安全访问控制。
配置文件:
白名单:/etc/hosts.allow
黑名单:/etc/hosts.deny

技巧:让少数人为白户,那么先在hosts.deny中做拒绝所有(all)黑名单,然后在hosts.allow中做少数IP的放行白名单。

配置文件格式:man hosts.allow
格式说明: 守护进程名称:主机名或IP地址
守护进程名称可以是:vsftpd、sshd、httpd、in.tftpd等。
主机名或IP地址可以是:all所有主机、主机名、域名(网址)、IP地址、网络地址、IP地址范围。

设置举例:
vim /etc/hosts.deny 黑名单
vsftpd:192.168.11.1 拒绝192.168.11.1这台主机访问vsftpd共享
sshd:192.168.11.1 拒绝192.168.11.1这台主机访问sshd共享

8.vsftpd虚拟用户
虚拟用户:即非useradd创建的用户账号(非/etc/passwd中的账号),而是用vim创建的属于vsftpd的独立用户账号。
虚拟用户的优势:可以避免系统中的用户账号过多,让vsftpd文件共享软件独立管理自己的用户账号。
虚拟用户账号文件格式:文件中的奇数行是用户账号,偶数行是用户的密码。

vsftpd的虚拟用户方案思路:
0.准备工作:确保vsftpd文件共享服务已安装,并已启动vsftpd服务,且关闭了selinux和firewalld安全功能。
1.创建虚拟用户账号文件。
2.将虚拟用户账号用db_load转换成加密的数据库格式文件。
3.在vsftpd的pam认证文件中添加虚拟用户账号文件的认证关系。
4.用useradd创建一个普通用户账号vftper。
5.在vsftpd.conf配置文件中启用guest来宾(即虚拟用户)功能,设置一个真实用户账号,并将真实用户账号vftper和虚拟用户账号文件关联起来。
6.给每个虚拟用户账号设置独立的共享访问速度和访问目录。
7.重启vsftpd服务,并分别用虚拟用户账号访问共享。

1.创建虚拟用户账号文件。
cat > /etc/vsftpd/vuser.txt <<EOF
f1
passf1
f2
passf2
f3
passf3
EOF

2.将虚拟用户账号转换成加密的数据库格式文件。
yum provides db_load
yum install -y libdb-utils
cd /etc/vsftpd
ls
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuserdb.db
chmod -v 600 /etc/vsftpd/vuserdb.db

db_load选项:
-T 是translation转换文件格式
-t hash 指定格式转换的算法为hash算法
-f 是指定要转换格式的文件
/etc/vsftpd/vuser.txt 是要转换格式的文件
/et/vsftpd/vuserdb.db 是转换格式之后的文件

3.在vsftpd的pam认证文件中添加虚拟用户账号文件的认证关系。
cp -av /etc/pam.d/vsftpd{,.bak}
vim /etc/pam.d/vsftpd 做如下修改
#%PAM-1.0
#以下两行的功能:仅能实现虚拟用户访问共享,普通用户不能访问共享。(不建议使用)
#required 意思是必须的 sufficient 意思是满足的、备选的
#auth required pam_userdb.so db=/etc/vsftpd/vuserdb
#account required pam_userdb.so db=/etc/vsftpd/vuserdb
#以下功能选项的功能:既能让虚拟用户访问共享,也能让普通用户访问共享。(推荐使用)
auth sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
account sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
#以下几行功能选项是vsftpd的默认pam认证文件内容。(无需修改)
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

4.用useradd创建一个普通用户账号vftper。
useradd vftper -s /sbin/nologin
id vftper
ls -ld /home/vftper

5.在vsftpd.conf配置文件中设置一个真实用户账号,并将真实用户账号vftper和虚拟用户账号文件关联起来。
cd /etc/vsftpd
cp -av vsftpd.conf{,.bak}
cat /etc/vsftpd/vsftpd.conf
vim vsftpd.conf 在文件最后添加如下内容
guest_enable=YES 允许来宾用户访问共享,即虚拟用户
guest_username=vftper 指定来宾用户名为vftper用户(即第4步新建的用户)
user_config_dir=/etc/vsftpd/vuser_conf 指定用户配置文件目录
allow_writeable_chroot=YES 允许chroot功能下执行写操作(必须加此行,否则会登录失败)
#user_sub_token=$USER 使用用户子令牌(通常不用)

6.给每个虚拟用户账号设置独立的共享访问速度和访问目录。
cd /etc/vsftpd
mkdir -v vuser_conf
cd vuser_conf
#创建f1、f2虚拟用户的会员个性化设置文件,允许f1这个虚拟用户在自己的家目录中可读可写。
touch f1 f2
mkdir -v /home/vftper/{f1,f2,f3}
chmod -v 777 /home/vftper/{f1,f2,f3}
cat > f1 <<EOF
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vftper/f1
EOF

#允许f2这个用户在自己的家目录中可读,但不可写。
cat > f2 <<EOF
#添加local_root这行即可,其余内容可以不添加。
local_root=/home/vftper/f2
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

EOF

7.重启vsftpd服务,并分别用虚拟用户账号访问共享。
systemctl restart vsftpd
ftp 192.168.11.11 -->用f1、f2虚拟用户分别访问共享,测试文件的上传。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章