yum
命令安装文件服务器yun install vsftpd* -y
vsftpd
的安装路径rpm -ql vsftpd | more
vsftpd
systemctl restart vsftpd.service
vsftpd
进程ps -ef | grep vsftpd
设置 | 描述 |
---|---|
anonymous_enable=YES | 开启匿名用户访问; |
local_enable=YES | 启用本地系统用户访问; |
write_enable=YES | 本地系统用户写入权限; |
local_umask=022 | 本地用户创建文件及目录默认权限掩码; |
dirmessage_enable=YES | 打印目录显示信息,通常用于用户第一次访问目录时,信息提示; |
xferlog_enable=YES | 启用上传/下载日志记录; |
connect_from_port_20=YES | FTP使用20端口进行数据传输; |
xferlog_std_format=YES | 日志文件将根据xferlog的标准格式写入; |
listen=NO | Vsftpd不以独立的服务启动,通过Xinetd服务管理,建议改成YES; |
listen_ipv6=YES | 启用IPV6监听; |
pam_service_name=vsftpd | 登录FTP服务器,依据/etc/pam.d/vsftpd 中内容进行认证; |
userlist_enable=YES | Vsftpd.user_list和ftpusers配置文件里在这里插入代码片 用户禁止访问FTP; |
tcp_wrappers=YES | 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。 |
FTP是基于 C/S 模式的,即客户端和服务器的传输模式。FTP的传输模式有两种 主动
和被动
模式。
主动模式即客户端从一个任意 N
(大于 1024 的端口
)端口,连接FTP服务器的 21 端口,客户端开始监听 N + 1
端口,并发送命令 port N+1
到服务器,FTP服务器以数据连接端口 20
连接到客户端指定的 N + 1
端口。
配置 | 描述 |
---|---|
pasv_enable=no | 设置为主动模式,关闭被动模式 |
connect_from_port_20=yes | 配置主动模式下使用 20 端口进行数据传输,必须为 yes |
被动模式即客户端从一个任意 N
(大于 1024 的端口
)端口连接到FTP服务器的 21
端口,客户端开始监听 N+ 1
端口,并发送 PASV
命令,服务器会开启一个任意的端口 P
(大于 1024 的端口
),并发送PORT P
命令给客户端。客户端发起从本地端口N+1
到服务器的端口P的连接用来传送数据。FTP默认是被动模式,在安装后启动需要关闭防火墙,才可以在浏览器或者Windows的资源管理器访问(ftp://IP)。
systemctl stop firewalld
配置 | 描述 |
---|---|
connect_from_port_20=no | 是否为足管模式(默认为yes),可以不为 no |
pasv_enable=yes | 开启被动配置(默认为 yes) |
pasv_min_port=60000 | 默认被动模式开放的端口号最小值 |
pasv_mmax_port=60300 | 默认被动模式开放的端口号最大值 |
匿名用户默认只有文件的查看权限,无法对文件进行操作。如果需要对文件进行操作需要添加以下的配置信息,关闭匿名用户模式只需要将 anonymous_enable
修改为 no
即可。
配置 | 描述 |
---|---|
anonymous_enable=yes | 开启匿名用户模式 |
anon_upload_enable=yes | 开启匿名用户上传权限 |
anon_mkdir_write_enable=yes | 开启匿名用户创建文件夹的权限 |
anon_other_write_enalbe=yes | 开启匿名用户其它权限 |
anon_umask=022 | 匿名用户操作权限 |
local_umask=002 | 本地用户权限由 022 修改为 002 |
local_root=/var/ftp/ | 指定登录后的文件位置 |
anonymous
和ftp
需要将文件夹给予指定用户(如ftp
或anonymous
)的操作权限。## 指定用户
chown -R ftp pub/
## 或者是所有的用户
chmod -R pub/
使用以上配置后重启 vsftp 如果可以进行操作,就不需要进行以下配置
## 添加服务
firewall-cmd --add-service=ftp --permanent
## 重启防火墙
firewall-cmd --reload
## 或者关闭防火墙
systemctl stop firewalld
## 查看 SELinux 的模式
getenforce // Enforcing
## 修改为 Permissive 模式
setenforce 0
## 查看
getenforce // Permissive
## 查看
getsebool -a | grep ftp
## 修改
setsebool -P ftpd_anon_write=1
以上配置修改完成后重启ftp systemctl restart vsftpd
。就可以对指定的目录进行上传、修改和删除操作。
匿名用户适用于不需要保密的文件,如果文件比较机密自允许个别人员访问将需要使用 系统用户模式。系统用户模式是使用linux 的系统用户进行操作。
## 添加用户
useradd ftptest1
useradd ftptest2
## 设置用户密码
echo ftptest1|passwd --stdin ftptest1
echo ftptest2|passwd --stdin ftptest2
创建用户 ftptest1和ftptest2 ,分别设置密码为 ftptest1和ftptest2。
配置 | 描述 |
---|---|
anonymous_enable=no | 关闭匿名模式,开启系统用户模式 |
local_root=/var/ftp/ | 将faile配置注释。用于在系统用户登录后可以操作每个用户单独的登录文件 |
以下配置可以不配 | |
chown_uploads=NO | 设定禁止上传文件更改宿主 |
nopriv_user=ftptest | 设定支撑Vsftpd服务的宿主用户为新建用户 |
ascii_upload_enable=YES | 设定支持ASCII模式的上传功能 |
ascii_download_enable=YES | 设定支持ASCII模式的上传和下载功能。 |
userlist_enable=YES | 使用 user_list 管理 ftp 用户,该值设置为 yes 需要在白名单 /etc/vsftpd/user_list 文件中添加用户和密码,一行表示一个用户 |
userlist_deny=NO | 是否进行登录用户检查,将登录的用户名和密码根据白名单进行匹配。userlist_enable 和userlist_dany 都为 yes 才会起效,不然在白名单中配置了,也不会有效果。 |
重启服务进行操作。
系统用户的文件位置 /home/登录的系统用户名/
使用系统用户配置不易于管理,会导致系统用户过多。使用虚拟用户模式可以解决这一问题,虚拟用户模式就是没有真实的系统用户,而是通过对一个真实用户以及相关的权限来访问控制的。虚拟的用户不能登录操作系统,保证了系统的安全性。
yum install pam* libdb-utils libdb* --skip-broken -y
如出现以下错误
Multilib version problems found. This often means that the root cause is something else and multilib version checking is just pointing out that there is a problem.
将安装语句改为
yum install pam* libdb-utils libdb* --skin-broken --setopt=proptected-multilib=false
flank // 用户名
123 // 密码
mike // 用户名
123 // 密码
db_load -T -t hash -f /etc/vsftpd/user.list.txt /etc/vsftpd/user.db
## 赋予权限
chmod 700 /etc/vsftpd/user.db
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
## user 为第三步生成的 user.db 文件, .db 不用写
## required 可以替换为 sufficient ,表示充分条件,就是说一旦通过验证就不进行下面的验证步骤了。相反,如果没有通过的话,
## 也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。
## 可以将 pam_userdb.so 改为 /lib | lib64 /security/pam_userdb.so
auth
是指对用户的用户名口令进行验证
account
是指对用户有哪些权限进行验证
useradd -s /sbin/nologin virtual
配置 | 描述 |
---|---|
anonymous_enable=no | 不允许匿名用户登录 |
local_enable=YES | 设置本地用户可以访问,如果设置为 no,即本地用户不能访问,同时所有的虚拟用户都不能访问 |
write_enable=YES | 可以进行写操作 |
local_umask=022 | 设置上传后的文件权限掩码 |
dirmessage_enable=YES | 开启文件目录标语功能 |
xferlog_enable=YES | 开启日志 |
connect_from_port_20=YES | 设定端口 20 进行数据传输(主动模式,被动模式下无效) |
xferlog_std_format=YES | 设置日子记录的标准格式 |
xferlog_file=/var/log/xferlog | 设置日子文件的存储路径,如果该文件不存在需要手动创建 touch /var/log/xferlog.log |
listen=NO | |
listen_ipv6=YES | |
userlist_enable=YES | 设置启用 vsftpd 的白名单验证,即不在 userlist_file 中的用户不能使用 ftp |
tcp_wrappers=YES | 支持 TCP wrapper 模式 |
chroot_list_enable=NO | 禁止用户登出自己的FTP主目录。 |
ls_recurse_enable=NO | 禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。 |
虚拟用户的配置 | |
pam_service_name=vsftpd | 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。 |
guest_enable=YES | 启用虚拟用户PAM认证 |
guest_username=virtual | 设置宿主用户名 |
user_config_dir=/etc/vsftpd/virtual/ | 设置虚拟用户的配置文件夹路径,用于在PAM认证后进行单个用户的配置信息,该文件夹下的配置文件名必须和虚拟用户名一致 |
virtual_use_local_privs=YES | 虚拟用户的权限和本地用户(宿主)的权限一样 |
## 创建日志文件
touch /var/log/xferlog.log
## 将日志的权限赋予宿主用户
chown virtual:virtual /var/log/xferlog.log
## 创建虚拟用户配置文件夹
mkdir /etc/vsftpd/viitual/
## 在虚拟用户的配置文件夹下添加配置文件,文件名需要和虚拟用户名一致
vim flank
local_root=/home/virtual/flank
anonymous_enable=NO
local_umask=022
write_enable=YES
anon_world_readable_only=YES
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
local_max_rate=50000
## 在copy 一份为虚拟用户 vitrual2
cp flank mike
## 修改 mike 配置文件的信息
local_root=/home/vitrual/mike
配置 | 描述 |
---|---|
local_root=/opt/vsftp/vitraul1 | 指定虚拟用户的具体主路径。 |
anonymous_enable=NO | 设定不允许匿名用户访问。 |
local_umask=022 | 设定上传文件权限掩码。 |
write_enable=YES | 允许登陆用户有写权限; |
anon_world_readable_only=YES | 允许匿名用户下载,然后读取文件; |
anon_upload_enable=YES | 允许匿名用户上传文件,只有在write_enable=YES时该参数才生效; |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录,只有在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。 |
## 创建目录
mkdir -p /home/virtual/{flank,mike}
## 修改虚拟用户的宿主用户为主目录的属主,必须操作不然无法登录
chown -R virtual:virtual /home/virtual