| redhat 9.0下的vsftp如何配 |
| 我是在台湾的一家网站上偶尔发现的,我把繁体字转变为简体字,那个网站说,没有得到作者同意,不能转载,呵呵,但我还是转载了,LINUX崇尚自由嘛 3.2 VSFTP—安全与效能兼备的ftp 服务器 3.2.1 VSFTP 概述 FTP,file transfer protocol,这是档案传输的通讯协议,也是一般最常用来传送档案的方式。读者在使用RedHat9 的时候,可能会感受到ftp server 有一些改变:第一,就是ftp server 只剩下vsftp,原有的wuftp 等都没放入﹔第二,就是vsftp 从XINETD 中独立出来,并将设定档从/etc/vsftpd.conf 之中移到/etc/vsftpd/vsftpd.conf。 为什么做这样的改变?可以想见的是vsftp 已有独立运作的能力,不需要XINETD 来做更进一步的管控,并且类似sendmail、httpd、ssh、samba 等,将设定文件的放入/etc 下独立的目录。 FTP 分为两类,一种为PORT FTP,也就是一般的FTP﹔另一类是PASVFTP,分述如下: PORT FTP 这是一般形式的FTP,首先会建立控制频道,默认值是port 21,也就是跟 port 21 建立联机,并透过此联机下达指令。第二,由FTP server 端会建立数据 传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数据的 传输。 PASV FTP 跟PORT FTP 类似,首先会建立控制频道,默认值是port 21,也就是跟 port 21 建立联机,并透过此联机下达指令。第二,会由client 端做出数据传输 的请求,包括数据传输port 的数字。 这两者的差异为何?PORT FTP 当中的数据传输port 是由FTP server 指定, 而PASV FTP 的数据传输port 是由FTP client 决定。通常我们使用PASV FTP, 是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。 3.2.2 范例 3.2.1. 直接启动VSFTP 服务 这个范例是套用RedHat 的预设范例,直接启动vsftp。 [root@relay vsftpd]# /sbin/service vsftpd start Starting vsftpd for vsftpd: OK ] 3.2.2. 更换port 提供服务:将预设的port 21 更换为2121 为了安全,或是以port 来区隔不同的ftp 服务,我们可能会将ftp port 改为 21 之外的port,那么,可参考以下步骤。 Step1. 修改/etc/vsftpd/vsftpd.conf 新增底下一行 listen_port=2121 Step2. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 3.2.3. 特定使用者peter、john 不得变更目录 使用者的预设目录为/home/username,若是我们不希望使用者在ftp 时能够 切换到上一层目录/home,则可参考以下步骤。 Step1. 修改/etc/vsftpd/vsftpd.conf 将底下三行 #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd.chroot_list 改为 chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list Step2. 新增一个档案: /etc/vsftpd/chroot_list 内容增加两行: peter john Step3. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 若是peter 欲切换到根目录以外的目录,则会出现以下警告: ftp> cd /home 550 Failed to change directory. 3.2.4. 取消anonymous 登入 若是读者的主机不希望使用者匿名登入,则可参考以下步骤。 Step1. 修改/etc/vsftpd/vsftpd.conf 将 anonymous_enable=YES 改为 anonymous_enable=NO Step2. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 3.2.5. 安排欢迎话语 若是我们希望使用者在登入时,能够看到欢迎话语,可能包括对该主机的 说明,或是目录的介绍,可参考以下步骤。 首先确定在/etc/vsftpd/vsftpd.conf 当中是否有底下这一行 dirmessage_enable=YES RedHat9 的默认值是有上面这行的。 接着,在各目录之中,新增名为.message 的档案,再这边假设有一个使用 者test1,且此使用者的根目录下有个目录名为abc,那首先我们在/home/test1 之下新增.message,内容如下: Hello~ Welcome to the home directory This is for test only... 接着,在/home/test1/abc 的目录下新增.message,内容如下: Welcome to abc's directory This is subdir... 那么,当使用者test1 登入时,会看到以下讯息: 230- Hello~ Welcome to the home directory 230- 230- This is for test only... 230- 若是切换到abc 的目录,则会出现以下讯息: 250- Welcome to abc's directory 250- 250- This is subdir ... 3.2.6. 对于每一个联机,以独立的process 来运作 一般启动vsftp 时,我们只会看到一个名为vsftpd 的process 在运作,但若 是读者希望每一个联机,都能以独立的process 来呈现,则可执行以下步骤。 Step1. 修改/etc/vsftpd/vsftpd.conf 新增底下一行 setproctitle_enable=YES Step2. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 使用ps -ef 的指令,可以看告不同使用者联机的情形,如下图所示: [root@home vsftpd]# ps -ef|grep ftp root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244: connected test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1: IDLE nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244: connected test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2: IDLE root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp [root@home vsftpd]# 3.2.7. 限制传输档案的速度:本机的使用者最高速度为200KBytes/s,匿名登入 者所能使用的最高速度为50KBytes/s Step1. 修改/etc/vsftpd/vsftpd.conf 新增底下两行 anon_max_rate=50000 local_max_rate=200000 Step2. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 在这边速度的单位为Bytes/s,其中anon_max_rate 所限制的是匿名登入的 使用者,而local_max_rate 所限制的是本机的使用者。VSFTPD 对于速度的限 制,范围大概在80%到120%之间,也就是我们限制最高速度为100KBytes/s, 但实际的速度可能在80KBytes/s 到120KBytes/s 之间,当然,若是频宽不足 时,数值会低于此限制。 3.2.8. 针对不同的使用者限制不同的速度:假设test1 所能使用的最高速度为 250KBytes/s,test2 所能使用的最高速度为500KBytes/s。 Step1. 修改/etc/vsftpd/vsftpd.conf 新增底下一行 user_config_dir=/etc/vsftpd/userconf Step2. 新增一个目录:/etc/vsftpd/userconf mkdir /etc/vsftpd/userconf Step3. 在/etc/vsftpd/userconf 之下新增一个名为test1 的档案 内容增加一行: local_max_rate=250000 Step4. 在/etc/vsftpd/userconf 之下新增一个名为test2 的档案 内容增加一行: local_max_rate=500000 Step5. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 3.2.9-1. 建置一个防火墙下的ftp server,使用PORT FTP mode:预设的ftp port:21 以及ftp data port:20 启动VSFTPD 之后执行以下两行指令,只允许port 21 以及port 20 开放, 其它关闭。 iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset 3.2.9-2. 建置一个防火墙下的ftp server,使用PORT FTP mode:ftp port:2121 以及ftp data port:2020 Step1. 执行以下两行指令,只允许port 2121 以及port 2020 开放,其它关闭。 iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset Step2. 修改/etc/vsftpd/vsftpd.conf 新增底下两行 listen_port=2121 ftp_data_port=2020 Step3. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 在这边要注意,8、9 两个例子中,ftp client(如cuteftp)的联机方式不能 够选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp server,但是执行ls、get 等等的指令时,便无法运作。 3.2.10. 建置一个防火墙下的ftp server,使用PASS FTP mode:ftp port:2121 以及ftp data port 从9981 到9986。 Step1. 执行以下两行指令,只允许port 2121 以及port 9981-9990 开放,其它关 闭。 iptables -A INPUT -p tcp -m multiport --dport 2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset Step2. 修改/etc/vsftpd/vsftpd.conf 新增底下四行 listen_port=2121 pasv_enable=YES pasv_min_port=9981 pasv_max_port=9986 Step3. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] 在这边要注意,在10 这个例子中,ftp client(如cuteftp)的联机方式必须 选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp server,但是执行ls,get 等等的指令时,便无法运作。 8.2.11. 将vsftpd 与TCP_wrapper 结合 若是读者希望直接在/etc/hosts.allow 之中定义允许或是拒绝的来源地址, 可执行以下步骤。这是简易的防火墙设定。 Step1. 确定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的设定为YES,如下图所 示: tcp_wrappers=YES 这是RedHat9 的默认值,基本上不需修改。 Step2. 重新启动vsftpd [root@home vsftpd]# /sbin/service vsftpd restart Shutting down vsftpd: OK ] Starting vsftpd for vsftpd: OK ] Step3. 设定/etc/hosts.allow,譬如提供111.22.33.4 以及10.1.1.1 到10.1.1.254 连 线,则可做下图之设定: vsftpd : 111.22.33.4 10.1.1. : allow ALL : ALL : DENY 8.2.12. 将vsftpd 并入XINETD 若是读者希望将vsftpd 并入XINETD 之中,也就是7.x 版的预设设定,那 么读者可以执行以下步骤。 Step1. 修改/etc/vsftpd/vsftpd.conf 将 listen=YES 改为 listen=NO Step2. 新增一个档案: /etc/xinetd.d/vsftpd 内容如下: service vsftpd { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd port = 21 log_on_success += PID HOST DURATION log_on_failure += HOST } Step3. 重新启动xinetd [root@home vsftpd]# /sbin/service xinetd restart Stopping xinetd: OK ] Starting xinetd: OK ] 3.2.3 设定档说明 在范例中,有些省略的设定可以在这边找到,譬如联机的总数、同一个位 址的联机数、显示档案拥有者的名称等等,希望读者细读后,可以做出最适合 自己的设定。 格式 vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行, 将会被忽略。内容的格式只有一种,如下所示 option=value 要注意的是,等号两边不能加空白,不然是不正确的设定。 ===ascii 设定===================== ascii_download_enable 管控是否可用ASCII 模式下载。默认值为NO。 ascii_upload_enable 管控是否可用ASCII 模式上传。默认值为NO。 ===个别使用者设定=================== chroot_list_enable 如果启动这项功能,则所有的本机使用者登入均可进到根目录之外的数据夹,除了列 在/etc/vsftpd.chroot_list 之中的使用者之外。默认值为NO。 userlist_enable 用法:YES/NO 若是启动此功能,则会读取/etc/vsftpd.user_list 当中的使用者名称。此项功能可以在询 问密码前就出现失败讯息,而不需要检验密码的程序。默认值为关闭。 userlist_deny 用法:YES/NO 这个选项只有在userlist_enable 启动时才会被检验。如果将这个选项设为YES,则在 /etc/vsftpd.user_list 中的使用者将无法登入﹔ 若设为NO , 则只有在 /etc/vsftpd.user_list 中的使用者才能登入。而且此项功能可以在询问密码前就出现错误 讯息,而不需要检验密码的程序。 user_config_dir 定义个别使用者设定文件所在的目录,例如定义user_config_dir=/etc/vsftpd/userconf, 且主机上有使用者test1,test2,那我们可以在user_config_dir 的目录新增文件名为 test1 以及test2。若是test1 登入,则会读取user_config_dir 下的test1 这个档案内的设 定。默认值为无。 ===欢迎语设定===================== dirmessage_enable 如果启动这个选项,使用者第一次进入一个目录时,会检查该目录下是否有.message 这个档案,若是有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对 该目录的说明。默认值为开启。 banner_file 当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值 为无。 ftpd_banner 这边可定义欢迎话语的字符串,相较于banner_file 是档案的形式,而ftpd_banner 是字 串的格式。预设为无。 ===特殊安全设定==================== chroot_local_user 如果设定为YES,那么所有的本机的使用者都可以切换到根目录以外的数据夹。预设 值为NO。 hide_ids 如果启动这项功能,所有档案的拥有者与群组都为ftp,也就是使用者登入使用ls -al 之类的指令,所看到的档案拥有者跟群组均为ftp。默认值为关闭。 ls_recurse_enable 若是启动此功能,则允许登入者使用ls -R 这个指令。默认值为NO。 write_enable 用法:YES/NO
本文关键:用vsftp架设ftp
|