« Varnish tips | Home | 一个<pre>的小tip »

October 9, 2009

vsftpd + virtual user + pam_mysql

也是很早以前欠下的。

vsftpd:

安装:ftp/vsftpd,我通常和 RC_NG script 一起选。
配置文件:${LOCALBASE}/etc/vsftpd.conf
启动:${LOCALBASE}/etc/rc.d/vsftpd [one] {start|stop|restart}

MySQL部分:

安装:databases/mysql 以及 security/pam-mysql。至于 MySQL 到底要不要放在同一台机器上可以随便。

vsftpd PAM module,放在 ${LOCALBASE}/etc/pam.d 下面,名为 vsftpd,内容如下:

auth    required /usr/local/lib/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd_auth table=users usercolumn=user passwdcolumn=passwd crypt=2
account required /usr/local/lib/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd_auth table=users usercolumn=user passwdcolumn=passwd crypt=2

几个说明:pam_mysql.so 这里写完整路径的的原因是默认位置在/usr/lib,直接写pam_mysql.so无效。除此之外,另一解决办法就是建symlink。这里的user/passwd/host/db/table/usercolumn/passwdcolumn 分别对应 MySQL 数据库(中)的 ─── 连接数据库用的用户名/密码/MySQL所在主机/数据库名称/存放验证信息的表名称/用户列/密码列。而 crypt=2 的意思是密码列是用 MySQL 内置的 PASSWORD() 函数进行加密的。

关于创建验证数据库和表这步,表结构可以自己设计,我就两列:用户名、密码。另外,还可以在 MySQL 中添加一个只具备SELECT权限的验证专用帐户。

现在插入第一个用户信息作为测试数据,注意现在密码这列对应的值需要通过 PASSWORD() 函数加密,具体用法为 PASSWORD('输入的密码')。

这些安排好以后,再向系统中添加一个 vsftpd virtual user 的账户,然后把 ftp 的整个目录都chown(1) 给它。

接下来是 vsftpd.conf(5) 的几个关键配置:

- local_enable=YES

启用非匿名登录,*包括*虚拟用户。

- guest_enable=YES
- guest_username=vsftpd

guest_enable 激活 virtual users 功能。 guest_username 把虚拟用户都映射到系统中的 vsftpd 帐号(这个帐号就是上面添加的系统帐号),同时也设置了虚拟用户的家目录,即是 vsftpd 这个帐号的家目录。

- chroot_local_user=YES

把虚拟用户限制在他们的家目录中。

- pam_service_name=vsftpd

设置 vsftpd 使用的 PAM 验证服务这个名字就是在 etc/pam.d 里面的文件名。

- user_config_dir=/etc/vsftpd_user_conf

启用 vsftpd 针对每个用户配置。配置文件命名为用户的用户名,并放置在该目录之下。

No TrackBacks

TrackBack URL: http://mt.opensource.org.cn/cgi-bin/mt/mt-tb.fcgi/494

Leave a comment