他们之间的比较
vsftpd
- vsftp中文支持很弱
- 支持多个用户使用同一个目录
- 支持虚拟用户
- 稳定,起码比proftpd稳定点
proftpd
- 中文支持很好
- 不支持多个用户使用同一个目录,看配置可以看出来
- 支持虚拟用户
- 不太稳定,偶尔会挂掉,不过用自动重启脚本也能勉强继续用下去,毕竟ftp要求不高(原因不明)
需要实现需求:
- 个别文件需要全部用户都可以看到,不能编辑
- 个别文件只能局部用户可以看到和编辑
- 需要方便管理
根据需求进行权限设计
目录 | /app/ftpdata | /app/ftpdata/public_team | /app/ftpdata/public_all |
---|---|---|---|
用户 | a用户(管理员) | b用户(某些可以看的人) | c用户(全部人) |
权限 | r/w | r/w | r |
采用树结构来控制权限实现不同级别管理不同目录
目录 | /app/ftpdata | 管理员admin(全部权限,可管理全部目录) |
---|---|---|
/app/ftpdata/team | 一般高级用户team(当前文件夹和下层文件夹public内的上传,下载,修改,删除,可管理public目录) | |
/app/ftpdata/team/public | 大众用户public(当前文件夹内的上传,下载,但不可以修改和删除) |
如果用vsftpd的话
1.使用虚拟用户,主配置文件修改如下:
vsftpd.conf
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vuserconfig
- local_umask用022的意义是这个配置的权限设计逻辑是用linux的文件权限777减去这个配置值得到最终ftp用户的可使用权限,777-022就等于了755了,755权限代表用户rwx,用户所属组权限rx,other用户rx(读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1,详情参考鸟哥私房菜)
- user_config_dir可以使用个人定制的配置文件
- 其他都是默认配置了,详情man vsftpd。
2.配置虚拟账户
编辑好一个存放用户账户密码信息的文件,在vsftpd的文件夹里面,一行账户一行密码
cat vsftpd_virtualuser.txt
admin
XXXXX
team
XXXXX
public
XXXXX
安装db4-utils软件,然后将账户密码文件写入到vsftpdusr.db里面
yum install db4-utils
db_load -T -t hash -f vsftpd_virtualuser.txt /etc/vsftpd/vftpuser.db
配置对应不同账户的配置文件(三个用户的配置文件)
cat vuserconfig/admin
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
cat vuserconfig/team
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data/team
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
cat vuserconfig/public
guest_enable=yes
guest_username=ftp
local_root=/app/ftp_data/team/public
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_upload_enable=YES
- 主要是local_root,分别将不同的用户锁定在不停的目录,而因为目录是树结构,所以可以上层访问下层
- guest_username是指使用一个实体用户来虚拟出虚拟用户,相当于将虚拟用户与实体用户做绑定,用户使用的是虚拟账户,但其实系统最终调用的是实体用户
- 其他都是权限配置,参考官方文件即可。
3.配置vsftpd的pam验证模块使用
cat /etc/pam.d/vsftpd
#%PAM-1.0
#sessionoptional pam_keyinit.soforce revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#accountinclude password-auth
#sessionrequired pam_loginuid.so
#sessioninclude password-auth
authrequired/lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required/lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
- 注释掉原来的项,添加新的2项,这2项意思是使用单独的db库来做账户验证,就是之前创建账户db文件
如果用proftpd的话
使用虚拟用户
1.编辑(目录自定义)/etc/proftpd.conf文件,修改为以下配置
1. ServerType是控制proftpd以什么形式启动,有两种,standalone标准模式和xint模式,xint要使用xint控制,需要配置xint的启动脚本,麻烦一点,其实区别不大。
2. 这里的user是指proftpd运行的user,跟访问目录没有关系,不过我这里跟虚拟用户相对应的实体账号保持一致,不一致也没关系。
3. AuthOrder和AuthUserFile是一起使用的,因为这是配置虚拟账户验证的必须物,改变验证模块使用,并且验证数据库指向某个文件
4. 主要关注3个`<directory>`和`<limit>`,前者负责控制范围,后者负责控制权限,在权限里面使用先alow后deny的顺序,匹配第一条就不会匹配第二条,如此类推,并且limit里支持ftp命令控制,MKD,READ等可以写在limit里面,比一般的read和write要精细,详细可以参考[http://www.proftpd.org/docs/howto/Directory.html](http://www.proftpd.org/docs/howto/Directory.html)
命令 | 解释 |
---|---|
CMD | Change Working Directory 改变目录 |
MKD | MaKe Directory 建立目录的权限 |
RNFR | ReName FRom 更改目录名的权限 |
DELE | DELEte 删除文件的权限 |
RMD | ReMove Directory 删除目录的权限 |
RETR | RETRieve 从服务端下载到客户端的权限 |
STOR | STORe 从客户端上传到服务端的权限 |
READ | 可读的权限,不包括列目录的权限,相当于 RETR , STAT 等 |
WRITE | 写文件或者目录的权限,包括 MKD 和 RMD |
DIRS | 是否允许列目录,相当于 LIST , NLST 等权限,还是比较实用的 |
ALL | 所有权限 |
2.创建虚拟账户
/app/proftp/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=admin --uid=14 --home=/app/ftp_data/ --shell=/sbin/nologin
/app/proftpd/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=team --uid=14 --home=/app/ftp_data/team --shell=/sbin/nologin
/app/proftpd/bin/ftpasswd --passwd --file=/app/proftpd/ftpd.passwd --name=public --uid=14 --home=/app/ftp_data/team/public --shell=/sbin/nologin
- 命令在proftpd安装目录,找不到的话就搜索。
- 这里uid14 是因为我要映射的是ftp账号,这个账号的uid就是14
- 因为是虚拟账号,所以不准登录 nologin
- 因为需要有个登录目录,所以不同用户使用各自的目录
无论是vsftpd还是proftpd,需要注意的是只要是使用虚拟账号的话,就要注意ftp文件目录的权限是否能够被虚拟账号所映射的实体用户的权限对上,例如我是使用ftp这个实体用户的话
ls -lh /app/ftp_data
总用量 8.0K
drwx------ 2 ftp ftp 4.0K 8月 27 15:04 ads
drwxr-xr-x 4 ftp ftp 4.0K 8月 28 11:46 team
需要有ftp能够访问ftp_data这个目录的权限。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。