LINUX

关注公众号 jb51net

关闭
操作系统 > LINUX >

vsftpd如何配置虚拟用户:PAM + PgSQL + FreeBSD-4

jb51.net


----+---------+---------+---------+--------
  1 | ftp     | ftp     | f       | f
  2 | ftp1    | ftp1    | t       | t
  4 | ftp3    | ftp3    | f       | f
  6 | go      | abcdef  | f       | f
  3 | ftp2    | ftp2    | f       | f
  5 | downftp | downftp | f       | f
3、创建一个pgsql用户叫做pamusr,密码也是pamusr。赋予pamusr对于ftp表的select权限,注意select就够了。pam_pgsql只是读数据表,而不是修改它。你也可以用其他用户,比如管理PgSQL的pgsql/postgres用户,但是从安全角度着想,建一个专门提供给pam_pgsql的弱权限的用户更好!
备注:
数据库,数据表,用户名都不必跟我一样,pam_pgsql没有规定,但是这些设定,必须跟pam_pgsql的配置文件/etc/pam_pgsql.conf的一致。
四、设定pam_pgsql模块:编辑/etc/pam_pgsql.conf
在/etc/pam.conf里头加上以上的几行,更多的资料参考/usr/local/share/doc/pam-pgsql/README
代码:
#host = 127.0.0.1  这个不需要,默认是本地连接的。如果要连接远程服务器,请设置你的IP,并且去掉#
database = mydb
user = pamusr  #刚才添加的访问PgSQL的用户
password = pamusr #访问PgSQL的密码
table = ftp
user_column = usr     #用户名在数据表中的字段
pwd_column = pass     #用户密码在数据表中的字段
expired_column = expired  #用户是否已经过期的字段名
newtok_column = newtok    #用户是否需要修改密码的字段
五、设置pam服务。在/etc/pam.conf,加入以下几项
代码:
# service-name  module-type     control-flag    module-path  argument
vsftpd    auth          required        pam_pgsql.so  #
vsftpd   account        required        pam_pgsql.so #
vsftpd    password      required        pam_pgsql.so#
注意这里的service name为vsftpd,这不是必须的。前提是不要跟pam.conf已经有的service name冲突。vsftpd.conf中的pam_service_name一项要跟这里的service name对应。
关于freebsd-5的PAM的配置
在freebsd-5中的pam配置机制,跟freebsd-4有不同。你应该在/etc/pam.d或者/usr/local/etc/pam.d里头建立一个名位vsftpd的文件,内容跟上面的内容一样。本人在fbsd 5-current上尝试过配置,但总不成功,无论是pam_pgsql还是pam_mysql,总是提示说找不到这些pam。google了一下,发现这个错误好像是fbsd 5-current的bug
http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2003-07/0278.html
六、配置vsftpd。这个是参考vsftpd虚拟用户设置1的官方文档进行配置的
1、用adduser增加一个用户,名为virtual。
2、配置/usr/local/etc/vsftpd.conf
代码:
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
dual_log_enable=YES
guest_username=virtual   #我们刚才增加的本地用户,虚拟用户将会享有这个名为virtual本地用户的权限。
pam_service_name=[color=red]vsftpd[/color]  # 这个就是我在pam.conf里头设置的pam服务的名称,没有这一项,vsftpd是用名为ftp的pam服务。
listen=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty   #请加上这一项,vsftpd默认的secure_chroot_dir是/usr/share/empty,用port安装的话,不会自动创建这个目录,而是放在/usr/local/share/vsftpd/empty。当然你也可以自己创建一个目录。
七、调试
用standalone的方法来启动vsftpd,不要用inetd。
代码:
/usr/local/libexec/vsftpd
或者
/usr/local/libexec/vsftpd 配置文件名(如vsftpd.conf.1, vsftpd.conf.2)
一般他是搜索/usr/local/etc目录,如果你放在其他地方就要写上完整的路径。
如果没有没有出什么提示证明vsftpd启动成功。实践中,我常常出现的错误是没有用root来启动vsftpd,或者chroot路径不对。
下面ftp试试
代码:
> ftp 192.168.1.10
Connected to 192.168.1.10.
220 (vsFTPd 1.2.0)
Name (192.168.1.10:powerplane): downftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
yeah,成功了。
总结
想要配置vsftpd + 其他的PAM认证方法,本文都可做参考。当然,你可能会修改有关pam.conf的设置了。
freebsd的port里头除了有pam_pgsql的模块以外,还有pam_mysql,pam_ldap的。
一般都是放在/usr/ports/security