系统环境
rhel4-u4
vsftp+mysql+pam_mysql-0.50-6.i386.rpm
安装pam_mysql-0.50-6.i386.rpm
1 创建mysql数据库虚拟用户
ftp库
user表
username列
passwd列
2 创建虚拟用户
VSD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是VSD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然,我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSD的guest。
# useradd
vsftpdguest
当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。
3 设置vsftp配置文件
在/etc/vsftpd.conf文件中,加入以下选项:
guest_enable=YES
guest_username=vsftpdguest
4 设置pam_mysql模块
打开/etc/pam.d/ftp文件,加入以下内容:
#%PAM-1.0
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
#auth required pam_stack.so service=system-auth
#auth required pam_shells.so
#account required pam_stack.so service=system-auth
#session required pam_stack.so service=system-auth
auth required /lib/security/pam_mysql.so user=root passwd=root host=localhost db=ftp table=users usercolumn=username passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=root passwd=root host=localhost db=ftp table=users usercolumn=username passwdcolumn=passwd crypt=0
上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存。注意
不能用crypt=2,是pam_mysql.so不支持mysql 4.0的password函数,改为crypt=0,在mysql中用明文密码即可,crypt=1模式下,数据库密码插入时候用encrypt模式既能能过验证
5 虚拟用户个人权限
经过以上的步骤,虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。首先,介绍虚拟用户的权限设置。
VSD-1.2.0新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这也就是VSD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。而virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。
控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:
[root@hpe45
root]# chown vsftpdguest.vsftpdguest /home/vsftpdguest
[root@hpe45 root]#
chmod 700
/home/vsftpdguest
允许虚拟用户上传文件:
write_enable=YES
anon_upload_enable=YES
允许虚拟用户修改文件名和删除文件:
anon_other_write_enable=YES
由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。
其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加
安全,我们可以将虚拟用户限制在自家目录下。有两种做法:一,在配置文件中增加以下选项
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。
第二种做法,在配置文件中修改chroot_local_user=YES。
经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。
6 虚拟用户个人目录设置
大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。首先,在主配置文件中加入以下选项:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:
[root@hpe45
root]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@hpe45 root]# cd
/etc/vsftpd/vsftpd_user_conf
[root@hpe45 vsftpd_user_conf]# touch
xiaowang
以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/xiaowang。接下来,在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang,配置选项为:
local_root=/home/xiaowang
然后,新建xiaowang目录,并将权限设为vsftpdguest:
[root@hpe45
vsftpd_user_conf]# mkdir /home/xiaowang
[root@hpe45 vsftpd_user_conf]#
chown vsftpdguest.vsftpdguest ./xiaowang
[root@hpe45 vsftpd_user_conf]#
chmod 600 /home/xiaowang
经过以上设置,xiaowang登录VSD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。
从文件系统层次来看,由于“/home/xiaowang”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问xiaowang的自家目录。解决这个问题也很简单,我们只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法参照前面第六步中所述,这里不再赘述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。
同理,个人用户的配置文件理也可以写入指令来达到单独配置用户的权限
例如
用户
jkjk
local_root=/avtech/apps/vpc/jkjk
anon_upload_enable=NO
限制了用户上传的权限
也可在vsftpd.conf中设置
user_sub_token=$USER
那么每个虚拟用户的配置文件中设置local_root
local_root=/home/virtual/$USER
$USER就是虚拟用户的用户名,即每个虚拟用户的主目录是/home/virtual下的与自己用户名同名的目录
7 用户上传文件权限
一共有两个参数涉及到目录的
权限设置,分别是anon_umask和local_umask
将两者都设置为002,即可使用户上传得文件和目录均为775的
权限,如果不设定anon_umask的话,上传目录后无法查看其内容。
参考配置
vsftpd.conf
anon_umask=022
local_umask=022
pam_service_name=vsftpd
userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vsftpguest
virtual_use_local_privs=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
#chown_uploads=YES
#chown_username=root
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam.d/vsftpd
#%PAM-1.0
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
#auth required pam_stack.so service=system-auth
#auth required pam_shells.so
#account required pam_stack.so service=system-auth
#session required pam_stack.so service=system-auth
auth required /lib/security/pam_mysql.so user=root passwd=root host=localhost db=ftp table=users usercolumn=username passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=root passwd=root host=localhost db=ftp table=users usercolumn=username passwdcolumn=passwd crypt=0
vsftpd_user_conf下的test1用户
local_root=/avtech/apps/vhcs/test1
或者单独给某个用户设置特殊权限
local_root=/avtech/apps/vpc/jkjk
anon_upload_enable=NO