免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3908 | 回复: 5
打印 上一主题 下一主题

[FTP] 搭建企业常用的 FTP 服务器 [复制链接]

招聘 : 技术支持/维
论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-22 17:55 |只看该作者 |倒序浏览
搭建企业常用的 FTP 服务器

客户需求:
服务器(FTP 服务器)上有很多普通用户,每个用户都有自己的家目录。允许所有的用户通过
用户名和密码登录到 FTP 服务器上。但是有一个用户特殊,这个用户的密码是公开的,很多人
都知道,所以要求此用户登录服务器进入的并不是自己的家目录,而是一个指定的目录,同时
在这个用户看来,此目录就是根目录了。其他的所有用户都默认进入到自己的家目录,而且可
以出自己的家目录。特殊的用户可以上传文件,可以下载文件,但是不能删除和覆盖已经上传
的文件。
上面的需求是企业中真实存在的,需要实现的几个主要功能如下:
1. 除了特殊用户之外,其他的用户不需要做特殊的设置,因为默认情况下普通用户进入的
就是自己的家目录,并且可以出自己的家目录。
2. 特殊用户的登录的默认目录需要重新指定。
3. 特殊用户要 chroot,但是其他的普通用户不能 chroot。
4. 特殊用户不能删除和重写已经上传的文件。
我们先分析一下这几个功能都要如何实现:
第一个功能,不需要做格外的设定。
第二个功能,需要将特殊用户和其他普通用户区别来,也就是说我们要对特殊用户做特殊的设
定,vsftpd.conf 配置文件中的 user_config_dir 参数可以对用户做单独的设置。那么在特殊用户
自己的配置文件里我们要指定其默认的登录目录,用参数 local_root 可以实现。
第三个功能,只有一个用户要做 chroot,其他的普通用户不需要,那么就可以在 vsftpd.conf 配
置文件中用下面三个参数共同实现:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
其中我们先讨论后两个参数,chroot_llist_enable 为 YES 的话,chroot_list_file 所指定的文件才
生效。chroot_list_file 文件里存放的是用户名,每一行一个用户名。当 chroot_local_user 为
YES 的话,那么除了 chroot_list_file 指定的文件里的用户不需要做 choot 操作之外,其他的所
有普通用户都需要做 chroot 操作;当 chroot_local_user 为 NO 的话,那么只有 chroot_list_file
指定的文件里的用户做 chroot 操作,其他的所有普通用户都不需要 choot。
显然,这个实验里我们要用到第二种情况,因为这样只要在 chroot_list_file 里写入特殊用户的
名字即可。否则要将所有用户都写入,而且每当添加新的用户时都要再写入此文件中。
第四个功能,既然用户可以上传文件,那么就应该可以对文件进行写操作,换言之,就可以对
文件进行删除操作。所以通过普通的 Linux 文件权限设定是实现不了的。但是 vsftpd.conf 文件
提供了一个很牛的参数——cmds_allowed。此参数可以指定用户都可以执行哪些操作,这里指
的操作是用户通过 vsftpd 登录到服务器后可以执行哪些 vsftpd 的命令。我们可以将除了 DELE
之外的所有命令都写到这个参数的后面,这样用户就仅仅不能进行删除操作了。因为只要限制
那个特殊用户而已,所以这个参数要添加到特殊用户自己的配置文件里。
现在我们就实际配置一下。
FTP 服务器的 IP:192.168.56.102
Client 端的 IP:192.168.56.101
服务器上的有两个用户:commonuser 和 publicuser,其中publicuser 是上面提到的特殊用户。
在主配置文件 vsftpd.conf 中添加下面的内容:
hroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
user_config_dir=/etc/vsftpd/vsftpd_user_conf
创建 /etc/vsftpd/chroot_list 文件,其内容就是特殊用户的名字,
# cat /etc/vsftpd/chroot_list
pubicuser
创建 /etc/vsftpd/vsftpd_user_conf 目录,并在其下面创建特殊用户同名的文件,这里是
publicuser 文件。其内容有两个,一个是改变其登录的默认目录,另一个是不让他执行 DELE
操作,
# cat /etc/vsftpd/vsftpd_user_conf/publicuser
local_root=/var/ftp/publicuser
cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,EPRT,EPSV,FEAT,HELP,LIST,MDTM,M
KD,MODE,NLST,NOOP,OPTS,PASS,PASV,PORT,PWD,QUIT,REIN,REST,RETR,RMD,RNFR,RNT
O,SITE,SIZE,SMNT,STAT,STOR,STOU,STRU,SYST,TYPE,USER,XCUP,XCWD,XMKD,XPWD,X
RMD
注意:这里面没有 DELE。
创建 /var/ftp/publicuser 目录,修改其权限为 777。
用普通的用户 commonuser 测试,
# ftp 192.168.56.102
Connected to 192.168.56.102.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.56.102:root): commonuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/commonuser"
ftp> put test_file
local: test_file remote: test_file
227 Entering Passive Mode (192,168,56,102,40,249)
150 Ok to send data.
226 File receive OK.
ftp> ls
227 Entering Passive Mode (192,168,56,102,28,183)
150 Here comes the directory listing.
-rw-r--r-- 1 501 501 0 Mar 19 01:53 test_file
226 Directory send OK.
ftp> delete test_file
250 Delete operation successful.
ftp> quit
221 Goodbye.
用特殊用户 publicuser 测试,
# ftp 192.168.56.102
Connected to 192.168.56.102.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.56.102:root): publicuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> put test_file
local: test_file remote: test_file
227 Entering Passive Mode (192,168,56,102,233,67)
150 Ok to send data.
226 File receive OK.
ftp> delete test_file
550 Permission denied.
ftp> quit
221 Goodbye.
到此为止,除了禁止覆盖之外,其他的功能都已经实现了。FTP 的覆盖机制并不是先删除文件
在创建文件,很可能是直接清空文件内容,再写入新内容。这样的话,如果用户可以执行 PUT
操作,那么就可以覆盖文件。所以必须通过其他的办法去实现。
我想到的是给这个特殊用户的登录目录添加额外的属性,通过 chattr 命令。
也就是,我写一个 cron 认为,不停的对 /var/ftp/publicuser 目录中的文件执行 chattr +i 操作,
其中“i”属性是说带有“i”属性的文件是不能被改变的。
做个测试,
# chattr +i /var/ftp/publicuser/test_file
# lsattr /var/ftp/publicuser/test_file
----i-------- /var/ftp/publicuser/test_file
然后在尝试覆盖,
# ftp 192.168.56.102
Connected to 192.168.56.102.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.56.102:root): publicuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,56,102,40,99)
150 Here comes the directory listing.
-rw-r--r-- 1 500 500 0 Mar 19 01:47 test_file
226 Directory send OK.
ftp> put test_file
local: test_file remote: test_file
227 Entering Passive Mode (192,168,56,102,134,2)
553 Could not create file.
ftp> quit
221 Goodbye.
这样就实现了一个企业里常见的 FTP 服务器。

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
2 [报告]
发表于 2010-04-22 19:23 |只看该作者
不错不错。

论坛徽章:
0
3 [报告]
发表于 2010-04-27 17:09 |只看该作者
vsftpd还是很不错的。但是我个人喜欢pureftpd

论坛徽章:
0
4 [报告]
发表于 2010-05-10 11:28 |只看该作者
用好了都不错。

论坛徽章:
0
5 [报告]
发表于 2010-06-04 16:14 |只看该作者
你好,请问这两部解释的是不是有点问题呀?

C0QKHY0ZHJ{~0BL9WJZWLVM.jpg (37.59 KB, 下载次数: 7)

C0QKHY0ZHJ{~0BL9WJZWLVM.jpg

7LK14HZLAZ9Z7UW3PC0KBSY.jpg (6.99 KB, 下载次数: 8)

7LK14HZLAZ9Z7UW3PC0KBSY.jpg

论坛徽章:
0
6 [报告]
发表于 2010-09-02 09:38 |只看该作者
很好谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP