Linux安装配置vsftpd

vsftpd(very secure ftp daemon,非常安全的FTP守护进程) 是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。
vsftpd可用yum安装:yum install vsftpd

测试环境为RHEL8

一、有关配置文件

/etc/vsftpd/vsftpd.conf:主配置文件
/etc/vsftpd/ftpusers :禁止登陆vsftpd的用户列表文件。
/etc/vsftpd/user_list:禁止或允许使用vsftpd的用户列表文件。
/etc/pam.d/vsftpd : PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)

二、登录方式

1.匿名用户登录

匿名用户(anonymous,ftp)登陆后的主目录:/var/ftp,此目录一般为755权限,如果为777权限,则会出现错误信息
匿名用户的下载目录:/var/ftp/pub,匿名用户一般在此目录下工作,此目录需设置777权根,必要时设置SBIT特殊权限(可使得用户只能上传不能删除) chmod 1777 /var/ftp

2.本地用户登录

本地用户登陆后的主目录:该用户在系统中的主目录

3.虚拟用户登录

虚拟用户登陆后的主目录:管理员指定的任意用户的主目录

三、主配置文件常用参数说明

[root@hollowman ~]#  vim  /etc/vsftpd/vsftpd.conf

#匿名用户相关配置
anonymous_enable=NO  #是否允许匿名登录FTP服务器,如果为YES,则用户可通过用户名ftp或anonymous来登录
anon_upload_enable=YES  #是否允许匿名用户上传文件,当SELinux 为强制模式(enforcing )时,需检查selinux中的allow_ftpd_anon_write, allow_ftpd_full_access规则是否开启
anon_mkdir_write_enable=YES  # 是否允许匿名用户创建目录
anon_root=/var/ftp  #匿名用户的FTP根目录,默认为/var/ftp
anon_other_write_enable=YES	#是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0   #设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制
anon_umask=022	 #匿名用户上传文件的umask值

#本地用户相关配置
local_enable=YES  #是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,当SELinux 为强制模式(enforcing )时,需检查selinux中的ftp_home_dir规则是否开启
write_enable=YES  # 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
local_max_rate=0   #设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制
local_umask=022   #本地用户上传文件的umask值,其中022和077最为常见

#虚拟用户有关配置
guest_enable=YES    #设置启用虚拟用户功能
guest_username=vsftpduser    #指定虚拟用户的宿主用户
user_config_dir=/etc/vsftpd/vsftpduser    #指定虚拟用户的配置文件存放目录,该目录下保存着单个虚拟用户的配置文件


#其他有关全局配置
dirmessage_enable=YES   #是否激活目录欢迎信息功能,一般欢迎信息是通过该目录下的.message文件(用户自己建立)获得的
ftpd_banner=Welcome to blah FTP service.  #设置登陆显示文字信息

xferlog_enable=YES  # 是否开启日志功能
xferlog_file=/var/log/xferlog  # 设置日志文件存储路径,默认为/var/log/xferlog
xferlog_std_format=YES  # 设置日志文件的标准格式,/var/log/xferlog 日志文件使用的是xferlog_std_format标准

connect_from_port_20=YES  #数据传输端口开启,注意确保ftp-data数据传输端口为20 

# 设定匿名用户上传文件的属主。注意,不推荐使用root用户上传文件
#chown_uploads=YES
#chown_username=whoever

# 是否以ASCII方式传输数据。启用ASCII方式传输数据,可能会导致由"SIZE /big/file"方式引起的DoS攻击
#ascii_upload_enable=YES
#ascii_download_enable=YES

idle_session_timeout=600  #设置空闲或者无操作时自动退出登陆的时间
data_connection_timeout=120  #设置数据连接超时时间
ls_recurse_enable=YES # 是否允许递归查询。
listen=NO   #是否开启监听(不支持ipv6),如开启,则由vsftpd自己监听ipv4端口
listen_ipv6=YES   #是否开启ipv6端口监听
listen_address=IP   #设置要监听的IP地址
listen_port=端口号  #设置FTP服务的监听端口
max_client=0    #设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制
max_per_ip=0    #设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制

chroot_local_user=YES  # 是否将用户锁定在自身的FTP目录。当chroot_local_user=YES,表示锁定开启。
chroot_list_enable=YES  # 当chroot_list_enable=YES则表示/etc/vsftpd/chroot_list列表中的用户锁定在自身的FTP目录,否则,列表以外的用户锁定在自身的FTP目录。
chroot_list_file=/etc/vsftpd/chroot_list  # 控制用户是否可以访问自身FTP目录以外的目录,文件内为用户列表

deny_email_enable=YES # 邮件黑名单设置
banned_email_file=/etc/vsftpd/banned_emails  # 邮件黑名单存储路径

pam_service_name=vsftpd  # 设置PAM可插拔认证模块的配置文件名,即/etc/pam.d/vsftpd文件(一般将vsftpd文件作为本地用户认证模块名,而将vsftpd.vu作为虚拟用户认证模块名)
# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中

userlist_enable=YES   #是否使得userlist_deny有效以及user_list文件生效

四、虚拟用户登录配置步骤

1.创建虚拟用户

#创建vsftpd虚拟用户列表vuser.list,并添加两个vsftpd虚拟用户vuser1和vuser2,密码均为redhat

[root@hollowman ~]# cd /etc/vsftpd/
[root@hollowman vsftpd]# vim vuser.list  
vuser1
redhat
vuser2
redhat

将vuser.list进行数据转换,形成可用于ftp认证的数据库文件vuser.db,建议删除vuser.list及降低vuser.db的权限(600权限)
命令语法:db_load -T -t hash -f user user.db

-T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件
-t hash   读取文件的基本方
-f 指定数据源文件也就是vuser.list
[root@hollowman vsftpd]# db_load -T -t hash -f vuser.list vuser.db

2.创建一个本地用户,禁止登录系统,指定家目录并赋予755权限。以便将该家目录作为虚拟用户登录后的主目录。

[root@hollowman vsftpd]# useradd -d /var/ftphome -s /sbin/nologin vsftpduser
[root@hollowman vsftpd]# chmod -Rf 755 /var/ftphome

3.创建支持vuser.db的pam文件vsftpd.vu

pam文件在/etc/pam.d/目录下,文件名应与主配置文件中pam_service_name的参数相同,也就是pam_service_name=vsftpd.vu

[root@hollowman 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
#这里的vuser指向的就是vuser.db,只是省略了文件的后缀。

4.配置主配置文件参数

[root@hollowman vsftpd]# vim vsftpd.conf

anonymous_enable=NO

local_enable=YES
local_umask=022
write_enable=YES

guest_enable=YES
guest_username=vsftpduser
allow_writeable_chroot=YES

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES

listen=NO
listen_ipv6=YES

pam_service_name=vsftpd.vu
userlist_enable=YES

5.设置虚拟用户权限

此时可以通过虚拟用户名和密码进行登录,但只有读取权限,需要进行进一步的权限设置才能达到想要的效果。

1).命名并新建一个虚拟用户目录vsftpduser,一般放在vsftpd工作目录下比较便于记忆
[root@hollowman vsftpd]# mkdir vsftpduser
2)在虚拟用户目录下,新建虚拟用户配置文件,文件名与虚拟用户同名,也就是vuser1和vuser2
[root@hollowman vsftpd]# cd vsftpduser/
[root@hollowman vsftpduser]# touch vuser1
[root@hollowman vsftpduser]# touch vuser2
3)对虚拟用户配置文件进行配置,这里只配置vuser1,虚拟用户配置文件的配置用到的是匿名用户配置参数
[root@hollowman vsftpduser]# vim vuser1

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
4)回到主配置文件,在适当位置添加虚拟用户配置目录信息
[root@hollowman vsftpduser]# cd ..
[root@hollowman vsftpd]# vim vsftpd.conf

user_config_dir=/etc/vsftpd/vsftpduser

6.记得修改selinux规则,将ftpd_full_access设置为on

[root@hollowman vsftpd]# setsebool -P ftpd_full_access on

7.重启vsftpd服务

[root@hollowman vsftpd]# systemctl restart vsftpd

8.用vuser1虚拟用户登录ftp服务器访问

[root@hollowman vsftpd]# ftp 192.168.100.100
Connected to 192.168.100.100 (192.168.100.100).
220 (vsFTPd 3.0.3)
Name (192.168.100.100:root): vuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir testdir   #创建目录
257 "/testdir" created
ftp> ls
227 Entering Passive Mode (192,168,100,100,236,230).
150 Here comes the directory listing.
drwx------    2 1001     1001            6 Jan 21 23:39 testdir
226 Directory send OK.
ftp> rmdir testdir     #删除目录
250 Remove directory operation successful.
ftp> ls
227 Entering Passive Mode (192,168,100,100,208,14).
150 Here comes the directory listing.
226 Directory send OK.
ftp> 

尝试用vuser2登录,可以发现并不能创建和删除目录。

五、有关说明

1.用户登陆权限的参数说明

1)ftpusers文件中的用户(永远的黑名单)总是被禁止登陆vsftp
2)只有在userlist_enable=YES时,userlist_deny才有效,user_list文件才生效。
3)user_list文件中的用户可以为禁止登陆用户,也可以是“只”允许登陆用户(此时其他用户则为禁止登陆用户,当然,user_list文件必须为生效状态)
#允许所有用户(ftpusers用户除外)登陆vsftp
userlist_enable=NO

#禁止user_list用户(黑名单)登陆,也就是允许所有用户中除ftpusers用户和user_list用户以外的用户登陆。
userlist_enable=YES
userlist_deny=YES

#只允许user_list用户列表中用户登陆(ftpusers中用户除外)
userlist_enable=YES
userlist_deny=NO 

2.umask作用

当创建目录时,所赋予的目录的权限为:777 - umask值(当umask=022时,创建目录的权限为755)
当创建文件时,所赋予的文件的权限为:666 - umask值(当umask=022时,创建文件的权限为644)

[root@hollowman ~]# cd /var/ftp
[root@hollowman ftp]# mkdir dir1
[root@hollowman ftp]# touch file1
[root@hollowman ftp]# ls -l
total 0
drwxr-xr-x. 2 root root  6 Jan 13 07:16 dir1   #新创建的目录权限为755
-rw-r--r--. 1 root root  0 Jan 13 07:17 file1   #新创建的文件权限为644
drwxrwxrwx. 4 root root 26 Jan 13 07:07 pub

3.FTP登陆界面中有关数字代码的含义

110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。 
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。 
553 未执行请求的的命令,名称不正确

猜你喜欢

转载自blog.csdn.net/ymz641/article/details/112975191