Chinaunix首页 | 论坛 | 博客
  • 博客访问: 250635
  • 博文数量: 71
  • 博客积分: 3044
  • 博客等级: 少校
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-16 11:06
文章分类

全部博文(71)

文章存档

2011年(30)

2010年(41)

分类: LINUX

2011-05-21 19:46:07

1. 配置本地组访问的FTP
首先创建用户组 test和FTP的主目录
groupadd test
mkdir /tmp/test
然后创建用户
useradd -G test –d /tmp/test –M usr1
注:G:用户所在的组 d:表示创建用户的自己目录的位置给予指定
M:不建立默认的自家目录,也就是说在/home下没有自己的目录
useradd –G test –d /tmp/test –M usr2
接着改变文件夹的属主和权限
chown usr1.test /tmp/test ----这表示把/tmp/test的属主定为usr1
chmod 750 /tmp/test ----7表示wrx 5表示rx 0表示什么权限都没有
这个实验的目的就是usr1有上传、删除和下载的权限
而usr2只有下载的权限没有上传和删除的权限
当然啦大家别忘了我们的主配置文件vsftpd.conf
要确定local_enable=yes、write_enable=yes、chroot_local_usr=yes这三个选项是有的哦!
2. 配置独立FTP的服务器的非端口标准模式进行数据连接
这个非常容易:在VSFTPD。CONF中添加
Listen_port=33333
就可以了啦!
好了重头戏来了,这也是我为什么叫高手篇的缘故!^_^(大家不要扔鸡蛋哦!)
3. 配置单独的虚拟FTP,使用虚拟FTP用户,并使建立的四个帐户中有不同的权限
(两个有读目录的权限,一个有浏览、上传、下载的权限,一个有浏览、下载、删除和改文件名的权限)
A:配置网卡
第一块网卡地址是10.2.3.4 掩码是255.255.0.0
ifconfig eth0:1 211.131.4.253 netmask 255.255.255.0 up
B:写入/etc/sysconfig中(为了重起后IP地址不会丢失)


cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth0:1
vi ifcfg-eth0:1在其中修改内容如下
DEVICE=eth0:1
BROADCAST=211.131.4.255
HWADDR=该网卡的MAC地址
IPADDR=211.131.4.253
NETMASK=255.255.255.0
NETWORK=211.131.4.0
ONBOOT=yes
TYPE=Ethernet
wq推出
C:进入vsftpd.conf所在的文件夹
cp vsftpd.conf vsftpd2.conf
修改vsftpd.conf添加以下信息
Listen_address=10.2.3.4
修改vsftpd2.conf添加以下信息
Listen_address=211.131.4.253
Ftpd_banner=this is a virtual ftp test
到此虚拟的FTP服务器建立好了
D:建立logins.txt
vi /tmp/logins.txt
添加入下信息:
longlei------------用户名
longlei------------密码
zhangweibo
zhangweibo
jinhui
jinhui
lxp
lxp
格式要按照我的来哦,一个用户名,一个密码啦
F:建立访问者的口令库文件,然后修改其权限
db_load –T –t hash –f /tmp/logins.txt /etc/vsftpd_login.db
G:进如/etc/pam.d/中创建
在此文件中添加如下信息
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
H:在/var/ftp/创建目录并改变其属性和它的属主
useradd -d /var/ftp/test qiang
chmod 700 /var/ftp/test
在目录中添加test_file测试文件
I:进入vsftpd2.conf修改其中的信息(我加的是)
Listen_yes
Anonymous_enable=no
Local_enable=yes
Write_enable=no
Anon_upload_enable=no
Anon_mkdir_write_enable=no
Anon_other_write_enable=no
Chroot_local_user=yes
Guest_enable=yes----------起用虚拟用户
Guest_username=qiang------将虚拟用户映射为本地用户
Listen_port=5555
Max_client=10
Max_per_ip=1
Ftpd_banner=this is a virtual server and users
Pam_service_name=ftp.vu
注:在主配置文件中给的权限越低,在后面分用户管理的时候对拥护的权限划分的空间就越大,因为主配置文件最高的限制服务先读主配置文件,然后再读用户的配置文件
重起服务
到此虚拟USER就建好了
J:在VSFTPD。CONF所在的目录中创建virtaul文件目录
并在文件目录中创建以你用户名命名的配置文件
Longlei zhangweibo jinhui lxp
在longlei中添加:
Anon_world_readable_only=no
在lxp中添加
Anon_world_readable_only=no
这样此两个用户就有了浏览目录的权限了
在jinhui中添加
Anon_world_readable_only=no
Write_enable=yes
Anon_upload_enable=yes
此用户就有了上传、下载和浏览的权限
在zhangweibo中添加
Anon_world_readable_only=no
Write_enable=yes
Anon_upload_enable=yes
Anon_other_write_enable=yes
此用户就有了上传、下载、删除文件目录、修改文件名和浏览的权限
K:修改vsftpd2.conf
加入user_config_dir=/vsftpd.conf所在的目录/virtual
重起服务器就搞定了
好了大家别走开,现在隆重推出VSFTPD。CONF中的我所知道的所有配置信息
Anonymous_enable=yes (允许匿名登陆)
Dirmessage_enable=yes (切换目录时,显示目录下.message的内容)
Local_umask=022 (FTP上本地的文件权限,默认是077)
Connect_form_port_20=yes (启用FTP数据端口的数据连接)*
Xferlog_enable=yes (激活上传和下传的日志)
Xferlog_std_format=yes (使用标准的日志格式)
Ftpd_banner=XXXXX (欢迎信息)
Pam_service_name=vsftpd (验证方式)*
Listen=yes (独立的VSFTPD服务器)*
Anon_upload_enable=yes (开放上传权限)
Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件)
Write_enable=yes (开放本地用户写的权限)
Anon_other_write_enable=yes (匿名帐号可以有删除的权限)
Anon_world_readable_only=no (放开匿名用户浏览权限)
Ascii_upload_enable=yes (启用上传的ASCII传输方式)
Ascii_download_enable=yes (启用下载的ASCII传输方式)
Banner_file=/var/vsftpd_banner_file (用户连接后欢迎信息使用的是此文件中的相关信息)
Idle_session_timeout=600(秒) (用户会话空闲后10分钟)
Data_connection_timeout=120(秒) (将数据连接空闲2分钟断)
Accept_timeout=60(秒) (将客户端空闲1分钟后断)
Connect_timeout=60(秒) (中断1分钟后又重新连接)
Local_max_rate=50000(bite) (本地用户传输率50K)
Anon_max_rate=30000(bite) (匿名用户传输率30K)
Pasv_min_port=50000 (将客户端的数据连接端口改在
Pasv_max_port=60000 50000—60000之间)
Max_clients=200 (FTP的最大连接数)
Max_per_ip=4 (每IP的最大连接数)
Listen_port=5555 (从5555端口进行数据连接)
Local_enble=yes (本地帐户能够登陆)
Write_enable=no (本地帐户登陆后无权删除和修改文件)
这是一组
Chroot_local_user=yes (本地所有帐户都只能在自家目录)
Chroot_list_enable=yes (文件中的名单可以调用)
Chroot_list_file=/任意指定的路径/vsftpd.chroot_list
(前提是chroot_local_user=no)
这又是一组
Userlist_enable=yes (在指定的文件中的用户不可以访问)
Userlist_deny=yes
Userlist_file=/指定的路径/vsftpd.user_list
又开始单的了
Banner_fail=/路径/文件名 (连接失败时显示文件中的内容)
Ls_recurse_enable=no
Async_abor_enable=yes
One_process_model=yes
Listen_address=10.2.2.2 (将虚拟服务绑定到某端口)
Guest_enable=yes (虚拟用户可以登陆)
Guest_username=所设的用户名 (将虚拟用户映射为本地用户)
User_config_dir=/任意指定的路径/为用户策略自己所建的文件夹
(指定不同虚拟用户配置文件的路径)
又是一组
Chown_uploads=yes (改变上传文件的所有者为root)
Chown_username=root
又是一组
Deny_email_enable=yes (是否允许禁止匿名用户使用某些邮件地址)
Banned_email_file=//任意指定的路径/xx/
又是单的
Pasv_enable=yes ( 服务器端用被动模式)
User_config_dir=/任意指定的路径//任意文件目录 (指定虚拟用户存放配置文件的路径)
VSFTP安全与效能兼备的ftp服务器
VSFTP 概述 
FTP,file transfer protocol,这是档案传输的通讯协议,也是一般最常用来传送档案的方式。读者在使用9 的时候,可能会感受到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。 
范例 
直接启动VSFTP 服务 
这个范例是套用 的预设范例,直接启动vsftp。 
[root@relay vsftpd]# /sbin/service vsftpd start 
Starting vsftpd for vsftpd: OK ] 
更换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 ] 
特定使用者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. 
取消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 ] 
安排欢迎话语 
若是我们希望使用者在登入时,能够看到欢迎话语,可能包括对该主机的 说明,或是目录的介绍,可参考以下步骤。 
首先确定在/etc/vsftpd/vsftpd.conf 当中是否有底下这一行 
dirmessage_enable=YES 
9 的默认值是有上面这行的。 
接着,在各目录之中,新增名为.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 ... 
对于每一个联机,以独立的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]# 
限制传输档案的速度
本机的使用者最高速度为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 之间,当然,若是频宽不足时,数值会低于此限制。 
针对不同的使用者限制不同的速度
假设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 ] 
建置一个防火墙下的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 
建置一个防火墙下的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 等等的指令时,便无法运作。 
建置一个防火墙下的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 等等的指令时,便无法运作。 
将vsftpd 与TCP_wrapper 结合 
若是读者希望直接在/etc/hosts.allow 之中定义允许或是拒绝的来源地址, 可执行以下步骤。这是简易的防火墙设定。 
Step1. 确定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的设定为YES,如下图所 示: 
tcp_wrappers=YES 
这是9 的默认值,基本上不需修改。 
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 
将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 ] 
===port 设定======================
connect_from_port_20 
用法:YES/NO 
若设为YES,则强迫ftp-data 的数据传送使用port 20。默认值为YES。 
ftp_data_port 
设定ftp 数据联机所使用的port。默认值为20。 


listen_port 
FTP server 所使用的port。默认值为21。 
pasv_max_port 
建立资料联机所可以使用port 范围的上界,0 表示任意。默认值为0。 
pasv_min_port 
建立资料联机所可以使用port 范围的下界,0 表示任意。默认值为0。 
===其它======================== 
anon_root 
使用匿名登入时,所登入的目录。默认值为无。 
local_enable 
用法:YES/NO 
启动此功能则允许本机使用者登入。默认值为YES。 
local_root 
本机使用者登入时,将被更换到定义的目录下。默认值为无。 
text_userdb_names 
用法:YES/NO 
当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。 默认值为NO。 
pasv_enable 
若是设为NO,则不允许使用PASV 的模式建立数据的联机。默认值为开启。 
===更换档案所有权=================== 
chown_uploads 
用法:YES/NO 
若是启动,所有匿名上传数据的拥有者将被更换为chown_username 当中所设定的使用者。这样的选项对于安全及管理,是很有用的。默认值为NO。 
chown_username 
这里可以定义当匿名登入者上传档案时,该档案的拥有者将被置换的使用者名称。预设值为root。 
===guest 设定===================== 
guest_enable 
用法:YES/NO 
若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。 
guest_username 
这里将定义guest 的使用者名称。默认值为ftp。 
===anonymous 设定================== 
anonymous_enable 
用法:YES/NO 
管控使否允许匿名登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。 
no_anon_password 
若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。 
anon_mkdir_write_enable 
用法:YES/NO 
如果设为YES,匿名登入者会被允许新增目录,当然,匿名使用者必须要有对上层目录的写入权。默认值为NO。 
anon_other_write_enable 
用法:YES/NO 
如果设为YES,匿名登入者会被允许更多于上传与建立目录之外的权限,譬如删除或是更名。默认值为NO。 
anon_upload_enable 
用法:YES/NO 
如果设为YES,匿名登入者会被允许上传目录的权限,当然,匿名使用者必须要有对上层目录的写入权。默认值为NO。 
anon_world_readable_only 
用法:YES/NO 
如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。 
ftp_username 
定义匿名登入的使用者名称。默认值为ftp。 
deny_email_enable 
若是启动这项功能,则必须提供一个档案/etc/vsftpd.banner_emails,内容为email 
address
若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许联机。默认值为NO。 
===Standalone 选项================== 
listen 
用法:YES/NO 
若是启动,则vsftpd 将会以独立运作的方式执行,若是vsftpd 独立执行,如9 的默认值,则必须启动﹔若是vsftpd 包含在xinetd 之中,则必须关闭此功能,如RedHat8。在RedHat9 的默认值为YES。 
listen_address 
若 是vsftpd 使用standalone 的模式,可使用这个参数定义使用哪个IP address 提供这 项服务,若是主机上只有定义一个IP address,则此选项不需使用,若是有多个IP  address,可定义在哪个IP address 上提供ftp 服务。若是不设定,则所有的IP address 均会提供此服务。默认值为无。 
max_clients 
若是vsftpd 使用standalone 的模式,可使用这个参数定义最大的总联机数。超过这个数目将会拒绝联机,0 表示不限。默认值为0。 
max_per_ip 
若是vsftpd 使用standalone 的模式,可使用这个参数定义每个ip address 所可以联机的数目。超过这个数目将会拒绝联机,0 表示不限。默认值为0。 


阅读(1112) | 评论(0) | 转发(0) |
0

上一篇:VSFTPD的菜鸟篇

下一篇:FTP 数字代码的意义

给主人留下些什么吧!~~