查看: 1823|回复: 25

vsftp,虚拟用户,不同用户,不同权限,不同目录

[复制链接]
发表于 2012-12-3 05:52:47 | 显示全部楼层 |阅读模式
VSFTPD是一种Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。

    本文介绍在debian上如何实现VSFTPD的虚拟用户名和密码保存在数据库文件和MySQL数据库服务器中。并达到不同用户(以三个为例)不同权限,不同目录:

    a.web用户,本地目录是:/var/www,可以上传下载,可以新建文件夹,可以删除文件和文件夹;

    b.download用户,本地目录是:/home/ftp,只能浏览和下载;

    c.admin用户 ,本地目录是:/home/ftp,可以上传下载,可以新建文件夹,可以删除和更改文件和文件夹名。

    三个帐号均不能登录系统,并且用ftp连接时锁定在自己的家目录(每个用户可以不同目录),而不能进入系统文件夹。

    基本思路:用虚拟用户访问FTP,为每个虚拟用户建立一个独立的配置文件,使不同的虚拟用户具有不同的主目录,不同的权限。


    基本流程:ftp用户访问→PAM配置文件(由vsftpd.conf中pam_service_name指定)→PAM论证→区别用户读取配置文件(由vsftpd.conf中user_config_dir指定配置文件路径,文件名即用户名)


具体步骤如下:(以下步骤由于要分方法来写,所以并没有按照流程的步骤来写,所以看上去条理不是太清晰,建议做完后自己按照流程理一理思路)

1、首选安装vsftpd:
   #apt-get install vsftpd

2、建立本地虚拟用户:
   #useradd -d /home/ftp virtual

3、在/home/ftp/创建目录并改变其属性和它的宿主
   #chown virtual /home/ftp
   #chmod 700 /home/ftp

4、改变web发布页所在目录(/var/www)属性和它的宿主
   #chown virtual /var/www
   #chmod 775 /var/www  (可根据具体情况修改这个权限)

5、创建ftp用户配制文件目录:/etc/vsftpd/user_conf
   #mkdir /etc/vsftpd/user_conf

6、在/etc/vsftpd/user_conf目录中创建以用户名命名的配置文件web、download、admin

    “download”文件内容如下:
    local_root=/home/ftp (当然,你高兴也可以设置成其它,但要注意virtual用户对此目录的权限)
    anon_world_readable_only=NO (使download用户的能下载,也只能下载;写成YES,将不能列出文件和目录)

    “admin”文件内容如下:
    local_root=/home/ftp
    anon_world_readable_only=NO
    write_enable=YES (写权限)
    anon_mkdir_write_enable=YES (新建目录权限)
    anon_upload_enable=YES(上传权限)
    anon_other_write_enable=YES(删除/重命名的权限)

    “web”文件内容如下:
    local_root=/var/www   
    anon_world_readable_only=NO
    anon_umask=022 (由于web页面的特殊性,故单独设置上传文件权限为755,此掩码值可根据具体情况更改)   
    write_enable=YES (写权限)
    anon_mkdir_write_enable=YES (新建目录权限)
    anon_upload_enable=YES(上传权限)
    anon_other_write_enable=YES(删除/重命名的权限)

7、在/etc/vsftpd.conf加入或者更改以下配置语句:
   anonymous_enable=NO (当然你也可以设成YES,同时允许匿名用户登陆)
   local_enable=YES (必须置YES,因为虚拟用户是映射到virtual这个本地用户来访问的)
   guest_enable=YES(启用虚拟用户)
   guest_username=virtual(将虚拟用户映射为本地virtual用户)
   pam_service_name=ftp.vu(指定PAM配置文件为ftp.vu)
   user_config_dir=/etc/vsftpd/user_conf(指定不同虚拟用户配置文件的存放路径)

以下步骤方法一和方法二略有不同,具体如下:

方法一(帐号和密码保存在数据库文件中) :

8、建立用户列表logins.txt 内容如下

   web        (帐号)
   ******     (用户密码)

   download   (帐号)
   *******    (用户密码)

   admin      (帐号)
   *******    (用户密码)

9、安装: libdb3-util,目的:可以使用db3_load
   #apt-get install libdb3-util

10、建立访问者数据文件
   #db3_load –T –t hash –f /tmp/logins.txt /etc/vsftpd/vsftpd_login.db

11、在/etc/pam.d/中创建文件ftp.vu, 添加如下内容:
   auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
   account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

-----------------------------------
权限补充:

  纯上传权限:
local_root=/data/repository/snapshot
anon_umask=022
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
download_enable=NO

乱码补丁:
其它发行版本则要手动安装:
下载源码-解压-把补丁复制到源码目录

命令:
#patch -p0 < vsftpd-2.0.5-encoding.patch
#patch -p0 < chinese_log.patch
#.configure
#make
#make install

方法二(帐号写入MySQL数据库):

8、安装Mysql:
   #apt-get install mysql-server mysql-client

   为了安全,请给Mysql设置密码:
   #mysqladmin password  ***** (****就是你新设的Mysql的密码)

9、将虚拟用户帐号和密码保存在Mysql数据库中:
我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加三个虚拟用户download、admin 、web。

#mysql –p  
      mysql>create database vsftpdvu;
      mysql>use vsftpdvu;
      mysql>create table users(name char(16) binary,passwd char(16) binary);
      mysql>insert into users (name,passwd) values ("download",password("****"));(此下的***是download用户的密码)
      mysql>insert into users (name,passwd) values ("admin",password("*****"));(此处的***是admin用户的密码)
          mysql>insert into users (name,passwd) values ("web",password("*****")); (此处的***是web用户的密码)
      mysql>quit

10、授权virtual可以读vsftpdvu数据库的users表。
#mysql -u root mysql -p
      mysql>grant select on vsftpdvu.users to virtual@localhost identified by "*****"; ((****并非步骤8中的密码)
      mysql>quit

如果要验证刚才的操作是否成功可以执行下面命令:
#mysql -u virtual –p**** vsftpdvu (****是步骤10中设的密码)
mysql>select * from users;
如果成功,将会列出download、web、apollo和加密后的密码。

11、安装MySQL的PAM验证
   #apt-get install libpam-mysql

12、我们要设置vsftpd的PAM验证文件。新建开/etc/pam.d/ftp.vu文件,加入以下内容:
auth required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步骤10中设的密码)
account required pam_mysql.so user=virtual passwd=**** host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
(****是步骤10中设的密码)

   crypt表示口令字段中口令的加密方式:
   crypt=0,口令以明文方式(不加密)保存在数据库中;
   crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;
   crypt=2,口令经过MySQL的password()函数加密后保存。

最后,重新启动VSFTPD
    #/etc/init.d/vsftpd restart

发表于 2012-12-5 13:53:06 | 显示全部楼层
谢谢分享  
发表于 2012-12-10 01:06:56 | 显示全部楼层
晕  不信啊  
发表于 2014-9-13 19:10:47 | 显示全部楼层
帮你项项吧  
发表于 2014-9-15 13:01:25 | 显示全部楼层


   关注下~~~
发表于 2014-11-17 08:11:05 | 显示全部楼层
哈哈,这么多的人都回了,我敢不回吗?赶快回一个,很好的,我喜欢  
发表于 2014-12-4 19:42:14 | 显示全部楼层
看完了这么强的文章,我想说点什么,但是又不知道说什么好,想来想去只想  
发表于 2014-12-27 21:27:43 | 显示全部楼层
拿把椅子看表演
发表于 2015-1-27 20:03:41 | 显示全部楼层
真是天底下好事多多  
发表于 2015-3-1 19:05:15 | 显示全部楼层
要不我崇拜你?行吗?  
高级模式
B Color Image Link Quote Code Smilies

本版积分规则