Ubuntu 9.04下VSFTPD MySQL 配置虚拟用户(2)

三、 配置虚拟用户

VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而VSFTPD的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。 VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。VSFTPD验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。
配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等。

1、 guest用户的创建
useradd -d /home/ftpsite virtual
2、 用户/口令的保存
1)mysql 该命令在 /usr/local/mysql/bin中。
2)create database vsftpd; 创建一个数据库,注意SQL语句以分号结尾。
3)use vsftpd; 打开刚建的数据库。
4)create table users (id int AUTO_INCREMENT NOT NULL,name char(16) binary NOT NULL,passwd char(48) binary NOT NULL,primary key(id)); 建一张表,两个字段。
5)create table logs (msg varchar(255), user char(16), pid int, host char(32), rhost char(32), logtime timestamp ); 建一张表,两个字段。
6)quit
7)mysql
8)grant select on vsftpd.users to virtual@localhost identified by 'adm0509';
grant insert on vsftpd.logs to virtual@localhost identified by 'adm0509';
第一行意思为,允许virtual用户在本地对vsftpd.users表可以执行select命令。并设置密码。
第二行意思为,允许virtual用户在本地对vsftpd.logs表可以执行insert命令。并设置密码。
注意此处的密码要与以下配置的PAM认证中的密码保持一致。
9)use vsftpd
10)insert into users (name,passwd) values('lyjjr1','abc');
insert into users (name,passwd) values('lyjjr2','bcd');
向表内加入两个帐号及密码。
11)select * from users;
如果能看到表内容就表示正常了。
3、 PAM认证配置
1)把源包考到 /usr/src/pam_mysql-0.7RC1.tar.gz
2)tar zxvf pam_mysql-0.7RC1.tar.gz
3)cd pam_mysql-0.7RC1
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
4)./configure --with-openssl
5)make
6)make install
7)配置/etc/pam.d/vsftpd
内容如下(注意一下实际pam_mysql.so的路径,进行相应更改.)
auth required /usr/lib/security/pam_mysql.so user=virtual passwd=adm0509 host=/tmp/mysql.sock db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1
account required /usr/lib/security/pam_mysql.so user=virtual passwd=adm0509 host=/tmp/mysql.sock db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1
说明:如果MYSQL安装好以后,要修改MYSQL某个数据库的启动用户密码的话,只要做如下两步操作:
1)修改/etc/pam.d/vsftpd内容.把2处类似passwd=adm0509这样的密码改成你要设置的密码.
2)进入mysql后,运行
grant select on vsftpd.users to virtual
[email=virtual@localhost]@localhost[/email]
identified by 'yourpasswd';
grant insert on vsftpd.logs to virtual
[email=virtual@localhost]@localhost[/email]
identified by 'yourpasswd';
第1)步与第2)步的密码要一致.
3)重启MYSQL.
4、 配置vsftpd
/etc/vsftpd/vsftpd.conf内容如下
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual '第三中1步创建的用户名
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
virtual_use_local_privs=YES
pam_service_name=vsftpd '/etc/pam.d/vsftpd文件名
anon_max_rate=30000 '限制虚拟帐号下载速率
local_max_rate=30000 '限制本地帐号下载速率
max_per_ip=2 '同时只能有2线程在下载
dirlist_enable=NO '关闭帐号登录后的ls功能
重启VSFTP服务,此时客户端就lyjjr1和lyjjr2登录就可以访问FTP空间了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfydj.html