配置虛擬用戶
1、DB方式
先看系统是否安装了db的软件包。默认应该是有了
[root@hostname ~]# rpm -qa | grep db4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1
生成虛擬用戶密碼數據庫:
[syntaxHighLighter brush="shell"]cd /etc/vsftpd
vi vftpusers.txt #以如下格式編輯vftpdusers.txt[/syntaxHighLighter]
user1
password1
user2
password2
[syntaxHighLighter brush="shell"]db_load -T -t hash -f vftpusers.txt vftpusers.db
chmod 600 vftpusers.db[/syntaxHighLighter]
新建虚拟用户的PAM文件
[syntaxHighLighter brush="shell"]vi /etc/pam.d/vsftp #刪除所有內容并添加[/syntaxHighLighter]
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpusers
注意,如果是32bit的CentOS,需要把lib64改成lib
建立虛擬用戶并為虛擬用戶建立目錄
[syntaxHighLighter brush="shell"]useradd -g vsftpd -d /home/vsftpd vsftpd
chmod 700 /home/vsftpd && chown vsftpd:vsftpd /home/vsftpd
mkdir -m 700 /home/user1 && chown vsftpd:vsftpd /home/user1
mkdir -m 700 /home/user2 && chown vsftpd:vsftpd /home/user2[/syntaxHighLighter]
经过该步骤的设置,/home/vsftpd就是vsftpd用户的主目录,该用户也是vsftpd目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。
编辑/etc/vsftpd/vsftpd.conf文件,使其整个文件内容如下所示(去掉了注释内容)
[syntaxHighLighter brush="shell"]anonymous_enable=NO
local_enable=NO
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
one_process_model=NO
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=YES
guest_enable=YES
guest_username=vsftpd
pam_service_name=vsftpd
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
user_config_dir=/etc/vsftpd/user_conf[/syntaxHighLighter]
保存后重啟服務:service vsftpd restart
选如果需要為虛擬用戶特別設置,可以在/etc/vsftpd/user_conf建立和用戶名同名的文件,內容同vsftpd.conf
2、Mysql方式
下载pam_mysql模块并编译安装
[syntaxHighLighter brush="shell"]wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar zxvf pam_mysql-0.7RC1.tag.gz
cd pam_mysql-0.7RC1
./configure -with-mysql=/usr/local/mysql -with-openssl
make && make install[/syntaxHighLighter]
创建vsftpd数据库,并且新建vsftpd的mysql用户和密码,赋予该用户读取vsftpd数据库的权力
运行下列SQL语句后会看到新建的两个的ftp虚拟用户(注意,可以一次输入多行SQL语句,分隔符是回车,结束符是半角分号):
[syntaxHighLighter brush="shell"]mysql -u root -p
Mysql> CREATE DATABASE vsftpd
-> USE vsftpd
-> CREATE TABLE users(name char(16) binary,passwd char(16) binary)
-> INSERT INTO users (name,passwd) VALUES ('qqworld',password('123456'))
-> INSERT INTO users (name,passwd) VALUES ('test',password('test'))
-> GRANT SELECT ON vsftpd.users TO vsftpd@localhost IDENTIFIED BY '12345678'
-> flush privileges
-> select * from users;
Mysql> quit[/syntaxHighLighter]
如果要验证刚才的操作是否成功可以执行下面命令:
[syntaxHighLighter brush="shell"]mysql -u vsftpd -p
Mysql> use vsftpd
-> select * from users;[/syntaxHighLighter]
如果成功,将会列出qqworld、test和加密后的密码
接下来设置VSFTPd的PAM验证文件
auth required /lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
account required /lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
新建配置文件:
vi /etc/security/pam_mysql.conf
[syntaxHighLighter brush="shell"]users.host=localhost
users.database=vsftpd
users.db_user=vsftpd
users.db_passwd=12345678
users.table=users
users.user_column=name
users.password_column=passwd
users.password_crypt=1
verbose=1
log.enabled=1
log.table=logs
log.message_column=msg
log.pid_column=pid
log.user_column=user
log.host_column=host
log.rhost_column=rhost
log.time_column=logtime[/syntaxHighLighter]
上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过Mysql的password()函数加密后保存。
保存后重启vsftpd服务,用qqworld登录ftp显示 530 login incorrect,查看日志:
vi /var/log/secure
发现 PAM adding faulty module: /lib64/security/pam_mysql.so 错误,已确认该目录下有pam_mysql.so,未解决至今。