解决vsftpd匿名上传问题
编辑Vsftp的配置文件vsftp.conf。有关匿名的相关选项全部开启,如下图:
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
当我们修改此文件的话,会发现使用匿名用户还是无法上传文件。
需要注意就是vsftpd的公共目录/var/ftp/pub的权限。需要把该目录的权限设置为777,切记不要修改该目录的所属者及所属组,否则即使你修改了该目录的权限,也是无法上传文件的。该目录默认所属者是root用户和root用户组。
切记,匿名用户只能在/var/ftp/pub目录下。
要求:在公司FTP服务器上,用户ilanni对/data目录下所有的目录都具有管理员权限,即删除、新建、重命名、上传等。而匿名用户可以浏览data目录下的所有目录,其中只对tmp目录具有管理员权限。
这样可以达到只有一个管理员账号,可以对/data目录进行操作,而公司的其他员工帐号都可以浏览/data目录,并且在/data/tmp目录下可以新建自己的目录,并上传文件等权限。
现在我们先新建目录/data,如下图:
[root@localhost /]# mkdir data
再在/data/目录新建几个目录以及tmp目录,如下图:
[root@localhost /]# cd /data/
[root@localhost data]# mkdir soft gane tmp
为了更简单的进行控制,我们就不在系统中新建用户,直接使用root用户及root用户组,通过root用户及root用户组对目录的权限,来达到虚拟用户对目录的权限。
因为/data/tmp目录对于匿名用户来说具有各种权限,所以我们需要修改/data/tmp目录的用户及用户组权限。
该目录是root用户创建,所以目前该目录的权限是root用户拥有所有权,如下图:
[root@mail data]# ll 总计 12 drwxr-xr-x 2 root root 4096 09-16 16:09 gane drwxr-xr-x 2 root root 4096 09-16 16:09 soft drwxr-xr-x 2 root root 4096 09-16 16:09 tmp
现在修改权限为777,即所有用户对该目录具有所有权。
[root@mail data]# chmod 777 tmp/ [root@mail data]# ll 总计 12 drwxr-xr-x 2 root root 4096 09-16 16:09 gane drwxr-xr-x 2 root root 4096 09-16 16:09 soft drwxrwxrwx 2 root root 4096 09-16 16:09 tmp
目录权限修改完毕后,现在开始配置vsftpd虚拟用户。
修改vsftpd的配置文件如下:
anonymous_enable=YES anon_upload_enable=YES //开启匿名用户的上传权限 anon_mkdir_write_enable=YES //开启匿名用户创建目录的权限 anon_other_write_enable=YES //开启匿名用户删除和重命名的权限 为了让用户登录后直接进入的就是/data目录,在此我们还要修改本地用户与匿名用户的默认根目录 local_root=/data anon_root=/data
现在开始添加vsftpd虚拟用户ilanni
cd /etc/vsftpd Vim login.txt ilanni ilanni
添加完毕后,我们需要使用db_load命令把该用户添加到数据库文件中:
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
注意该操作建议多执行两次,因为有可能执行一次不成功。
数据库文件操作完毕,我们现在开始创建ilanni对应相关配置文件。打开vu目录并创建ilanni文件,并添加如下内容:
mkdir -pv /etc/vsftpd/vu vim ilanni guest_username=root local_root=/data/ virtual_use_local_privs=YES
以上全部配置完毕后,要重启vsftpd服务。
测试相关权限。先使用匿名用户,进行测试。匿名用户登录
测试匿名用户在/data/soft/目录下上传文件,上传失败。
测试匿名用户在/data/tmp/目录下上传文件,上传成功。
测试匿名用户在/data/tmp/目录下创建文件夹,创建成功。
测试匿名用户在/data/tmp/目录下删除文件,删除成功。
使用FTP用户ilanni登录
测试FTP用户在/data/目录下创建文件夹,创建成功
测试FTP用户在/data/目录下上传文件,上传成功。
测试FTP用户在/data/目录下删除文件,删除成功。
由于需要,公司网站目录需要把上传权限开通,并且同一个目录需要不同的人给与不同的权限。但是上传只能通过FTP进行上传。而网站服务器上的FTP服务器使用的是Vsftpd。
具体要求如下:
网站根目录/www,对用户ailanni具有所有权,能上传、下载、删除、创建目录权限。
对bilanni用户具有下载、浏览权限。其他用户直接跳转到FTP公共目录下。
根据这个要求我们需要使用到vsftpd的虚拟用户。
Vsftp虚拟用户的原理是:把虚拟用户的权限映射到系统用户上。而虚拟用户的权限是有系统用户对目录的控制达到的。
如果安装上述要求的话,我们的思路是这样的。
在系统中新建用户ailanni,使其对/www目录具有所有权。而修改其用户组,使其用户组对/www目录只具有查看、浏览权限。
首先、安装Vsftpd软件。
yum �Cy install vsftpd
安装完毕,我们先来建立所需要的用户。注意该系统用户一定要建立家目录,否则在后边无法登陆FTP服务器。
useradd ailanni
useradd bilanni
查看用户所属的用户组:
id ailanni
id bilanni
可以看到目前ailanni用户属于ailanni用户组,bilanni用户属于bilanni用户组,但要达到bilanni对www目录具有浏览、上传权限。我们需要把该用户加入到ailanni用户组,通过这样控制相关权限。
现在来把bilanni用户,加入到ailanni用户组。
usermod -G ailanni bilanni
id bilanni
用户建立完毕,我们现在来创建/www目录,并修改其相关的属性。
mkdir /www
我们可以看到目前www目录,所属的用户及用户组为root。现在来进行修改,修改ailanni用户具有所有权限,ailanni用户组具有浏览、权限,其他用户组没有任何权限。把www目录的权限修改为750
chown �CR ailanni:ailanni /www
chmod �CR 750 /www/
现在配置vsftpd,切换到vsftpd的安装目录,编辑vsftpd.conf文件。如下图:
添加如下的内容:
guest_enable=yes //是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。
user_config_dir=/etc/vsftpd/vu //指定每个虚拟用户账号配置目录。
pam_service_name=vsftpd //设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名
配置完毕后,我们需要创建vsftpd虚拟用户账号的配置目录,如下图:
mkdir /etc/vsftpd/vu
创建Vsftpd虚拟用户,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占奇数行,密码占偶数行。
cd /etc/vsftpd/vu vim login.txt ilannia ilanni ilannib ilanni
这个文件中ilannia与ilannib是vsftpd虚拟的用户名,ilanni为密码。
这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,需要使用db_load命令生成db口令数据库文件,如下
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件。把该文件默认的内容注释掉,添加如下内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
auth是指对用户的用户名口令进行验证。
accout是指对用户的帐户有哪些权限哪些限制进行验证。
/lib/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
注意该函数会根据系统的位数而所在位置不同。
如果是32bit系统,该文件所在位置是/lib/security/pam_userdb.so,如下图:
[root@mail ~]# ll /lib/security/ | grep userdb.so -rwxr-xr-x 1 root root 815976 2012-07-18 pam_userdb.so [root@mail ~]# file /sbin/init /sbin/init: ELF 64-bit LSB executable, AMD x86, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
如果是64bit系统,该文件所在位置是/lib64/security/pam_userdb.so,如下图:
[root@mail ~]# ll /lib64/security/ | grep userdb.so -rwxr-xr-x 1 root root 783152 2012-07-18 pam_userdb.so [root@mail ~]# file /sbin/init /sbin/init: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
注意:db=/etc/vsftpd/login格式是这样的,去掉.db后缀。
PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vu目录下,并创建ilannia文件。注意该文件名称一定要与login.txt中的虚拟用户要对应。比如现在login.txt文件有ilannia用户,那么在 /etc/vsftpd/vu目录下创建一个文件名为ilannia的文件。
vim /etc/vsftpd/vu/ilannia 文件内容如下: guest_username=ailanni 其中guest_username=ailanni表示的是设置FTP对应的系统用户为ailanni local_root=/www/ 其中local_root=/www/表示使用本地用户登录到ftp时的默认目录 virtual_use_local_privs=YES 其中virtual_use_local_privs=YES虚拟用户和本地用户有相同的权限
以同样的方法创建文件ilannib,内容与上述相同。
vim /etc/vsftpd/vu/ilannib 文件内容如下: guest_username=ailanni 其中guest_username=ailanni表示的是设置FTP对应的系统用户为ailanni local_root=/www/ 其中local_root=/www/表示使用本地用户登录到ftp时的默认目录 virtual_use_local_privs=YES 其中virtual_use_local_privs=YES虚拟用户和本地用户有相同的权限
以上配置完毕后,现在我们来启动vsftpd服务。如下图:
/etc/init.d/vsftpd start
现在我们来使用ilannia这账号来连接FTP看看实际的情况:测试用户ilannia的相关权限
下载及列出目录权限,
上传权限,删除权限,创建目录权限,切换目录权限
现在我们来使用ilannib这账号来连接FTP看看实际的情况:测试用户ilannib的相关权限
上传,创建目录,删除文件失败
切换目录权限,下载权限成功
通过上述截图,我们可以发现FTP用户ilannib只具有下载和切换目录权限,其他的权限是没有的。刚好到达我们的要求。
http://ilanni.blog.51cto.com/526870/1430894
相关配置参数说明
local_root=/home/ftpsite
设定虚拟用户FTP主目录,使无法向上跳转
write_enable=YES
允许此用户具有写权限
anon_world_readable_only=NO
表示用户可以浏览FTP目录和下载文件
anon_upload_enable=YES
表示用户可以上传文件
anon_mkdir_write_enable=YES
表示用户具有建立和删除目录的权利
anon_other_write_enable=YES
表示用户具有文件改名和删除文件的权限
chroot_list_enable=YES
限制访问自身目录
【管理员用户权限配置--示例】
local_root=/home/ftpsite
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
【上传用户权限配置--示例】
local_root=/home/ftpsite
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
【下载用户权限配置--示例】
local_root=/home/ftpsite
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO