/article/2017/06/11/vsftp-config-guide/
vsftp配置指南
- 【分类】Linux
- 【发布】2017-06-11 10:15
- 【更新】2017-06-11 10:15
vsftpd
vsftpd提供linux的ftp服务。 vsftpd较为安全但相对其他ftp服务功能较少。
功能
- vsftpd服务的启动者身份为一般用户,对Linux系统的权限较低。
- vsftpd利用chroot()这个函数进行改换根目录的动作,使得系统工具不会被vsftpd这支服务所误用。 任何需要具有较高执行权限的vsftpd指令均以一支特殊的上层程序所控制,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux本身的系统为准。
- 绝大部分ftp会使用到的额外指令功能(dir, ls, cd …)都已经被整合到vsftpd主程序当中了,因此理论上vsftpd不需要使用到额外的系统提供的指令,所以在chroot的情况下,vsftpd不但可以顺利运作,且不需要额外功能对于系统来说也比较安全。
- 所有来自客户端且想要使用上层程序(也是使用chroot功能的程序)所提供的较高执行权限的vsftpd指令的需求,均被视为不可信任的要求来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown,Login的要求等等动作。
安装
yum安装
yum install vsftpd -y
apt安装
apt-get install vsftpd -y
vsftpd包结构
- /etc/vsftpd/vsftpd.conf vsftpd主配置文件(配置方式是参数=设定值)
- /etc/pam.d/vsftpd vsftpd使用PAM模块时的相关配置文件。
服务管理
# Centos /etc/init.d/vsftpd {start|stop|restart|try-restart|force-reload|status}
服务配置
1. 服务器环境的配置
配置 /etc/vsftpd/vsftpd.conf
################## # 服务器环境配置 # ################## # 以后台进程启动(standalone),默认YES。 background=YES # 监听端口,以standalone模式启动生效。 listen=YES # vsftpd命令通道连接端口,记得防火墙设置。 listen_port=21 # standalone下,同一时间最大client连接数,0不限制,默认2000。 max_clients=0 # standalone下,同一个IP同一时间允许的最大连接数。 max_per_ip=0 # 用户连接后超时无命令动作强制断线时间(s) idle_session_timeout=300 # 已建立的连接,在该时间(s)内无法完成数据传输,则被强制断开。 data_connection_timeout=300 # YES则允许FTP主动连接模式,默认NO。 connect_from_port_20=NO # 主动连接模式,服务器发出连接超时后未响应强制断线时间(s) connect_timeout=60 # 设置YES则支持ftp被动连接模式(passive mode),默认YES。 pasv_enable=YES # 被动连接模式使用的端口范围(默认0使用任何端口) # 记得限制端口号范围,开启防火墙。 pasv_min_port=0 pasv_max_port=0 # PASV模式下,等待client超时无回应强制断线时间(s) accept_timeout=60 # 用户连接ftp时,ftp客户端上显示的说明信息。 #ftpd_banner=welcome to ftp !! # 用户连接ftp时,把文件内容在ftp客户端上显示,如果开启则文件必须存在。 #banner_file=/etc/login_info # 当用户进入某个目录时,会显示该目录中message_file配置的文件内容。 dirmessage_enable=YES message_file=.message # (链接使用子进程管理)每个连接都使用单独process负责,一般不配置.默认不启用(NO) #one_process_model=NO # 支持TCP Wrappers(既/etc/hosts.allow|/etc/hosts.deny控制) tcp_wrappers=YES # 使用本地时间。(vsftp默认使用GMT时间) use_localtime=YES # YES: client就优先使用ASCII格式下载文件,默认NO。 #ascii_download_enable=YES # YES: client就优先使用ASCII格式上传文件,默认NO。 #ascii_upload_enable=YES # vsftpd 服务启动用户,默认使用nobody nopriv_user=nobody # 必须配置支持PAM模块管理,pam模块名称, 就是/etc/pam.d/vsftpd pam_service_name=vsftpd # 启用日志,设置为YES时,客户端上传/下载文件都会被纪录。(默认NO) xferlog_enable=YES # 为YES则启用xferlog的wu-ftpd的日志格式记录日志,使用xferlog_file # 为NO则使用vsftpd的日志格式记录日志(默认NO),使用vsftpd_log_file xferlog_std_format=YES # 使用xferlog的wu-ftpd日志格式的写文件路径。 xferlog_file=/var/log/xferlog # 使用vsftpd的日志格式记录日志的写文件路径。 vsftpd_log_file=/var/log/vsftpd.log # 同时启用两种日志格式(vsftp日志格式和xferlog的wu-ftp日志),默认NO。 #dual_log_enable=YES # 在上传文件时,创建文件的可执行权限umask,默认0666 file_open_mode=0666 # 限制用户使用ftp的命令(这里禁止删除命令) cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,SIZE,STOR,TYPE,USER,REST,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,FEAT
2. 匿名账号登录配置
配置 /etc/vsftpd/vsftpd.conf
#################### # 匿名账号登录配置 # #################### # 匿名账号也是虚拟用户,账号名就是anonymous,权限也依赖guest_username配置。 # 设置允许匿名账号(anonymous)登录vsftpd,默认YES anonymous_enable=NO # 允许anonymous账号的读取和下载文件的权限,默认YES。 anon_world_readable_only=YES # 设置anonymous账号对vsftp上的文件写权限,默认NO。 anon_other_write_enable=NO # 设置anonymous账号在vsftp上创建目录的权限,默认NO。 anon_mkdir_write_enable=NO # 设置anonymous账号的上传数据权限,默认NO。 anon_upload_enable=NO # 限制anonymous上传文件的权限(077则anonymous上传的文件权限是-rw—--—---) anon_umask=077 # 限制anonymous的传输速度,单位为bytes/秒,0则不限制(默认)。 # 如果想让anonymous仅有30KB/s的速度,设定anon_max_rate=30000 anon_max_rate=0 # 设置YES则anonymous登录vsftp时需要输入密码(登录时会检查输入的emai),默认NO。 #no_anon_password=YES # anonymous登录vsftp时,会要求输入email地址做密码,启用该项可禁止某些email的登录,默认NO。 #deny_email_enable=YES # 启用限制登录vsftp的email列表文件,文件内每个email一行,启用email限制后此文件必须存在。 #banned_email_file=/etc/vsftpd/banned_emails
3. 实体用户登录配置
配置 /etc/vsftpd/vsftpd.conf
#################### # 实体用户登录配置 # #################### # 设置为YES,在/etc/passwd内的账号(或PAM配置的)才能以实体用户的方式登入vsftpd。 # 针对实体用户和虚拟用户,这个值必须开启。 local_enable=YES # 启用chroot功能,限制登录的账号根目录在自己家目录,(默认NO) chroot_local_user=YES # 启用chroot后,chroot_list_enable配置为YES则/etc/vsftpd/chroot_list列表为不被限制的账号; # 启用chroot后,chroot_list_enable为NO则/etc/vsftpd/chroot_list为需要被chroot的账号(默认)。 chroot_list_enable=YES # 启用chroot后,chroot_list_file是针对chroot_list_enable设置的账号列表文件,即使没有任何账号,此文件也要存在。 chroot_list_file=/etc/vsftpd/chroot_list # 是否启用账号登录访问控制,默认NO。 userlist_enable=YES # 启用userlist时,此选项为YES则userlist_file中的账号不允许登录vsftp服务器,(默认项)。 # 启用userlist时,此选项为NO则userlist_file中的账号为允许登录vsftp服务器。 userlist_deny=YES userlist_file=/etc/vsftpd/user_list # YES则允许实体用户和虚拟用户下载数据,默认YES。 download_enable=YES # YES则允许实体用户和虚拟用户上传数据(包括目录和文件),默认NO #write_enable=YES # 实体用户和虚拟用户创建新目录(755)与文件(644)的权限 local_umask=022 # 实体用户的传输速度限制,单位为bytes/second,0为不限制。 local_max_rate=0
4. 虚拟用户登录配置
(1)配置 /etc/vsftpd/vsftpd.conf
#################### # 虚拟用户登录配置 # #################### # 该值设置为YES时,任何实体账号都会被当成虚拟用户,权限也依赖虚拟用户的配置(所以默认是NO)。 guest_enable=NO # guest_enable为YES时生效,指定虚拟用户的身份(虚拟用户的宿主用户)。 guest_username=ftp # 配置YES,则虚拟用户使用本地用户的权限;配置NO,虚拟用户使用匿名用户的权限,默认NO。 # 启用虚拟用户后,实体账号默认都被当成虚拟用户并且被chroot,开启该项能让实体用户恢复实体用权限, # 但无论如何,在vsftpd服务器上进行实际操作的用户名任然是guest_username所配置的用户。 # 不过还是建议配置为NO,特殊用户权限可以使用虚拟账号自身配置文件配置。 virtual_use_local_privs=NO # 虚拟用户的配置文件的主目录(目录自己创建),该目录下存放虚拟用户的个人配置。 # 每个用户的配置一个文件,配置文件名=虚拟用户名。 user_config_dir=/etc/vsftpd/account_conf
(2)配置PAM认证(根据主配置文件中pam_service_name的配置)。
修改 /etc/pam.d/vsftpd 注释掉所有参数,在最后面加入下面两行:
auth required pam_userdb.so db=/etc/vsftpd/account account required pam_userdb.so db=/etc/vsftpd/account
注意:配置PAM认证数据库后,实体账号也无法直接登录vsftp,也需要在认证数据中添加账号才能登录。
(3)生成用户认证数据库 /etc/vsftpd/account.db
生成数据库使用的工具是Berkeley DB工具,安装包是:
# yum 安装
yum install db4 db4-utils
生成数据库需要用户密码文本,添加虚拟用户名和密码,奇数行为用户名,偶数行为密码。
/etc/vsftpd/account.txt
user1 password1 user2 password2
根据用户密码文本最终生成用户认证数据库:
# 生成vsftp用户名和密码认证数据库 # 每次修改用户和密码信息都必须,用该命令重载一次数据库。 db_load -T -t hash -f /etc/vsftpd/account.txt /etc/vsftpd/account.db
(4)虚拟用户个人vsftp权限配置方式(根据主配置文件中user_config_dir的配置)。
在 /etc/vsftpd/account_conf/ 目录下创建虚拟用户配置文件:
每个用户的配置为一个文件,配置文件名为虚拟用户名,配置内容根据情况选择:
# 虚拟用户的根目录,需要预先建立并赋予相应权限 local_root=/data/user1 # 配置YES,则虚拟用户使用本地用户的权限;配置NO,虚拟用户使用匿名用户的权限。 virtual_use_local_privs=NO # 匿名权限,YES则允许读取和下载文件的权限。 anon_world_readable_only=YES # 匿名权限,YES则允许文件/目录写权限(删除、重命名)。 anon_other_write_enable=NO # 匿名权限,YES则允许创建目录。 anon_mkdir_write_enable=NO # 匿名权限,YES则允许上传数据。 anon_upload_enable=NO # 匿名权限,限制上传文件的权限掩码(drwx------/-rw-------) anon_umask=077 # 匿名权限,限制传输速度,单位为bytes/秒,0则不限制。 anon_max_rate=0 # 虚拟用户权限,YES则允许实体用户和虚拟用户下载数据。 download_enable=YES # 虚拟用户权限,YES则允许上传数据(包括目录和文件) write_enable=YES # 虚拟用户权限,限制创建新目录(755)与文件(644)的权限 local_umask=022 # 虚拟用户权限,传输速度限制,单位为bytes/second,0为不限制。 local_max_rate=0 # 其他vsftpd中用户相关的配置也可以使用,例如: idle_session_timeout=0
针对用户使用命令的权限管理
在vsftpd.conf中存在两个对用户使用ftp命令的限制:
- cmds_allowed
- cmds_deny
cmds_deny优先级高于cmds_allowed,两个配置同一个命令时,以cmds_deny生效。
这两个命令也都可以应用于虚拟用户个人的权限配置文件。
参数说明:
http://fity.cn/post/317.html
http://itchentao.blog.51cto.com/5168625/1563813
参考资料
- http://blog.csdn.net/wave_1102/article/details/50651433
- http://www.huzs.net/?p=1213#server_real_chroot