当前位置: Linux研究室 > 在线教程 > 系统管理 > 入门知识 >
vsftpd的虚拟用户配置:PAM + PgSQL + FreeBSD-4
vsftpd可能是世界上最好的ftpd。它在linux世界非常流行,安全,性能高。 (1.02beta,欢迎debug,本人也会随时更新) 简述PAM原理 用户 <-> vsftpd <-> PAM模块 <-> 用户和密码数据库 vsftpd用了一种很聪明同时也是unix/linux规范的方法来认证用 户,就是PAM。大家对于PAM,也许有些陌生,但是一直在用。所谓PAM,英文是:Pluggable Authentication Modules,可拔插认证模块(不知道这样翻译对不对)。看见plug这个关键字,就知道是很灵活的。 ps -ax|grep pam
你会发现login了多少个控制台,就会有多少个写着pam的进程。
PAM的最大好处是灵活。它不管你的用户和密码用什么数据格式存储(数据库也 好,通常用的密码文件也好),只要有相应的PAM模块就可以存储。比如说,大家不仅可以用vsftpd + PgSQL做用户登陆验证,只要你喜欢你还可以用MySQL,Oracle,LDAP数据库存储用户数据,只要有相应的PAM就可以。所有的daemon 都可以用一个后台数据库来做用户验证登陆,包括telnet/sshd等等。 pam的配置机制在不同版本的freebsd上有差异 本文不打算详细叙述PAM的配置。PAM的配置不是很难,毕竟,只是要你配置一 些参数,不是叫你开发一个pam模块出来。而且本文的篇幅所限,偶刚刚知道的一点东西希望能够起到抛砖引玉的作用。等偶对pam再玩得深入和熟一点的时 候,再写一篇关于深入一点关于pam的东东? 准备开始 /etc/pam.conf #pam服务的配置
我都是使用port来安装的,请大家用port/package来安装,不要自己下载源码来编译,否则可能根据本文的方法可能无法正常使用。其中vsftpd和pam-pgsql一定要用port/package来安装。 /usr/ports/ftp/vsftpd
/usr/ports/databases/postgresql7 /usr/ports/security/pam-pgsql
二、PostgreSQL安装(如果你已经有了PostgreSQL,不需要看这一节) 1、初始数据库。请先用root登陆或者su到root。然后,打命令: # su pgsql
正常初始化的应该有以下提示:
# initdb This database system will be initialized with username "pgsql".
This user will own all the data files and must also own the server process. Creating directory /usr/local/pgsql/data Success. You can now start the database server using: /usr/local/bin/postmaster -D /usr/local/pgsql/data 2、启动PostgreSQL # /usr/local/etc/rc.d/010.pgsql.sh start 更多详细的帮助,请看freebsddiary上面的一篇用port来安装PostgreSQL的文章,全英文。 三、设定用户数据库 1、先创建一个数据库,叫做mydb。 CREATE TABLE "ftp" (
"ID" int4 DEFAULT nextval('public."ftp_ID_seq"') NOT NULL , "usr" varchar(32) NOT NULL , "pass" varchar(32) NOT NULL , "expired" bool DEFAULT false NOT NULL , "newtok" bool DEFAULT false NOT NULL ); 请创建一些用户,方便调试: ID | usr | pass | expired | newtok 3、创建一个pgsql用户叫做pamusr,密码也是pamusr。赋予 pamusr对于ftp表的select权限,注意select就够了。pam_pgsql只是读数据表,而不是修改它。你也可以用其他用户,比如管理 PgSQL的pgsql/postgres用户,但是从安全角度着想,建一个专门提供给pam_pgsql的弱权限的用户更好! 备注: 四、设定pam_pgsql模块 #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 注意这里的service name为vsftpd,这不是必须的。前提是不要跟pam.conf已经有的service name冲突。vsftpd.conf中的pam_service_name一项要跟这里的service name对应。 B、fbsd-5的配置 在freebsd-5中的pam配置机制,跟freebsd-4有不同。你应该在/etc/pam.d或者/usr/local/etc/pam.d里头建立一个名位vsftpd的文件,内容跟上面的内容一样。
auth required pam_pgsql.so # 六、配置vsftpd 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=vsftpd # 这个就是我在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。当然你也可以自己创建一个目录。 七、调试 /usr/local/libexec/vsftpd
或者
/usr/local/libexec/vsftpd 配置文件名(如vsftpd.conf.1, vsftpd.conf.2)
一般他是搜索/usr/local/etc目录,如果你放在其他地方就要写上完整的路径。
如果没有没有出什么提示证明vsftpd启动成功。实践中,我常常出现的错误是没有用root来启动vsftpd,或者chroot路径不对。 >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,成功了。 总结 |







