关于ftp的选择:vsftpd 和proftpd

他们之间的比较

vsftpdhtml

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

proftpdlinux

  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

采用树结构来控制权限实现不一样级别管理不一样目录shell

目录 /app/ftpdata 管理员admin(所有权限,可管理所有目录)
/app/ftpdata/team 通常高级用户team(当前文件夹和下层文件夹public内的上传,下载,修改,删除,可管理public目录)
/app/ftpdata/team/public 大众用户public(当前文件夹内的上传,下载,但不能够修改和删除)

若是用vsftpd的话

1.使用虚拟用户,主配置文件修改以下:数据库

vsftpd.confsession

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.配置虚拟帐户app

编辑好一个存放用户帐户密码信息的文件,在vsftpd的文件夹里面,一行帐户一行密码less

cat vsftpd_virtualuser.txt

admin
XXXXX
team
XXXXX
public
XXXXX

安装db4-utils软件,而后将帐户密码文件写入到vsftpdusr.db里面tcp

yum install db4-utils
db_load -T -t hash -f vsftpd_virtualuser.txt /etc/vsftpd/vftpuser.db

配置对应不一样帐户的配置文件(三个用户的配置文件)ui

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验证模块使用spa

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/

相关文章
相关标签/搜索