软件
vsftpd /usr/ports/ftp/
postgresql /usr/ports/database/
pam_pgsql /usr/ports/security
创建数据表
su pgsql
createdb vsftp
psql vsftp
create table ftpuser (
id serial,
users varchar(32) not null,
ftppwd varchar(32) not null,
expired bool default false not null,
newtoken bool default false not null,
unique (id)
);
插入一些记录,测试用.
例如:
---------------------------------------------
|id | users | ftppwd | expired | newtoken |
-----------------------------------------
|1 | upload | upload | false | false |
---------------------------------------------
创建角色,用于pam论证时登录数据库.
create role ftplogin with password 'loginpwd'
alter role ftplogin with login
修改pam_pgsql认证设置
/etc/pam_pgsql.conf
database = vsftp #pgsql里的数据库名
user = ftplogin #登录数据库的用户名,就是刚才创建的role.
password = loginpwd #role的密码
table = ftpuser #记录用户的表名
user_column = users #ftp 用户名对应的字段
pwd_column = ftppwd #密码字段
expired_column = expired #是否失效, 为false的才能登录.
newtok_column = newtoken #是否需要改密码.
创建pam认证服务设置
/etc/pam.d/vsftpd
# auth
auth required pam_pgsql.so
# account
account required pam_pgsql.so
# password
password required pam_pgsql.so
创建一个系统用户:virtual.
可设为nologin.
修改vsftpd配置文件
/usr/local/etc/vsftpd.conf
guest_enable=YES #允许虚拟用户
guest_username=virtual #虚拟用户登录时使用此帐号运行vsftpd
pam_service_name=vsftpd #pam认证的服务名与/etc/pam.d/中的相同.
user_config_dir=/usr/local/etc/vsftpd_user_conf #为虚拟用户进行单独配置的配置文件的目录.
在/usr/local/etc/创建目录vsftpd_user_conf
其中创建与虚拟用户同名的配置文件.
如
/usr/local/etc/vsftpd_user_conf/upload
其内容:
local_root=/home/upload #指定upload虚拟用户的主目录是/home/upload
在/home里创建upload目录.
chown virtual:virtual upload #将所有者改为virtual.
注,为实现匿名用户只读,特定用户可读可写可删,可以进行单独配置.
关掉vsftpd.conf里的匿名用户上传权限,这时虚拟用户也不能上传.
修改vsftpd_user_conf/upload文件.
加入:
anon_world_readable_only=NO #开放匿名用户访问
anon_upload_enable=YES #开放上传权限
anon_mkdir_write_enable=YES #开放创建目录权限
这样就可以特定用户可读可写.