今天着折腾了下vsftp的搭建,遇到一个问题到现在也没有解决。

  首先说明:vsftp配置文件参数很多,具体可以查看 man  vsftpd.conf ,安装vsftp的时候多看INSTALL等说明文件。

  问题:首先/etc/pam.d/ftp内容如下:

 
  
  1. [root@localhost etc]# cat /etc/pam.d/ftp 
  2. #%PAM-1.0 
  3. auth       required     /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed 
  4. auth       required     /lib/security/pam_unix.so shadow nullok 
  5. auth       required     /lib/security/pam_shells.so 
  6. account    required     /lib/security/pam_unix.so 
  7. session    required     /lib/security/pam_unix.so 

    /etc/ftpusers中有一用户max,其他配置正确,但是max可以登录ftp,pam策略没有起作用,不知道要让ftpsers中的用户不能登录还要进行什么设置? 先mark一下。## 经过检查,发现是vsftpd没有加载pam模块造成的。但是很奇怪的时候自己手动编译安装vsftpd的时候死活都没有加载pam模块成功,但是用yum安装vsftpd后问题解决。

    1. 一些需要注意的参数:

   chroot_local_user=YES(NO)

    将用户限制在自己的默认目录之中(chroot)。

   chroot_list_enable=YES(NO)

    是否将某些实体用户限制在他们的默认目录内?默认为NO,不过,如果想要一些用户无法离开他们的默认目录时,可以考虑将这个设置值改为YES,并且将无法离开目录的用户写在vsftpd.chroot_list中。

   chroot_list_file=/etc/vsftpd.chroot_list

    如果chroot_list_enable=YES,那么就可以设置这个项目了。它里面可以规定哪一个实体用户被限制在自己的默认目录内无法离开(chroot),一行一个帐号。

    那么考虑下列情况

    目录切换问题:

     chroot_local_user=NO 

     chroot_list_enable=NO

     ##则:所有的用户都可以切换目录。 

     chroot_local_user=YES #本地用户都不可以切换目录。

     chroot_list_enable=NO

     ##则:面两个列子可以看出chroot_local_user是个总开关

     chroot_local_user=NO

     chroot_list_enable=YES

     ##则:只有vsftpd.chroot_list中的用户才不能切换目录。

    用户控制问题:

      vsftp中的对系统用户给与的抵挡机制,主要有两个文件,一个是pam模块管理的,一个是vsftpd主动提供的:

      /etc/ftpusers: 由/etc/pam.d/ftp文件的设置所影响;

      对此文件,相关的配置参数pam_service_name=ftp ## 我做实验时,正常配置了,但是ftpusers中的用户还是能登录?奇怪!难道真的是ftpusers和vsftpd.user_list都要存在?

      /etc/vsftpd.user_list: 由vsftpd.conf的userlist_file所设置。

      相关的参数为:userlist_enable=YES ##总开关,只有开启了此参数,下一个参数才有用  

                    userlist_deny=YES   ##YES时,userlist_file中的用户禁止登录。

      这两个文件的内容是一样的,一般来说是禁止,系统中UID小于500的账户。一行一个帐号。

      注意:           

           userlist_enable=YES

             userlist_deny=YES

           ##则:系统用户中,vsftpd.user_list中的用户不能进行登录,会报530 Permission denied.错误。

             userlist_enable=YES

             userlist_deny=NO

           ##则:系统用户中,只有vsftp.user_list中列出的用户可以登录。当vsftp.user_list为空时,就可以禁止所有系统用户。

 

    2. 配置用户,可以登录并且上传文件,能下载文件。

 

 
  
  1. anonymous_enable=NO 
  2. anon_upload_enable=NO 
  3. anon_mkdir_write_enable=YES 
  4. anon_max_rate=30000 #匿名用户的流速 
  5. data_connection_timeout=60  
  6. idle_session_timeout=600   #以上两项是对连接时间的一些设置 
  7. max_clients=50 #最大客户端数目 
  8. max_per_ip=5 # 同一个ip的最大客户端数目 
  9. pasv_min_port=65400 
  10. pasv_max_port=65410 
  11. write_enable=YES 

     2011年3月1号,今天接着弄vsftpd,折腾了接近了两个小时了,显示快凌晨一点了,可是vsftpd虚拟用户登录问题还是没有解决。初步判定,是vsftpd没有加载pam认证模块造成的。

ldd  /usr/local/sbin/vsftpd 有如下输出:


 
  
  1. linux-gate.so.1 =>  (0x001fe000) 
  2. libwrap.so.0 => /lib/libwrap.so.0 (0x00339000) 
  3. libnsl.so.1 => /lib/libnsl.so.1 (0x00317000) 
  4. libcrypt.so.1 => /lib/libcrypt.so.1 (0x05b15000) 
  5. libdl.so.2 => /lib/libdl.so.2 (0x001ce000) 
  6. libresolv.so.2 => /lib/libresolv.so.2 (0x00384000) 
  7. libutil.so.1 => /lib/libutil.so.1 (0x00786000) 
  8. libcap.so.1 => /lib/libcap.so.1 (0x00311000) 
  9. libc.so.6 => /lib/libc.so.6 (0x00c61000) 

      可见vsftpd没有加载pam认证模块,真是奇怪。。。。。。。试着将编译的安装的vsftpd删除,然后用yum进行安装后,ldd检查得到一下信息:

 

 
  
  1. linux-gate.so.1 =>  (0x00ed0000) 
  2. libssl.so.6 => /lib/libssl.so.6 (0x00224000) 
  3. libwrap.so.0 => /lib/libwrap.so.0 (0x00316000) 
  4. libnsl.so.1 => /lib/libnsl.so.1 (0x007a2000) 
  5. libpam.so.0 => /lib/libpam.so.0 (0x00fd3000) #!!!惊奇,加载成功了。 
  6. libcap.so.1 => /lib/libcap.so.1 (0x00e18000) 
  7. libdl.so.2 => /lib/libdl.so.2 (0x00669000) 
  8. libc.so.6 => /lib/libc.so.6 (0x0031e000) 
  9. libcrypto.so.6 => /lib/libcrypto.so.6 (0x00477000) 
  10. libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00110000) 
  11. libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00e37000) 
  12. libcom_err.so.2 => /lib/libcom_err.so.2 (0x00ef0000) 
  13. libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x0013e000) 
  14. libresolv.so.2 => /lib/libresolv.so.2 (0x00165000) 
  15. libz.so.1 => /usr/lib/libz.so.1 (0x00c3f000) 
  16. libaudit.so.0 => /lib/libaudit.so.0 (0x00c9c000) 
  17. /lib/ld-linux.so.2 (0x00b4a000) 
  18. libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00179000) 
  19. libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00182000) 
  20. libselinux.so.1 => /lib/libselinux.so.1 (0x009c2000) 
  21. libsepol.so.1 => /lib/libsepol.so.1 (0x00da2000) 

      这次居然得到正确的加载了pam模块,额?我勒个去。真奇怪,到底怎么回事?  今天晚上还真有点晚了,先睡觉了。明天早上还有课。

 

      2011年3月1日,新的一天,现在晚上8点40,接着昨天的问题。 yum安装后,以前ftpusers用户不能验证的问题得到解决,pam模块的文件得到解决。现在进行虚拟用户测试。

    配置文件主要的参数如下:
 
 
  
  1. 116 anon_upload_enable=NO 
  2. 117 anon_mkdir_write_enable=NO 
  3. 118 anon_other_write_enable=NO 
  4. 119 pam_service_name=vsftpd 
  5. 120 userlist_enable=YES 
  6. 121 userlist_deny=YES 
  7. 122 tcp_wrappers=YES #/etc/hosts.allow,/etc/hosts.deny 
  8. 123 guest_enable=YES 
  9. 124 guest_username=vuser 
    同时在/etc/pam.d/vsftpd中添加如下两行:
 
 
  
  1. auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db 
  2. account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db 
    然后添加系统用户vuser,创建虚拟机用户数据库命令为:
     
 
  
  1. db_load –T –t hash –f login.txt /etc/vsftpd/vsftpd_login.db) 
   然后重启vsftpd,用虚拟用户登录死活都登录不了,神马情况? 又折腾了几番, 发现是/etc/pam.d/vsftpd在作怪。现在将vsftpd中有的行注释掉后(如下所示),虚拟用户能正常登录了。
 
 
  
  1. /etc/pam.d/vsftpd 
  2. #%PAM-1.0 
  3. session    optional     pam_keyinit.so    force revoke 
  4. auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 
  5. #auth       required    pam_shells.so 
  6. #auth       include     system-auth 
  7. #account    include     system-auth 
  8. auth       required     /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #虚拟用户登录需要 
  9. account    required     /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #虚拟用户登录需要 
  10. session    include      system-auth 
  11. session    required     pam_loginuid.so 
     到目前为止,vsftpd虚拟用户实现了登录,但是更具体的应用如权限管理、更改默认端口等应用还没进行实验,这些等到下一部分进行吧。sina博客不知道怎么才能插入代码,这样排版看起来会更舒服些吧,还有就是更多的时候记录实验过程中遇到的一些很奇怪的问题,不过说实话,这真是一个折腾的过程。
 
    以上配置后不能发现虚拟用户能登录下载文件,但是不能上传,创建目录。修改以下参数后能正常上传和创建目录, 同时注意对上传文件目录(工作目录)要权限为755:
 
 
  
  1. write_enable=YES #增加写权限  
  2. anon_upload_enable=YES #增加上传权限  
  3. anon_mkdir_write_enable=YES #增加创建目录的权限 
    这样设置后,就能正常上传下载创建目录了。
 
    要实现不同用户的不同权限或者更高级的一些配置,可以参考以下内容(摘自: http://www.myfaq.com.cn/2005September/2005-09-13/202102.html
    
     1.使用独立服务 

 a.vi /etc/xinetd.d/vsftpd把disable=no还改成yes,不再需要它了! 

b.vi /etc/vsftpd.conf在结尾加上listen=YES 

c.service xinetd restart 

d./usr/local/sbin/vsftpd /etc/vsftpd.conf & 

OK!现在vsftp已经是独立启动的服务了! 

2.使用非常规的端口(2121) 

a.vi /etc/vsftpd.conf 

添加listen_port=2121,保存退出 

b.killall -9 vsftpd 

c./usr/local/sbin/vsftpd /etc/vsftpd.conf & 

OK!现在用ftp 127.0.0.1将提示你连接被拒绝了(ftp:connect:Connetion refuesd)!然后ftp 127.0.0.1 2121输入用户名和密码,OK!可以登录! 

3.实现不同用户不同权限 

现在我们就来实现三个用户的不同权限:a.upload用户,可以上传下载,可以新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;b.download用户,只能下载;c.admin用户,管理员,可以上传,可以下载,可以新建文件夹,可以删除和更改文件和文件夹名。这些用户都不能登录系统,并且用ftp连接时锁定在自己的家目录中不能进入系统文件夹。 

a.cat << ! >logins.txt 

>upload 

>******* #upload用户的密码 

>download 

>******* 

>admin 

>**************** 

>! 

说明,此文本文件的格式是:单数行为用户名,偶数行为密码 

b.db_load -T -t hash -f logins.txt /etc/vsftpd_login.db 

c.chmod 600 /etc/vsftpd_login.db 

d.cd vsftpd-1.2.1/EXAMPLE;cp VIRYUAL_USERS/vsftpd.pam /etc/pam.d/ftp.vu (进入你的解包的源码目录,把虚拟用户的认证文件拷贝到/etc/pam.d/下) 

e.useradd -d /home/ftpsite virtual;chmod 700 /home/ftpsite;su - virtual -c "echo hello>/homt/ftpsite/test.file(建立虚拟用户所要访问的ftp目录并设置仅virtual用户访问的权限和创建一个供下载实验的文件) 

f.vi /etc/vsftpd.conf在此文件中插入下面的配置语句 

guest_enable=YES(启用虚拟用户) 

guest_username=virtual(将虚拟用户映射为本地virtual用户) 

pam_service_name=ftp.vu(指定PAM配置文件为ftp.vu) 

user_config_dir=/etc/vsftpd_user_conf(指定不同虚拟用户配置文件的存放路径) 

保存退出 

g.mkdir /etc/vsftpd_user_conf 

h.开放不同用户的不同权限 echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/download(开放download用户的下载权限——只能下载;注意这个不地方不要写成YES,否则将不能列出文件和目录) 

cp /etc/vsftpd_user_conf/download /etc/vsftpd_user_conf/upload 

vi /etc/vsftpd_user_conf/upload,添加下列行 

write_enable=YES (增加写权限) 

anon_upload_enable=YES(增加上传权限) 

anon_mkdir_write_enable=YES (增加创建目录的权限) 

cp /etc/vsftpd_user_conf/upload /etc/vsftpd_user_conf/admin 

增加一行: 

anno_other_writer_enable=YES(增加管理员用户的删除/重命名的权限) 

i.测试 

killall -9 vsftpd;/usr/local/sbin/vsftpd /etc/vsftpd.conf & 

ftp 127.0.0.1 2121 

以用户名download和你设置的密码登录,ls,可以看到文件,下载,成功!put一个文件,提示 

Permission denied。rename test.file同样权限被拒绝;delete test.file同样不成功! 

输入quit退出,以upload用户登录,OK!可以上传,下载,mkdir lsf,提示“/lsf" created;rename lsf lsf1提示Permission denied,删除文件同样不成功! 

输入quit退出,以admin用户登录,可以有上述所有权限,然后rmdir lsf,提示Remove directory o[eration successful;delete test.file提示Delete operation successful!OK,大功告成了!