二、配置文件说明
1.用户登录和相关权限设置
anonymous_enable=YES #设置是否允许匿名用户登录FTP服务器。默认为YES
ftp_username=ftp #定义匿名用户的账户名称,默认值为ftp。
no_anon_password=YES #匿名用户登录时是否询问口令。设置为YES,则不询问。默认NO
anon_root=/xx #默认匿名用户登录后是在/var/ftp下,现在修改为/xx目录下
local_root=/xx #默认本地用户登陆后是在家目录下面,现在修改为/xx目录下
local_enable=YES #是否允许本地用户登录FTP服务器。默认为NO
write_enable=YES #是否对登录用户开启写权限。属全局性设置。默认NO
local_umask=022 #设置本地用户的文件生成掩码为022,默认是077
anon_upload_enable=YES #是否允许匿名用户上传文件。只有在write_enable设置为YES时,该配置项才有效。而且匿名用户对相应的目录必须有写权限。默认为NO;(匿名用户默认是可以下载的)
anon_mkdir_write_enable=YES #是否允许匿名用户创建目录。只有在write_enable设置为YES时有效。且匿名用户对上层目录有写入的权限。默认为NO
注意:匿名用户登录时(ftp 172.24.0.4),用户名输入ftp,密码则是不需要的,直接回车就好
2.设置欢迎信息
用户登录FTP服务器成功后,服务器可向登录用户输出预设置的欢迎信息。
ftpd_banner=Welcome to my FTP server.
//该配置项用于设置比较简短的欢迎信息。若欢迎信息较多,则可使用banner_file配置项。
banner_file=/etc/vsftpd/banner
//设置用户登录时,将要显示输出的文件。该设置项将覆盖ftpd_banner的设置。
dirmessage_enable=YES
//设置是否显示目录消息。若设置为YES,则当用户进入特定目录(比如/var/ftp/linux)时,将显示该目录中的由message_file配置项指定的文件(.message)中的内容。
message_file=.message
//设置目录消息文件。可将显示信息存入该文件。该文件需要放在 相应的目录(比如/var/ftp/linux)下
3、控制用户是否允许切换到上级目录
在默认配置下,用户可以使用“cd..”命名切换到上级目录。比如,若用户登录后所在的目录为/var/ftp,则在“ftp>”命令行 下,执行“cd..”命令后,用户将切换到其上级目录/var,若继续执行该命令,则可进入Linux系统的根目录,从而可以对整个Linux的文件系统 进行操作。
若设置了write_enable=YES,则用户还可对根目录下的文件进行改写操作,会给系统带来极大的安全隐患,因此,必须防止用户切换到Linux的根目录,相关的配置项如下:
chroot_list_enable=YES
// 设置是否启用chroot_list_file配置项指定的用户列表文件。设置为YES则除了列在/etc/vsftpd/chroot_list文件中的的帐号外,所有登录的用户都可以进入ftp根目录之外的目录。默认NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用于指定用户列表文件,该文件用于控制哪些用户可以切换到FTP站点根目录的上级目录。
chroot_local_user=YES
// 用于指定用户列表文件中的用户,是否允许切换到上级目录。默认NO
注意:要对本地用户查看效果,需先设置local_root=/var/ftp
具体情况有以下几种:
1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能切换到上级目录。
4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可以切换到上级目录。
5)当用户不允许切换到上级目录时,登录后FTP站点的根目录“/”是该FTP账户的主目录,即文件的系统的/var/ftp目录。
4、设置访问控制
(1)设置允许或不允许访问的主机(见TBP14)
tcp_wrappers=YES用来设置vsftpd服务器是否与tcp wrapper相结合,进行主机的访问控制。
默认设置为YES,vsftpd服务器会检查/etc/hosts.allow和/etc /hosts.deny中的设置,以决定请求连接的主机是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。
比如,若要仅允许192.168.168.1~192.168.168.254的用户,可以访问连接vsftpd服务器,则可在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.168.0/255.255.255.0 :allow
all:all:deny
(2)设置允许或不允许访问的用户
对用户的访问控制由/etc/vsftpd/user_list和/etc/vsftpd/ftpusers文件来控制实现。相关配置命令如下:
userlist_enable=YES
// 决定/etc/vsftpd/user_list文件是否启用生效。YES则生效,NO不生效。
userlist_deny=YES
// 决定/etc/vsftpd/user_list文件中的用户是允许访问还是不允许访问。
若设置为YES,则/etc/vsftpd/user_list 文件中的用户将不允许访问FTP服务器;
若设置为NO,则只有vsftpd.user_list文件中的用户,才能访问FTP服务器。
5、设置访问速度
anon_max_rate=0
//设置匿名用户所能使用的最大传输速度,单位为b/s。若设置为0,则不受速度限制,此为默认值。
local_max_rate=0
// 设置本地用户所能使用的最大传输速度。默认为0,不受限制。
6、定义用户配置文件
在vsftpd服务器中,不同用户还可使用不同的配置,这要通过用户配置文件来实现。
user_config_dir=/etc/vsftpd/userconf #用于设置用户配置文件所在的目录。
设置了该配置项后,当用户登录FTP服务器时,系统就会到/etc/vsftpd/userconf目录下读取与当前用户名相同的文件,并根据文件中的配 置命令,对当前用户进行更进一步的配置。比如,利用用户配置文件,可实现对不同用户进行访问的速度进行控制,在各用户配置文件中,定义 local_max_rate配置,以决定该用户允许的访问速度。
7、与连接相关的设置
listen=YES
//设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES, 此为默认值,建议不要更改。很多与服务器运行相关的配置命令,需要此运行模式才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受 xinetd服务的管理控制,功能上会受限制。
max_clients=0
//设置vsftpd允许的最大连接数,默认为0,表示不受限制。若设置为150时,则同时允许有150个连接,超出的将拒绝建立连接。只有在以standalone模式运行时才有效。
max_per_ip=0
// 设置每个IP地址允许与FTP服务器同时建立连接的数目。默认为0,不受限制。通常可对此配置进行设置,防止同一个用户建立太多的连接。只有在以standalone模式运行时才有效。
listen_address=IP地址
//设置在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器所绑定的所有IP地址进行侦听。只有在以standalone模式运行时才有效。 对于只绑定了一个IP地址的服务器,不需要配置该项,默认情况下,配置文件中没有该配置项。若服务器同时绑定了多个IP地址,则应通过该配置项,指定在哪 个IP地址上提供FTP服务,即指定FTP服务器所使用的IP地址。
注意:设置此值前后,可以通过netstat -tnl对比端口的监听情况
accept_timeout=60
//设置建立被动(PASV)数据连接的超时时间,单位为秒,默认值为60。
connect_timeout=60
// PORT方式下建立数据连接的超时时间,单位为秒。
data_connection_timeout=300
//设置建立FTP数据连接的超时时间,默认为300秒。
idle_session_timeout=600
//设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒,默认为600秒。即设置发呆的逾时时间,在这个时间内,若没有数据传送或指令的输入,则会强行断开连接。
pam_service_name=vsftpd
//设置在PAM所使用的名称,默认值为vsftpd。
setproctitle_enable=NO|YES
//设置每个与FTP服务器的连接,是否以不同的进程表现出来,默认值为NO,此时只有一个名为vsftpd的进程。若设置为YES,则每个连接都会有一个vsftpd进程,使用“ps -ef|grep ftp”命令可查看到详细的FTP连接信息。安全起见,建议关闭。
8、设置传输模式
FTP在传输数据时,可使用二进制(Binary)方式,也可使用ASCII模式来上传或下载数据。
ascii_download_enable=YES #设置是否启用ASCII模式下载数据。默认为NO。
ascii_upload_enable=YES #设置是否启用ASCII模式上传数据。默认为NO。
9、设置上传文档的所属关系和权限
(1)设置匿名上传文档的属主
chown_uploads=YES
//用于设置是否改变匿名用户上传的文档的属主。默认为NO。若设置为YES,则匿名用户上传的文档的属主将被设置为chown_username配置项所设置的用户名。
chown_username=whoever
//设置匿名用户上传的文档的属主名。只有chown_uploads=YES时才有效。建议不要设置为root用户。 但系统默root
(2)新增文档的权限设定
local_umask=022
//设置本地用户新增文档的umask,默认为022,对应的权限为755。umask为022,对应的二进制数为000 010 010,将其取反为111 101 101,转换成十进制数,即为权限值755,代表文档的所有者(属主)有读写执行权,所属组有读和执行权,其他用户有读和执行权。022适合于大多数情 况,一般不需要更改。若设置为077,则对应的权限为700。
anon_umask=022 //设置匿名用户新增文档的umask。默认077
file_open_mode=0755 //设置上传文档的权限。权限采用数字格式。 默认0666
10、日志文件
xferlog_enable=YES //是否启用上传/下载日志记录。默认为NO
xferlog_file=var/log/vsftpd.log //设置日志文件名及路径。需启用xferlog_enable选项
xferlog_std_format=YES //日志文件是否使用标准的xferlog日志文件格式(与wu-ftpd使用的格式相同) 。默认为NO
11、trouble shooting
当FTP不能上传文件时,应该从以下3个方面来检查
1、在配置文件中查看是否开启了写权限
2、文件系统是否有写权限
[root@docker ~]# ls -ld /var/ftp/
drwxr-xr-x 3 root root 4096 11月 21 09:25 /var/ftp/
# 匿名用户登录后的目录是/var/ftp,所有者应该是ftp,而其他人是没有写权限的
# 若想把文件上传到/var/ftp/incoming目录,则修改incoming目录权限
[root@docker ~]# chown ftp:ftp /var/ftp/incoming/
[root@docker ~]# ls -ld /var/ftp/incoming/
drwxr-xr-x 2 ftp ftp 4096 11月 21 10:14 /var/ftp/incoming/
注意:在上传文件时,先切换到incoming这个目录下,再开始上传文件
3、redhat涉及到selinux问题(最简单方法关闭selinux)