• FTP服务是由vsftpd包提供的
  • 不再由xinetd服务管理
  • 用户认证配置文件:/etc/pam.d/vsftpd
  • 服务脚本:
    • centos7:/usr/lib/systemd/system/vsftpd.service
    • centos6:/etc/rc.d/init.d/vsftpd
  • 主配置文件:/etc/vsftpd/vsftpd.conf
  • 格式:option=value "注意:= 前后不要有空格"
  • 查看帮助:man 5 vsftpd.conf
  • 匿名用户(映射为系统用户ftp )共享文件位置:/var/ftp
  • 系统用户共享文件位置:用户家目录
  • 虚拟用户共享文件位置:为其映射的系统用户的家目录

相关配置

命令端口

    listen_port=21 默认为21端口

主动模式端口

    connect_from_port_20=YES 主动模式端口为20 
    #"注意下面这一项默认配置文件里没有需要手动添加,可以添加在任意位置"
    ftp_data_port=20  指定主动模式的端口 

被动模式数据端口范围

    linux客户端默认使用被动模式  
    windows 客户端默认使用主动模式  
    #"注意下面这两项默认配置文件里没有需要手动添加,可以添加在任意位置"
    pasv_min_port=6000    0为随机分配 该选项为最小端口 
    pasv_max_port=6010                该选项为最大端口

使用本机时间

	use_localtime=YES 使用本机时间 默认是本机时间加8小时(默认为NO,使用GMT) 

匿名账户管理

- 支持匿名用户
    anonymous_enable=YES 
- 匿名用户略过口令检查 
    no_anon_password=YES(默认NO)
- 只能下载所有者,所属组,其他都为读权限的文件 
    anon_world_readable_only (默认YES) 
- 支持匿名上传,注意:文件系统权限也会有限制,例如文件上传到的目录ftp用户是否有读写权限,默认匿名用户在/pub目录下不能上传文件
    anon_upload_enable=YES   
- 是否支持匿名用户创建文件
    anon_mkdir_write_enable=YES  
- 是否支持匿名用户删除和修改上传文件
    anon_other_write_enable=YES  
- 指定匿名上传的文件的umask值(默认为066)
    anon_umask=077 
- 指定上传文件的默认的所有者和权限  
    chown_uploads=YES(默认NO)  
    chown_username=wang     #指定上传文件所属者
    chown_upload_mode=0644  #指定上传文件的权限
例如:
    ftp> ls
    150 Here comes the directory listing.
    -rw-r--r--    1 500      50           2020 Feb 10 06:08 anaconda-ks.cfg   #修改之后上传的文件
    -rw-------    1 14       50       1073741824 Feb 10 06:04 f1   #没有修改之前上传的文件

Linux系统普通用户管理

- 所有系统普通用户都映射为某一个用户
    1,guest_enable=YES 所有系统用户都映射成guest用户  
    2,guest_username=wang 配合上面选项才生效,指定guest用户
    "注意:当添加该项配置之后,所有普通用户都会映射为"wang"用户,这时候如果"li"用户登入时,所在的目录会是wang的家目录,如果li用户不在wang用户组里,那么就不能查看wang用户的家目录,所以解决方法就是给读写权限即可
- 非匿名用户登录所在目录,(默认如果没映射用户的话,登入就在自己的家目录里)
    local_root=/ftproot 
- 是否允许linux用户登录  
    local_enable=YES 
- 允许linux用户上传文件
    write_enable-YES    
- 指定系统用户上传文件的默认权限     
    local_umask=022   

- 禁锢所有系统用户在家目录中       
    chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户 
- 禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反 
    1,在配置文件中添加下面两项配置
    chroot_list_enable=YES  
    chroot_list_file=/etc/vsftpd/chroot_list  
    2,在/etc/vsftpd/目录下创建一个文件名为:chroot_list
    注意:
			当chroot_local_user=YES时,则chroot_list中用户不禁锢  
			当chroot_local_user=NO时,则chroot_list中用户禁锢 

wu-ftp日志:默认启用

        xferlog_enable=YES (默认)启用记录上传下载日志 
		xferlog_std_format=YES (默认)使用wu-ftp日志格式 
		xferlog_file=/var/log/xferlog (默认)可自动生成 

vsftpd日志:默认不启用

   #使用vsftpd日志格式加入下面两项配置,(默认不启用)
        dual_log_enable=YES  
		vsftpd_log_file=/var/log/vsftpd.log(默认该文件会自动生成)不需要手动创建,重启服务有人访问就会自动生成 

登录提示信息

启动改配置在登入时会提示:welcome to mage ftp server
ftpd_banner="Welcome to blah FTP service."  
例如:
    [root@ansible-7 ~]# ftp  192.168.136.6
    Connected to 192.168.136.6 (192.168.136.6).
    "220 Welcome to blah FTP service."
    Name (192.168.136.6:root): 
也可以将提示语写在文件里但是需要加上下面这行配置,注意:在文件里支持字体加颜色噢!
    banner_file=/etc/vsftpd/ftpbanner.txt  
例如:

    echo -e '\033[1;5;31m小心驶得万年船\033[0m' > /etc/vsftpd/banner.txt
		```
 ![](http://i2.51cto.com/images/blog/201802/26/6e1d9922627b3d65c7ab0d83efbdfa4e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
1:表示高亮
5:闪烁
31:红色    
32:绿色                #注意中间使用”;“隔开
33:×××
34:蓝色
35:粉色
36:青色
37:白色
## 目录访问提示信息

当切换至某一个目录时会提示一些信息,需要加上下面的配置选项 dirmessage_enable=YES (默认) message_file=.message(默认)加上该配置后提示语文件必须存放在指定目录下.message中 例如: echo -e '\033[1;31m您以进入pub目录! \033[0m' > /var/ftp/pub/.message

   ![](http://i2.51cto.com/images/blog/201802/26/409052f7f019c5f6d3ca225fcb5e1445.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 

##  使用pam(Pluggable Authentication Modules)完成用户认证 

默认在FTP服务就启用了PAM模块认证功能,下面这行配置就是启用PAm模块功能的。 pam_service_name=vsftpd PAM模块配置文件所在:/etc/pam.d/vsftpd #默认文件中用户拒绝登录 配置文件内容: cat /etc/pam.d/vsftpd #%PAM-1.0 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

我们只需要关注下面这个PAM模块即可 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 该PAM模块功能就是在/etc/vsftpd/ftpusers这个文件中的用户能不能登入FTP服务器, 取决于sense=是否是等于allow了,如果是deny的话该文件里的用户将不能登入,而allow则反之。 所以想禁止一个用户登入只要写入/etc/vsftpd/ftpusers文件即可。这就是为什么root用户登不上去的原因,

例如: [root@centos6 pub]# cat /etc/vsftpd/ftpusers # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody

## 另一个控制用户登入的文件

需要启用下面的配置选项,

1,userlist_enable=YES 默认有此设置
上面的选项作用就是让/etc/vsftpd/目录下的users_list文件生效,默认在里面的用户被拒绝登入,
并且登入时口令都不让输
 2,userlist_deny=YES    
添加上面的选项,(YES是默认值)表示该文件时黑名单,不提示口令,NO为白名单

 3, userlist_file=/etc/vsftpd/users_list     此为默认值

例如: [root@centos6 pub]# cat /etc/vsftpd/user_list # vsftpd userlist # If userlist_deny=NO, only allow users in this file # If userlist_deny=YES (default), never allow users in this file, and # do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied. root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody

## 用户连接限制
分为最大并发限制,和IP最大同时发起的最大连接数

max_clients=10   表示最大并发连接数为10个  
max_per_ip=3    每个IP同时发起的最大连接数为3个
## 指定vsftpd服务用户运行身份,默认为nobody 。

当有人访问时就会开启一个以nobody用户运行的进程 nopriv_user=nobody

例如: [root@centos6 pub]# ps aux |grep ftp root 20629 0.0 0.0 52132 828 ? Ss 18:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 20923 0.0 0.1 54236 1436 ? Ss 20:15 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf nobody 20924 0.0 0.1 54248 1040 ? S 20:15 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

## 限制传输速度
    
"注意:是以字节为单位例如:1024000表示1M"
anon_max_rate=0     匿名用户的最大传输速率  
local_max_rate=0    本地用户的最大传输速率 
## 连接时间控制:秒为单位 

connect_timeout=60 主动模式数据连接超时时长   
accept_timeout=60  被动模式数据连接超时时长  
data_connection_timeout=300 数据连接无数据输超时时长  
idle_session_timeout=60 无命令操作超时时长 
## 文件传输方式:默认是二进制传输
加上下面的配置选项,会优先以文本方式传输 ,
"注意:如果是二进制程序的话也会以文本方式传输这样会导致二进制程序不能用,所以需谨慎使用"
ascii_upload_enable=YES 
ascii_download_enable=YES