第2讲 vsftpd服务器配置与管理
主要内容 Linux环境下的FTP服务器 RHEL4中vsftp的默认配置 常用vsftpd服务器的配置
1. Linux环境下的FTP服务器 常用FTP客户端和服务器 vsftpd服务器的特点 谁在使用vsftpd FTP用户
1.1 常用FTP客户端和服务器 Linux环境 Windows环境 FTP服务器 vsftpd IIS proftpd Serv-U wu-ftpd FTP客户端 ftp/ncftp/lftp命令行工具 ftp命令行工具 gftp CuteFTPpro 浏览器firefox 浏览器IE
1.2 vsftpd服务器的特点 安全、高速、稳定 可设定多个基于IP的虚拟FTP server 匿名FTP服务非常容易 不执行任何外部程序,从而减少了安全隐患 支持虚拟用户 支持带宽限制 支持inetd启动和独立FTP服务器两种运行方式
1.3 谁在使用vsftpd ftp.redhat.com ftp.suse.org ftp.debian.org ftp.gnu.org ftp.kde.org ftp.gnome.org ftp.openbsd.org
1.4 FTP用户 本地用户 虚拟用户 匿名用户 用户在FTP服务器上拥有账号,且该账号为为本地用户的账号 可以通过输入自己的账号和口令进行授权登录 登录目录为自己的home目录($HOME) 虚拟用户 用户在FTP服务器上拥有账号,但该账号只能用于文件传输服务 登录目录为某一指定的目录 通常可以上传和下载 匿名用户 用户在FTP服务器上没有账号 登录目录为/var/ftp
2. RHEL4中vsftp的默认配置 安装并启动vsftpd vsftpd的配置文件 vsftpd.conf的一些默认配置选项
2.1 安装并启动vsftpd 查看是否安装了vsftpd 启动vsftpd 检验vsftpd是否已启动 # rpm –qa | grep vsftpd 启动vsftpd # service vsftpd start 或者 # /etc/init.d/vsftpd start 检验vsftpd是否已启动 # pstree | grep vsftpd
2.2 vsftpd的配置文件 /etc/vsftpd/vsftpd.conf /etc/ vsftpd.ftpusers 主配置文件 /etc/ vsftpd.ftpusers 指定哪些用户不能访问FTP服务器 /etc/ vsftpd.user_list 当在/etc/ vsftpd/vsftpd.conf中设置了 userlist_enable=YES,且 userlist_deny=YES时, vsftpd.user_list中指定的用户不能访问FTP服务器。 当在/etc/ vsftpd/vsftpd.conf中设置了 userlist_enable=YES,且 userlist_deny=NO时,仅仅允许 vsftpd.user_list中指定的用户访问FTP服务器。
2.3 vsftpd.conf的一些默认配置选项(1) # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 允许匿名登录 anonymous_enable=YES 允许本地用户登录 local_enable=YES 开放本地用户的写权限 write_enable=YES 设置本地用户的文件生成掩码 local_umask=022
2.3 vsftpd.conf的一些默认配置选项(2) 当切换目录时,显示该目录下的.message隐含文件的内容 dirmessage_enable=YES 激活上传和下载日志 xferlog_enable=YES 启用FTP数据端口的连接请求 connect_from_port_20=YES 使用标准的ftpd xferlog日志格式 xferlog_std_format=YES 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d目录下 pam_service_name=vsftpd
2.3 vsftpd.conf的一些默认配置选项(3) 激活vsftpd检查userlist_file指定的用户是否可以访问vsftpd服务器 userlist_enable=YES userlist_file的默认值是/etc/ vsftpd.user_list文件。 由于默认情况下, userlist_deny=YES,所以/etc/vsftpd.user_list文件中所列的用户均不能访问此 vsftpd服务器。 使vsftpd处于独立启动模式 listen=YES 使用 tcp_wrappers作为主机的访问控制方式 Tcp_wrappers=YES
2.4 测试vsftpd的默认配置—匿名帐号 在匿名帐号的下载目录/var/ftp/pub目录下,存放一个测试文件 # echo “This is a test file” > /var/ftp/pub/test_file 生成目录信息文件/var/ftp/pub/.message # echo “Welcome to this Directory.” > /var/ftp/pub/.message 使用FTP客户端连接FTP服务器 下载test_file.txt ---- 成功 上传一个文件,例如/root/install.log ---- 失败 查看日志文件/var/log/vsftpd.log 需要打开配置选项xferlog_file=/var/log/vsftpd.log
2.5 测试vsftpd的默认配置—本地帐号 以本地帐号student测试vsftpd服务器 使用root不能登录vsftpd服务器 root用户被写在了/etc/vsftpd.ftpusers文件中
2.6 关于vsftpd默认配置的小结 允许匿名用户和本地用户登录。 匿名用户的登录名为ftp或anonymous。 匿名用户不能离开匿名服务器目录/var/ftp,且只能下载不能上传。 本地用户(vsftpd服务器)的登录名为本地用户名(FC3),口令为本地用户的口令(FC3)。 本地用户可以离开其home目录,切换到有权访问的其他目录,并且在权限允许的情况下进行上传和下载。 写在文件/etc/vsftpd.ftpusers中的本地用户禁止登录。
3. 常用vsftpd服务器的配置 允许匿名用户上传 配置基本的性能和安全选项 配置基于本地用户的访问控制 配置基于主机的访问控制 配置基于IP的虚拟FTP服务器 配置虚拟用户的FTP服务器
3.1 允许匿名用户上传(1) 创建匿名上传目录 修改上传目录的权限 在/etc/vsftpd/vsftpd.conf中激活如下配置选项 # mkdir / var/ftp/imcomming 修改上传目录的权限 # chmod 777 / var/ftp/imcomming 在/etc/vsftpd/vsftpd.conf中激活如下配置选项 允许匿名用户上传(选项write_enable需要为YES) anon_upload_enable=YES anon_umask=022 允许匿名用户创建目录(选项write_enable需要为YES) anon_mkdir_write_enable=YES 允许匿名用户进行写操作(如删除和重命名文件或目录) anon_other_write_enable=YES 匿名用户仅被允许下载对于它可读的文件 anon_world_readable_only=YES
3.1 允许匿名用户上传(2) 检查配置文件 重新启动vsftpd vsftpd /etc/vsftpd/vsftpd.conf # service vsftpd restart
3.2 配置基本的性能和安全选项(1) 设置空闲用户会话的中断时间(s) 设置空闲的数据连接的中断时间(s) 限制客户连接数 idle_session_timeout=600 设置空闲的数据连接的中断时间(s) data_connection_timeout=120 限制客户连接数 max_clients=200 max_per_ip=3 设置最大传输速率限制(B/s) local_max_rate=50000 anon_max_rate=30000
3.2 配置基本的性能和安全选项(2) 不允许某些用户切换到其home目录以外的其他目录 不允许所有用户切换到其home目录以外的其他目录 chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list /etc/vsftpd.chroot_list文件中指定的用户不能访问其home目录以外的其他目录 不允许所有用户切换到其home目录以外的其他目录 chroot_local_user=YES 仅允许某些用户切换到其home目录以外的其他目录 /etc/vsftpd.chroot_list文件中指定的用户能够访问其home目录外的其他目录
3.3 配置基于本地用户的访问控制 使选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户不能访问,而其他用户可以访问 userlist_enable=YES userlist_deny=YES 使选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户可以访问,而其他用户不可以访问 userlist_deny=NO
3.4 配置基于主机的访问控制(独立模式) (1) TCP_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制。 在hosts.allow可以使用DENY,通常使用它来实现访问控制。 对于vsftpd,hosts.allow中每条记录的语法格式如下 vsftpd: 主机表: setenv VSFTPD_LOAD_CONF 配置文件名
配置vsftpd访问控制时主机表的书写语法 选现值 含义 Hostname 可解析的主机名 IP Address 点分十进制表示的IP地址 .domain 匹配一个域中的所有主机 Network-number 匹配IP地址的开始部分,不管使用的网络掩码如何 IPAddress/netmask 定义要匹配的网络或子网
配置主机访问控制的例子(1) 要求 步骤 拒绝192.168.2.0/24访问 对域smartraining.com和192.168.1.0/24内的所有主机不作连接数和最大传输速率限制 对其他主机的访问控制限制每IP地址的连接数为1,最大传输速率限制为10kb/s 步骤 修改/etc/vsftpd/vsftpd.conf文件,设置如下选项 tcp_wrappers=YES (默认情况) local_max_rate=10000 anon_max_rate=10000 max_per_ip=1
配置主机访问控制的例子(2) 修改/etc/hosts.allow,加入如下配置选项 vsftpd: .smartraining.com, 192.168.1.0/24: setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd_tcp_wrap.conf vsftpd: 192.168.2.0/24: DENY 编辑/etc/vsftpd/vsftpd_tcp_wrap.conf local_max_rate=0 anon_max_rate=0 max_per_ip=0 重新启动vsftpd
3.5 配置vsftpd在非标准端口下提供服务 vsftpd必须工作在独立启动方式下,才能在非标准端口提供服务 例子:在10021端口提供服务 修改/etc/vsftpd/vsftpd.conf文件,添加如下一行 listen_port=10021 重启vsftpd服务
3.6 配置基于IP的虚拟FTP服务器(1) 配置虚拟IP地址 建立虚拟FTP的服务器目录并设置适当的权限 配置一个虚拟网络接口eth0:1 # ifconfig eth0:1 192.168.1.234 up 建立虚拟FTP的服务器目录并设置适当的权限 建立虚拟FTP的服务器目录 # mkdir –d /var/ftp2/pub # chmod 755 –R /var/ftp2 在下载目录下生成测试文件 # echo “hello” > /var/ftp2/pub/test_file.txt
3.6 配置基于IP的虚拟FTP服务器(2) 建立虚拟FTP服务器的主配置文件 创建虚拟服务器的匿名用户所映射的本地用户ftp2 # useradd –d /var/ftp2 –M ftp2 在/etc/vsftpd/vsftpd.conf中添加如下一行,将原FTP服务绑定到eth0接口 listen_address=192.168.1.222 建立虚拟FTP服务器的主配置文件 用备份的vsftpd的默认主配置文件生成虚拟FTP服务器的主配置文件 # cp /etc/vsftpd/vsftpd.conf.fc3 /etc/vsftpd/vsftpd_site2.conf
3.6 配置基于IP的虚拟FTP服务器(3) 重新启动vsftpd 修改虚拟FTP服务器的主配置文件,添加如下一行 listen_address=192.168.1.234 ftp_username=ftp2 ftpd_banner=This is the alternative FTP site 重新启动vsftpd # service vsftpd restart
测试:基于IP的虚拟FTP服务器(1)
测试:基于IP的虚拟FTP服务器(2)
3.7 配置虚拟用户的FTP服务器(1) 生成虚拟用户口令库文件 建立一个文本文件,存储虚拟用户名和口令 #cd /root #vi logins.txt login.txt文件的格式为:奇数行为用户名,偶数行为口令。 使用 db_load生成口令库文件 #db_load –T –t hash –f ~/logins.txt /etc/vsftpd_logins.db 修改口令库文件的权限 #chmod 600 /etc/vsftpd/vsftpd_logins.db
3.7 配置虚拟用户的FTP服务器(1) 生成虚拟用户口令库文件 建立一个文本文件,存储虚拟用户名和口令 #cd /root #vi logins.txt login.txt文件的格式为:奇数行为用户名,偶数行为口令 使用 db_load生成口令库文件 #db_load –T –t hash –f ~/logins.txt /etc/vsftpd/vsftpd_login.db 修改口令库文件的权限 # chmod 600 /etc/vsftpd/vsftpd_login.db
logins.txt
3.7 配置虚拟用户的FTP服务器(2) 配置生成vsftpd的认证文件 编辑生成虚拟用户所需的PAM配置文件 # vi /etc/pam.d/vsftp.vu 插入如下的两行 auth required /lib/security/pam_userdb.so db=/etc/ vsftpd/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
vsftp.vu
3.7 配置虚拟用户的FTP服务器(3) 建立虚拟用户所要访问的目录并设置相应权限 建立虚拟用户要访问的目录,并设置仅virutal用户访问的权限 # useradd –d /home/ftpsite virtual # chmod 700 /home/ftpsite 建立测试文件 # su – virtual –c “echo hello, I am virtual > /home/ftpsite/test_file”
3.7 配置虚拟用户的FTP服务器(4) 建立配置文件 由备份的配置文件/etc/vsftpd/vsftpd.conf.bak生成新的主配置文件 ––– 独立运行且匿名下载 # cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf 修改主配置文件,保证其中有下面的配置语句 anonymouns_enable=NO local_enable=YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO
3.7 配置虚拟用户的FTP服务器(5) 重新启动vsftpd chroot_local_user=YES listen=YES listen_port=10021 ftpd_banner=This FTP server is virtual user only. guest_enable=YES 启用虚拟用户 guest_username=virtual 将虚拟用户映射为本地virtual用户,这样虚拟用户登录后才能进入本地用户virtual的目录/home/ftpsite pam_service_name=vsftp.vu 指定PAM配置文件vsftp.vu 重新启动vsftpd # service vsftpd restart
虚拟用户时的vsftpd.conf
测试:虚拟用户
查看谁登陆了FTP,并杀死它的进程 ps –xf |grep ftp kill 进程号