vsftpd服务传输文件
vsftp传输的三种认证模式
匿名用户模式、本地用户模式、虚拟用户模式
ftp的端口使用
默认使用端口为20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于客户端口发出的相关的FTP命令和参数。
FTP的两种工作模式
主动模式: FTP服务器主动向客户端发起连接请求。
被动模式: FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
vsftp安装配置
安装vsftpd
yum -y install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
vsftpd 的主配置文件
在件/etc/vsftpd/vsftpd.conf下
vsftpd服务程序的常用参数
listen=[YES|NO] ## 是否以独立运行的方式监听服务
listen_address=IP地址 ## 设置要监听大的IP地址
listen_port=21 ## 设置FTP服务的监听端口
download_enable = [YES|NO] ## 是否允许下载文件
userlist_enable = [YES|NO] ## 设置用户列表为“允许”还是“禁止”操作
userlist_deny = [YES|NO]
max_client=0 ## 最大客户端的连接数,0为不限制
max_per_ip=0 ## 同一个IP地址最大连接数,0为不限制
anonymous_enable=[YES|NO] ## 是否允许匿名用户访问
anon_upload_enable=[YES|NO] ## 是否允许匿名用户上传文件
anon_umask=022 ## 匿名用户上传文件的umask值
anon_root=/var/ftp ## 匿名用户的FTP根权限
anon_mkdri_write_enable=[YES|NO] ## 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO] ## 是否开放匿名用户的其他人权限(包括重命名、删除等操作权限)
anon_max_rate=0 ## 匿名用户的最大传输速率(字节/秒),0为不限制
local_enable=[YES|NO] ## 是否允许本地用户登录FTP
local_umask=022 ## 本地用户上传文件的umask值
local_root=/var/ftp ## 本地用户的FTP根目录
chroot_local_user=[YES|NO] ## 是否将用户权限禁锢在FTP目录,以确保安全
local_max_rate=0 ## 本地用户最大传输速率(字节/秒),0为不限制
匿名开发模式
在主配置文件下添加
anonymous_enable=YES ## 允许匿名用户访问
anon_umask=022 ## 匿名用户上传文件的umask值
anon_upload_enable=YES ## 是否允许匿名用户上传文件
anon_mkdri_write_enable=YES ## 允许匿名用户创建目录
anon_other_write_enable=YES ## 开放匿名用户的其他人权限(包括重命名、删除等操作权限)
重启服务
systemctl restart vsftpd
systemctl eanble vsftpd
修改/var/ftp/pub文件的属主和属组为ftp
chown -Rf ftp /var/ftp/pub
修改selinu域策略
## 查看ftp相关的selinux域策略
[root@localhost ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off ## 修个这个为on
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
[root@localhost ~]# setsebool -P ftpd_full_access=on
-P 参数让修改过的策略永久生效
本地用户模式
在主配置文件内添加以下内容
anonymous_enable=NO ## 不允许匿名用户访问
local_enable=YES ## 允许本地用户登录FTP
write_enable=YES ## 设置可写权限
local_umask=022 ## 本地用户上传文件的umask值
userlist_enable = YES ## 启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_deny = YES ## 开启用户作用名单文件功能
重新启动ftp服务
systemctl restart vsftpd
systemctl enable vsftpd
在vsftpd服务程序所在的目录存放着两个名为“用户名单”(ftpusers和user_list)。这要里面有着本地用户的名单则不能登录ftp上。
两个名单路径
/etc/vsftpd/ftpuser
/etc/vsftpd/user_list
在采用本地用户模式登录FTP服务器后,默认访问的是该用户的家目录(/home/用户名)。而且该目录的默认所有者、所属组是该用户自己,因此不存在写入权限不足的情况。但是当前操作仍热被拒绝,是因为seliunx域中对FTP服务的允许策略。
getrebool -a | grep ftp ##查看ftp的selinuxde域策略
setsebool -P ftpd_full_access=on
虚拟用户模式
第一步:创建用于FTP认证的用户数据库文件,奇数行账户名、偶数行密码。
[root@localhost vsftpd]# vim /etc/vsftpd/vuser.txt
hjk
666
hxd
888
由于这样的明文信息很不安全,且vsftpd也无法加载该格式的数据,因此得用db_load命令对vuser.txt文件数据加密,且设置权限使得普通用户无法访问
#创建加密文件 -T 和-t参数必须加上,用于转化普通文本为vsftpd识别的数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# ll vuser.db
-rw-r--r-- 1 root root 12288 6月 7 15:46 vuser.db
[root@localhost vsftpd]# chmod 600 vuser.db
[root@localhost vsftpd]# ll vuser.db
-rw-------. 1 root root 12288 6月 7 15:04 vuser.db
[root@localhost vsftpd]# rm -rf vuser.txt
第二步:创建当虚拟用户登录后默认访问的文件夹路径,且和linux中的一个本地用户做一个映射关系,防止匿名用户登录后,创建了文件夹,但是系统没有此用户报错权限问题
#创建一个新用户,指定用户家目录,且禁止登陆
[root@localhost vsftpd]# useradd -a /var/ftproot -s /sbin/nologin virtual
#检查此ftproot的属性
[root@localhost vsftpd]# ls -ld /var/ftproot/
drwxr-----. 3 virtual virtual 78 6月 7 15:32 /var/ftproot/
#更改文件夹权限
[root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/
第三步:建立用于支持虚拟用户的PAM文件( PAM是一组安全机制的模块,默认编辑认证文件/etc/pam.d/vsftpd),我们添加一个文件为vsftpd.vu.
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
### 新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内“db=”参数为使用db_load命令形成的账户密码数据库文件的路径,但不用写数据库文件的后缀。
第四步:修改主配置文件
anonymous_enable=NO ## 禁止匿名开发模式
local_enable=YES ## 允许本地用户模式
guset_enable=YES ## 开启虚拟用户模式
guest_username=virtual ## 指定虚拟用户账户 (为前面创建不可登录的用户账户)
pam_service_name=vsftpd.vu ## 指定PAM文件(默认为vsftpd)
allow_writeable_chroot=YES ## 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
第五步:为虚拟用户设置不同的权限。
hjk 可以上传、创建、修改、查看、删除文件
hxd 只可以查看
## 新建管理虚拟用户权限的文件夹
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/
[root@localhost vsfptd]# cd /etc/vsftpd/vusers_dir/
## 设置hjl的权限 为可以上传、创建、修改、查看、删除文件
[root@localhost vusers_dir]# touch hjk
[root@localhost vusers_dir]# vim hjk
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
## 设置hxd的权限 为只可以查看
[root@localhost vusers_dir]# touch hxd
[root@localhost vusers_dir]# vim hxd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
再次修改主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。
### 在主配置文件下添加
user_config_dir=/etc/vsftpd/vusers_dir
### 重启服务
systemctl restart vsftpd
systemctl enable vsftpd
第六步:设置selinux域允许策略。
getrebool -a | grep ftp ##查看ftp的selinuxde域策略
setsebool -P ftpd_full_access=on