近期收到这样一个需求:某部门需要和HK公司(internet)及不同的供应商共享文件,各供应商之间不可共享(通过FTP共享)。
FTP账号要求:某部门一个内部账号,一个HK外部账号,供应商各一个外部账号,内部账号和HK账号可以访问各供应商账号目录。
FTP权限要求:内部账号和HK账号有所有权限,包括上传、下载、删除;外部账号只有上传、下载权限。
FTP带宽限制:内部账号上传下载无限制,HK账号上传下载限速500KB,供应商账号上传下载限速200KB。
解决方法:
1、在FTP服务器(vsftpd)上新建一个用户并指定目录(虚拟账号使用)
[root@ftp ~]# useradd ftpgcb -s /bin/fail -d /home/gcb
2、新建外部虚拟账号目录
[root@ftp home]# mkdir -p /home/gcb/shxc
3、修改虚拟目录所有权并授予权限755(可根据需要设置)
[root@ftp home]# chmod -R 755 /home/gcb/
[root@ftp home]# chown -R ftpgcb:ftpgcb /home/gcb/
4、新建虚拟账号并生成数据库文件(奇数为账号,偶数为密码)
内部账号:[root@ftp vsftpd]# vi vsftpd_login_intranet.txt
[root@ftp vsftpd]# db_load -T -t hash -f vsftpd_login_intranet.txt vsftpd_login_intranet.db
外部账号:[root@ftp vsftpd]# vi vsftpd_login_internet.txt
[root@ftp vsftpd]# db_load -T -t hash -f vsftpd_login_internet.txt vsftpd_login_internet.db
5、新建虚拟账号的配置文件
内部账号:[root@ftp user_conf]# vi /etc/vsftpd/vsftpd_intranet/user_conf/ruisi
主要的几个参数:
write_enable=YES anon_upload_enable=YES
anon_mkdir_write_enable=YES anon_other_write_enable=YES
guest_enable=YES guest_username=ftpgcb
chmod_enable=YES anon_world_readable_only=NO
connect_from_port_20=YES hide_ids=YES
pasv_min_port=50000 pasv_max_port=60000
tcp_wrappers=YES xferlog_std_format=YES
xferlog_enable=NO log_ftp_protocol=NO
ls_recurse_enable=NO ascii_download_enable=NO
ascii_upload_enable=NO async_abor_enable=NO
dirlist_enable=YES idle_session_timeout=120
data_connection_timeout=300 accept_timeout=60
connect_timeout=60 port_enable=YES
download_enable=YES anon_max_rate=0
chroot_local_user=NO deny_file={*.mp3,*.mov,.private}
内部用户上级目录通用配置(/etc/vsftpd/vsftpd_intranet/vsftpd_intranet.conf):
listen=YES listen_address=10.x.x.y (对内的IP地址)
listen_port=21 anonymous_enable=NO
local_enable=YES user_config_dir=/etc/vsftpd/vsftpd_intranet/user_conf
local_max_rate=0 ftpd_banner=FTP Server
banner_file=/etc/vsftpd/vsftpd_intranet/banner
pam_service_name=ftp_e use_localtime=YES
外部账号:[root@ftp user_conf]# vi /etc/vsftpd/vsftpd_internet/user_conf/xinchun
listen=YES 开启监听
listen_address=10.x.x.x 设置监听的IP地址(对外的IP地址)
listen_port=21 设置侦听的端口号
max_clients=200 设置最大连接的IP数
max_per_ip=4 设置第个IP允许与FTP服务器同时建立的连接数
write_enable=YES 允许写入权限
anon_upload_enable=YES 允许匿名用户上传 (如只允许下载不允许上传,可修改为NO)
anon_mkdir_write_enable=NO 禁止匿名用户创建目录 (HK账号新建和删除权限需要YES)
anon_other_write_enable=NO 禁止匿名用户其他的权限 (HK账号新建和删除权限需要YES)
guest_enable=YES 启用虚拟用户
guest_username=ftpgcb 虚拟用户对应的本地用户账号
local_root=/home/gcb/shxc 本地用户登入时的(定义的)目录 (HK账号对应为上一级目录)
chmod_enable=YES 允许本地用户使用chmod命令改变上传的文件权限
local_umask=077 本地用户上传档案时的权限掩码(默认)
file_open_mode=0666 本地用户上传档案后的档案权限(默认)
anon_world_readable_only=NO 禁止匿名用户下载
connect_from_port_20=YES 开启20端口连接
hide_ids=YES 所有档案的拥有者与群组为虚拟用户对应的本地用户
pasv_min_port=50000 设置被动模式数据连接可使用端口范围的最小端口(默认为0表示任意端口)
pasv_max_port=60000 设置被动模式数据连接可使用端口范围的最大端口(默认为0表示任意端口)
tcp_wrappers=YES 启用wrap配合vsftpd检查/etc/hosts.allow和/etc/hosts.deny中的设定来决定请求连接的主机是否允许访问FTP服务器(简易防火墙)
xferlog_std_format=YES 启用xferlog标准日志格式(默认为关闭)
xferlog_enable=NO 禁用上传/下载日志记录(默认为开启,记录保存在xferlog_file所定义的文件中)
log_ftp_protocol=NO 禁用所有ftp请求和响应日志记录(默认为禁用,开启后日志将保存在/var/log/vsftpd.log,且xferlog_std_format不能被激活。此选项一般用于调试)
ls_recurse_enable=NO 禁止登入者使用ls -R查看当前目录下子目录中的文件(默认禁止)
ascii_download_enable=NO 禁用ASCII模式下载数据(默认为NO)
ascii_upload_enable=NO 禁用ASCII模止上传数据(默认为NO)
async_abor_enable=NO 禁用sync abor功能(启用时FTP命令将显示为"async ABOR",仅对高级客户端使用)
dirlist_enable=YES 允许用户查看目录的内容
idle_session_timeout=200 空闲用户会话的超时时间,200秒不对FTP服务器进行任何操作将断开FTP链接
data_connection_timeout=300 设置建立FTP数据连接的超时时间5分钟
accept_timeout=60 设置建立FTP连接的超时时间为60秒(默认)
connect_timeout=60 响应主动模式下数据连接的超时时间为60秒(默认)
port_enable=YES 开启主动模式
download_enable=YES 允许文件下载到本地 (如只允许上传不允许下载,可修改为NO)
anon_max_rate=200000 匿名用户的最大传输速度(200K,有80%-120%的浮动,0为无限制)
local_max_rate=200000 本地用户的最大传输速度(200K,有80%-120%的浮动)
chroot_local_user=YES 当chroot_list_enable=NO,所有的用户均不能切换到其他目录
banner_file=/etc/vsftpd/vsftpd_internet/banner 设置包含当用户登录FTP时显示的内容的文件,会覆盖由ftpd_banner设置的字符串
deny_file={*.mp3,*.mov,*.exe,.private} 设置拒绝访问的文件
use_localtime=YES 使用本地用户所在的时区显示时间
外部用户上级目录通用配置文件(/etc/vsftpd/vsftpd_internet/vsftpd_internet.conf):
anonymous_enable=NO 禁止匿名用户登录
local_enable=YES 允许本地用户登录
user_config_dir=/etc/vsftpd/vsftpd_internet/user_conf 设定用户配置文件所在的目录(用户登录后会到指定的目录下读取与当前用户名相同的文件,并根据文件中的配置命令对当前用户进行更进一步的配置)
ftpd_banner=FTP Server 设定FTP欢迎语的字符串(默认无)
pam_service_name=ftp_i 设置PAM使用的文件名称(默认路径/etc/pam.d/)
6、修改磁盘配额限制
修改/etc/fstab,在/home所在行defaults后面加上逗号再加上usrquota后保存退出
使用quotacheck检查/home文件系统:[root@ftp ~]# quotacheck -avug
对账号设置配额限制quota(以K为单位),设置blocks相应的soft及hard值(30G,250000个文件)。
[root@ftp ~]# edquota -u ftpgcb
Disk quotas for user ftpgcb (uid 509):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 116 31457280 31458280 22 250000 253000
7、重启服务,测试。
vsftpd的配置参考:
http://wiki.ubuntu.org.cn/Vsftpd
http://os.51cto.com/art/201008/222036.htm
http://yuanbin.blog.51cto.com/363003/108262/
http://blog.sina.com.cn/s/blog_946cb2b70100x4zc.html
本文转自 lorysun 51CTO博客,原文链接:http://blog.51cto.com/lorysun/1626412