Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1067886
  • 博文数量: 83
  • 博客积分: 159
  • 博客等级: 上尉
  • 技术积分: 2221
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 17:08
个人简介

……致我那曾经苦逼的岁月……

文章分类
文章存档

2018年(1)

2017年(7)

2016年(13)

2014年(1)

2013年(12)

2012年(27)

2011年(22)

分类: LINUX

2013-12-16 22:00:49

真的真的好久没写博客啦~~!还好最近一个视频直播的项目上线了。恶心的调试,这个vsftp需求更恶心了我!
下面是产品的需求:
1、总部人员需要通过ftp上传课件到服务器上。权限只能是创建目录、上传文件、禁止下载文件、删除文件、重命名文件。分中心则通过ftp下载课件。权限只能是下载,禁止创建目录、上传文件、删除文件、重命名文件。
2、总部人员需要通过ftp将资料上传到服务器上。权限只能是创建目录、上传文件、下载文件、支持断点续传功能、删除文件、重命名文件。分中心则通过http下载课件,权限只能是下载。
3、分中心人员需要通过ftp将视频上传到服务器上。权限只能是创建目录、上传文件、禁止下载文件、删除文件、重命名文件。总部则通过ftp下载课件。权限只能是下载,禁止创建目录、上传文件、删除文件、重命名文件。
看到这三个需求我一片茫然,因为ftp了解不是很深,刚刚开始我准备依靠文件属性来控制,但是因为权限设置的太细,所以不得不要使用虚拟用户来配置。这里感谢一位QQ好友,他至少提供了一个关于vsftpd虚拟用户配置的链接,真的很感谢!综上所述,我决定3个需要需要使用5个虚拟用户。一个nginx下载用户。
环境:CentOS6.3(64位)
1、首先安装vaftpd需要的组件,pam、db4、vsftpd。
yum install -y pam* db4 vsftpd
2、建立虚拟用户。(用户和密码,一行一个)
vi /etc/vsftpd/account.txt
abc              =====>创建目录、上传文件、禁止下载、删除、重命名文件。
密码
bcd              =====>只能下载
密码
cde              =====>创建目录、上传文件、断点续传、删除文件、下载文件、重命名文件。
密码
def               =====>创建目录、上传文件、禁止下载、删除、重命名文件。
密码
efg               =====>只能下载
密码
3、生成虚拟用户密码口令文件
db_load -T -t hash -f /etc/vsftpd/account.txt /etc/vsftpd/account.db
为了安全生成完后可以把明文的账户文件account.txt删除。不过还是要自己记清楚哈!
4、编辑vsftpd的pam认证,32位系统的就别写/lib64了。
vi /etc/pam.d/vsftpd.vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account
5、建立本地映射用户,不知道的参数上网自己查。
useradd -d /home/ftp virtual_user -s /sbin/nologin
6、下面是vsftpd.conf主配置文件
# Example config file /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
tcp_wrappers=YES
guest_enable=YES
user_config_dir=/etc/vsftpd/account
guest_username=virtual_user
7、下面是每个虚拟用户的权限,记得下面的虚拟用户的文件名必须和上述account.txt里面的文件名一样。
vi /etc/vsftpd/account/abc
write_enable=YES                             ====>允许在文件系统写入权限
anon_upload_enable=YES                   ====>允许上传文件
anon_mkdir_write_enable=YES            ====>允许创建文件夹
anon_world_readable_only=NO            ====>允许匿名用户浏览器整个服务器的文件系统
download_enable=NO                         ====>不允许下载文件
anon_umask=022                               ====>这个就不多说了,记得虚拟用户写anon_umask,本地账户写local_umask。我就为这个问题恶心过!
local_root=/home/ftp/courseware         ====>abc用户登录后的目录,不指定就登录到家目录了。
vi /etc/vsftpd/account/bcd
anon_world_readable_only=NO             ====>bcd用户只允许下载
local_root=/home/ftp/courseware         ====>bcd用户登录后的目录
创建这个指定后的目录
mkdir /home/ftp/courseware
chown virtual_user.virtual_user /home/ftp/courseware
vi /etc/vsftpd/account/cde
write_enable=YES                              ====>cde用户允许写入
anon_world_readable_only=NO            ====>cde用户允许下载
anon_upload_enable=YES                   ====>cde用户允许上传
anon_mkdir_write_enable=YES            ====>开放创建目录的权限 
anon_other_write_enable=YES            ====>支持断点续传功能
anon_umask=022
local_root=/data
mkdir /data
chown virtual_user.virtual_user /data
nginx配置文件比较简单了,这里我就随便写一点
  location / {
  autoindex on;
  autoindex_exact_size off;
  autoindex_localtime on;
  root /data;
  }
vi /etc/vsftpd/account/def
write_enable=YES                             ====>允许在文件系统写入权限
anon_upload_enable=YES                   ====>允许上传文件
anon_mkdir_write_enable=YES            ====>允许创建文件夹
anon_world_readable_only=NO            ====>允许匿名用户浏览器整个服务器的文件系统
download_enable=NO                         ====>不允许下载文件
anon_umask=022                               ====>这个就不多说了,记得虚拟用户写anon_umask,本地账户写local_umask。
local_root=/home/ftp/video         ====>abc用户登录后的目录,不指定就登录到家目录了。
vi /etc/vsftpd/account/efg
anon_world_readable_only=NO             ====>efg用户只允许下载
local_root=/home/ftp/video                  ====>efg用户登录后的目录
创建这个指定后的目录
mkdir /home/ftp/video
chown virtual_user.virtual_user /home/ftp/video
8、增加ip_nat_ftp模块
在/etc/sysconfig/iptables-config文件最后面加入这两行
IPTABLES_MODULES="ip_nat_ftp"
IPTABLES_MODULES="ip_conntrack_ftp"
在/etc/sysconfig/iptables文件最后面加入这两行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
重启iptables服务
/etc/init.d/iptables restart
modprobe ip_nat_ftp    (记得以后写个脚本,开机自动运行加载这个模块,不然用ftp工具连接会报套接字什么错误)
10、下面可以尽情的测试了!有问题欢迎留言!
我遇到的三个问题:
1、操作系统字符集为zh_CN.UTF-8,用ftp工具上传带有中文名的文件,或者创建中文名的文件夹,在linux上查看显示为乱码。
解决办法:
修改系统字符集为LANG=zh_CN.GB18030,重启。然后重新上传即可!看到的正常。但是第二个需求通过浏览器去下载课件看到的是乱码,修改nginx住配置文件的字符集为GB2132,重启nginx即可看到网页的编码自动会选择GB2132!
2、ftp上传的文件权限为600,nginx下载报403无权访问,还好后来找到一篇帖子看到是写anon_umask解决!
3、需要增加上传文件的断点续传功能,这个是anon_other_write_enable=YES参数控制的,也就是说如果这个参数打开,那么就支持断点续传,但是这样就多了可以删除和重命名权限,所以这里只能取一个,我就没用断点续传功能。
阅读(4188) | 评论(5) | 转发(3) |
给主人留下些什么吧!~~

forgaoqiang2013-12-20 15:30:01

一直比较要命的bug就是 vsftp如果要限制用户到各自目录下 根目录就不能存放东西 而且不能是可写 不知道这个问题怎么样了~ 

littlepy2013-12-18 16:53:00

留个脚印

niao59292013-12-17 09:23:16

REDHAT6.4的VSFTPD用WIN的管理器登录的时候会超时。同时字体是个非常麻烦的事情,不知道在REDHAT6.5中解决了没有!!