vsftpdhtml
proftpdlinux
目录 | /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(当前文件夹内的上传,下载,但不能够修改和删除) |
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
- 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.配置虚拟帐户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
- 主要是local_root,分别将不一样的用户锁定在不停的目录,而由于目录是树结构,因此能够上层访问下层
- guest_username是指使用一个实体用户来虚拟出虚拟用户,至关于将虚拟用户与实体用户作绑定,用户使用的是虚拟帐户,但其实系统最终调用的是实体用户
- 其余都是权限配置,参考官方文件便可。
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
- 注释掉原来的项,添加新的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这个目录的权限。