既然说 FTP 真的很危险,那么不要开启也罢!不过,偏偏很多时候我们又得使用到 FTP 的功能。这个时候选择一个比较安全的 FTP 服务器软件就很重要啦!除了 proftpd 可以取代 Wu FTP 之外,另一个蛮安全的 vsftpd 也可以用来取代喔!这个章节我们就来谈一谈 vsftpd 的设定吧! |
[root@test
root]# vi /etc/pam.d/vsftpd
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed auth required pam_stack.so service=system-auth auth required pam_shells.so account required pam_stack.so service=system-auth session required pam_stack.so service=system-auth |
关于主机的设定值
connect_from_port_20=YES (NO) 还记得 wu ftp 那篇文章提到的,关于主动联机的 ftp-data 吗? 这个设定项目在启动主动联机的 port 20 咯! listen_port=21 使用的 vsftpd 命令通道的 port number 设定,如果您想要使用非 正规的 ftp port,在这个设定项目修改吧! dirmessage_enable=YES (NO) 当使用者进入某个目录时,会显示该目录需要注意的内容,显示的 档案预设是 .message ,当然,可以使用底下的设定项目来修订! message_file=.message 当 dirmessage_enable=YES 时,可以设定这个项目来让 vsftpd 寻找该档案来显示讯息!您也可以设定其它档名喔! listen=YES (NO) 若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的! pasv_enable=YES (NO) 启动被动式联机(passive mode),一定要设定为 YES 的啦! use_localtime=YES (NO) 是否使用主机的时间?!预设使用 GMT 时间(格林威治),会比台湾 时间晚 8 小时,一般来说,建议设定为 YES 吧! write_enable=YES (NO) 是否允许使用者具有写入的权限?!这包括删除与修改等功能喔! connect_timeout=60 单位是秒,如果 client 尝试连接我们的 vsftpd 命令通道超过 60 秒, 则不等待,强制断线咯。 accept_timeout=60 当使用者以被动式 PASV 来进行数据传输时,如果主机启用 passive port 并等待 client 超过60 秒,那么就给他强制断线!您可以修改 60 这个数值。 data_connection_timeout=300 如果 client 与 Server 间的数据传送在 300 秒内都无法传送成功, 那 Client 的联机就会被我们的 vsftpd 强制剔除! idle_session_timeout=300 如果使用者在 300 秒内都没有命令动作,强制离线! max_clients=0 如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定 同一时间,最多有多少 client 可以同时连上 vsftpd 哩!? max_per_ip=0 与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少联机? pasv_max_port=0 pasv_min_port=0 上面两个是与 passive mode 使用的 port number 有关,如果您想要使用 65400 到 65410 这 11 个 port 来进行被动式资料的连接,可以这样设定 pasv_max_port=65410 以及 pasv_min_port=65400 ftpd_banner=一些文字说明 当使用者无法顺利连上我们的主机,例如联机数量已经超过 max_clients 的设定了,那么 client 的画面就会显示『一些文字说明』的字样,您可以修改 关于实体用户登入者的设定值 guest_enable=YES (NO) 若这个值设定为 YES 时,那么任何非 anonymous 登入的账号,均会被 假设成为 guest (访客) 喔! local_enable=YES (NO) 这个设定值必须要为 YES 时,在 /etc/passwd 内的账号才能以 实体用户的方式登入我们的 vsftpd 主机喔! local_max_rate=0 实体用户的传输速度限制,单位为 bytes/second, 0 为不限制。 chroot_local_user=YES (NO) 将使用者限制在自己的家目录之内(chroot)!这个设定在 vsftpd 当中预设是 NO,因为有底下两个设定项目的辅助喔! 所以不需要启动他! chroot_list_enable=YES (NO) 是否启用将某些实体用户限制在他们的家目录内?!预设是 NO , 不过,如果您想要让某些使用者无法离开他们的家目录时, 可以考虑将这个设定为 YES ,并且规划下个设定值 chroot_list_file=/etc/vsftpd.chroot_list 如果 chroot_list_enable=YES 那么就可以设定这个项目了!他里面可以规定 那一个实体用户会被限制在自己的家目录内而无法离开!(chroot) 一行一个账号即可! userlist_deny=YES (NO) 若此设定值为 YES 时,则当使用者账号被列入到某个档案时,在该档案内 的使用者将无法登入 vsftpd 服务器!该档案文件名与下列设定项目有关。 userlist_file=/etc/vsftpd.user_list 若上面 userlist_deny=YES 时,则这个档案就有用处了!在这个档案内的 账号都无法使用 vsftpd 喔! 关于匿名者登入的设定值 anonymous_enable=YES (NO) 设定为允许 anonymous 登入我们的 vsftpd 主机!预设是 YES ,底下的所有 相关设定都需要将这个设定为 anonymous_enable=YES 之后才会生效! anon_world_readable_only=YES (NO) 仅允许 anonymous 具有下载可读档案的权限,预设是 YES。 anon_other_write_enable=YES (NO) 是否允许 anonymous 具有写入的权限?预设是 NO!如果要设定为 YES, 那么开放给 anonymous 写入的目录亦需要调整权限,让 vsftpd 的 PID 拥有者可以写入才行! anon_mkdir_write_enable=YES (NO) 是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES ! anon_upload_enable=YES (NO) 是否让 anonymous 具有上传数据的功能,预设是 NO,如果要设定为 YES , 则 anon_other_write_enable=YES 必须设定。 deny_email_enable=YES (NO) 将某些特殊的 email address 抵挡住,不让那些 anonymous 登入! 如果以 anonymous 登入主机时,不是会要求输入密码吗?密码不是要您 输入您的 email address 吗?如果你很讨厌某些 email address , 就可以使用这个设定来将他取消登入的权限!需与下个设定项目配合: banned_email_file=/etc/vsftpd.banned_emails 如果 deny_email_enable=YES 时,可以利用这个设定项目来规定那个 email address 不可登入我们的 vsftpd 喔!在上面设定的档案内, 一行输入一个 email address 即可! no_anon_password=YES (NO) 当设定为 YES 时,表示 anonymous 将会略过密码检验步骤, 而直接进入 vsftpd 服务器内喔!所以一般预设都是 NO 的! anon_max_rate=0 这个设定值后面接的数值单位为 bytes/秒 ,限制 anonymous 的传输速度, 如果是 0 则不限制(由最大频宽所限制),如果您想让 anonymous 仅有 30 KB/s 的速度,可以设定『anon_max_rate=30000』 anon_umask=077 限制 anonymous 的权限!如果是 077 则 anonymous 传送过来的档案 权限会是 -rw------- 喔! 关于系统安全的设定值: ascii_download_enable=YES (NO) 如果设定为 YES ,那么 client 就可以使用 ASCII 格式下载档案。 一般来说,由于启动了这个设定项目可能会导致 DoS 的攻击,因此预设是NO。 ascii_upload_enable=YES (NO) 与上一个设定类似的,只是这个设定针对上传而言!预设是 NO。 async_abor_enable=YES (NO) 如果您的 FTP client 会下达 "async ABOR" 这个指令时,这个设定才需要启用 一般来说,由于这个设定并不安全,所以通常都是将他取消的! check_shell=YES (NO) 如果您想让拥有任何奇怪的 shell 的使用者(在 /etc/passwd 的 shell 字段) 可以使用 vsftpd 的话,这个设定可以设定为 NO 喔! one_process_model=YES (NO) 这个设定项目比较危险一点~当设定为 YES 时,表示每个建立的联机 都会拥有一支 process 在负责,可以增加 vsftpd 的效能。不过, 除非您的系统比较安全,而且硬件配备比较高,否则容易耗尽系统资源喔! 一般建议设定为 NO 的啦! tcp_wrappers=YES (NO) 当然我们都习惯支持 TCP Wrappers 的啦!所以设定为 YES 吧! xferlog_enable=YES (NO) 当设定为 YES 时,使用者上传与下载档案都会被纪录起来。记录档案 与下一个设定项目有关: xferlog_file=/var/log/vsftpd.log 如果上一个 xferlog_enable=YES 的话,这里就可以设定了! 这个是登录档的档名啦! xferlog_std_format=YES (NO) 是否设定为 wu ftp 相同的登录档格式?!预设为 NO ,因为登录档会比较容易读! 不过,如果您有使用 wu ftp 登录文件的分析软件,这里才需要设定为 YES nopriv_user=nobody 我们的 vsftpd 预设以 nobody 作为此一服务执行者的权限。因为 nobody 的权限 相当的低,因此即使被入侵,入侵者仅能取得 nobody 的权限喔! pam_service_name=vsftpd 这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个咚咚! |
[root@test
root]# vi /etc/xinetd.d/vsftpd
service ftp { socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd server_args = /etc/vsftpd.conf # 上面这个请依照您的主机环境来设定!尤其是 server_args 请设定您的 # vsftpd.conf 所在目录的完整文件名(含目录名称)! log_on_success += DURATION USERID log_on_failure += USERID nice = 10 disable = no } [root@test root]# vi /etc/vsftpd/vsftpd.conf # (或 /etc/vsftpd.conf) # 关于主机与安全性的设定 use_localtime=YES dirmessage_enable=YES connect_from_port_20=YES xferlog_enable=YES xferlog_std_format=YES pam_service_name=vsftpd tcp_wrappers=YES # 关于 anonymous 的设定 anonymous_enable=YES # 关于 real user 的设定 local_enable=YES write_enable=YES local_umask=022 userlist_enable=YES # 以上设定值的意义请往前翻到 vsftpd.conf 设定值的意义 章节去察看! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 基础设定档
[root@test root]# vi /etc/vsftpd/vsftpd.conf (或 /etc/vsftpd.conf) # 关于主机与安全性的设定 use_localtime=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES pam_service_name=vsftpd tcp_wrappers=YES # 关于 anonymous 的设定 anonymous_enable=NO # 关于 Real User 的设定 local_enable=YES write_enable=YES local_umask=022 chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list userlist_deny=YES userlist_file=/etc/vsftpd.user_list local_max_rate=100000 # 以上设定值的意义请往前翻到 vsftpd.conf 设定值的意义 章节去察看! 2. 限制实体用户在自己的家目录内 (chroot) 的设定档 [root@test root]# vi /etc/vsftpd.chroot_list badbird nogoodbird # 没有写到这个档案内的其它用户,就可以离开自己的家目录, # 而到其它目录里面去浏览了! 3. 以 PAM 模块限制某些账号无法登入主机的设定: [root@test root]# vi /etc/pam.d/vsftpd # 会发现这样的字句: auth ..... file=/etc/vsftpd.ftpusers .... # 那个 file=.. 后面接的文件名就是以 PAM 模块抵挡的账号内容了! [root@test root]# vi /etc/vsftpd.ftpusers # 底下列出的账号将无法使用 vsftpd 喔!与 wu ftp 的 /etc/ftpusers 相同功能 root bin daemon adm lp sync shutdown halt news uucp operator games nobody 4. 以 userlist_file 抵挡某些账号的登入: # 事实上,这个功能与上面的 PAM 功能相似啦!只是 PAM 是外挂的,而 # 这个设定是 vsftpd 预设提供的就是了! [root@test root]# vi /etc/vsftpd.user_list # 这个档案的设定与上面 /etc/vsftpd.ftpusers 相同即可! root bin daemon adm lp sync shutdown halt news uucp operator games nobody 5. 设定进入目录时,显示的讯息: [root@test root]# vi /home/.message 一般使用者家目录 6. 重新启动 xinetd 啰! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 基础设定档
[root@test root]# vi /etc/vsftpd/vsftpd.conf (或 /etc/vsftpd.conf) # 与主机与安全性有关的设定 use_localtime=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log data_connection_timeout=60 idle_session_timeout=600 max_clients=50 max_per_ip=5 ascii_upload_enable=NO ascii_download_enable=NO connect_from_port_20=YES pasv_min_port=65400 pasv_max_port=65420 pam_service_name=vsftpd tcp_wrappers=YES nopriv_user=ftp # 关于 anonymous 的设定 anonymous_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_upload_enable=YES deny_email_enable=YES banned_email_file=/etc/vsftpd.banned_emails anon_max_rate=30000 # 关于 real user 的设定 local_enable=NO # 以上设定值的意义请往前翻到 vsftpd.conf 设定值的意义 章节去察看! 2. 建立抵挡不当 email address 的档案 [root@test root]# vi /etc/vsftpd.banned_emails linux.vbird.org # 一行写一个 email 名称喔! 3. 建立可以上传的目录! # 因为我们的 nopriv_user 设定为 ftp ,所以上传的目录拥有者为 ftp 喔 [root@test root]# mkdir -p /var/ftp/upload [root@test root]# chown ftp /var/ftp/upload 4. 重新启动 xinetd 啰! [root@test root]# /etc/rc.d/init.d/xinetd restart |
Client 端并没有什么好设定的地方,主要就是 ftp 的使用了,请参考 wu FTP 主机设定一节!
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 21 -j ACCEPT |
[root@test
root]# vi /etc/hosts.deny
vsftpd: 192.168.1.2 |
[root@test
root]# vi /etc/xinetd.d/vsftpd
# vsftpd is the secure FTP server. service ftp { disable = no socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd server_args = /etc/vsftpd.conf # 上面这个 server 的设定请依照您的主机环境来设定! # 至于 server_args 则请写入您的 vsftpd 的设定档完整档名即可! per_source = 5 # 与同一 IP 的联机数目有关 instances = 200 # 同一时间最多的联机数目 no_access = 192.168.1.3 banner_fail = /etc/vsftpd.busy_banner # 上面这个档案就是当主机忙碌中,则在 Client 端显示的内容! log_on_success += PID HOST DURATION log_on_failure += HOST } [root@test root]# vi /etc/vsftpd.busy.banner 421 很抱歉,服务器忙碌中! [root@test root]# /etc/rc.d/init.d/xinetd restart |