他们之间的比较

vsftpd

  1. vsftp中文支持很弱
  2. 支持多个用户使用同一个目录
  3. 支持虚拟用户
  4. 稳定,起码比proftpd稳定点

proftpd

  1. 中文支持很好
  2. 不支持多个用户使用同一个目录,看配置可以看出来
  3. 支持虚拟用户
  4. 不太稳定,偶尔会挂掉,不过用自动重启脚本也能勉强继续用下去,毕竟ftp要求不高(原因不明)

需要实现需求:

  1. 个别文件需要全部用户都可以看到,不能编辑
  2. 个别文件只能局部用户可以看到和编辑
  3. 需要方便管理

根据需求进行权限设计

目录 /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
  1. local_umask用022的意义是这个配置的权限设计逻辑是用linux的文件权限777减去这个配置值得到最终ftp用户的可使用权限,777-022就等于了755了,755权限代表用户rwx,用户所属组权限rx,other用户rx(读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1,详情参考鸟哥私房菜
  2. user_config_dir可以使用个人定制的配置文件
  3. 其他都是默认配置了,详情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
  1. 主要是local_root,分别将不同的用户锁定在不停的目录,而因为目录是树结构,所以可以上层访问下层
  2. guest_username是指使用一个实体用户来虚拟出虚拟用户,相当于将虚拟用户与实体用户做绑定,用户使用的是虚拟账户,但其实系统最终调用的是实体用户
  3. 其他都是权限配置,参考官方文件即可。

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
  1. 注释掉原来的项,添加新的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
  1. 命令在proftpd安装目录,找不到的话就搜索。
  2. 这里uid14 是因为我要映射的是ftp账号,这个账号的uid就是14
  3. 因为是虚拟账号,所以不准登录 nologin
  4. 因为需要有个登录目录,所以不同用户使用各自的目录

无论是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://www.godblessyuan.com/2015/01/21/proftp_vsftp_use/


线上猛如虎
2.2k 声望178 粉丝

你们都有梦想的,是吧.怀抱着梦想并且正朝着梦想努力的人,寻找着梦想的人,我想为这些人加油呐喊!


引用和评论

0 条评论