CentOS6.3+vsftpd+mysql+pam_mysql实现虚拟用户管理的ftp服务器
本文大部分内容学习自中国最大的Linux培训机构“马哥教育”www.magedu.com
一、准备相关软件以及开发环境
1、安装vsftpd mysql-server mysql-devel pam-devel
# yum -y install vsftpd mysql-server mysql-devel pam-devel
# yum -y groupinstall "DevelopmentTools"
2、编译安装pam_mysql认证模块(库)
先下载pam_mysql:
#wget https://sourceforge.net/projects/pam-mysql/files/latest/download?source=typ_redirect --no-check-certificate
编译安装pam_mysql
# tar -xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr
# make
# make install
二、创建虚拟用户帐号
1、准备数据库及表
启动mysqld
# service mysqld start
#mysql
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to'vsftpd'@'localhost' identified by 'vsftpd123';
mysql> grant select on vsftpd.* to'vsftpd'@'127.0.0.1' identified by 'vsftpd123';
mysql> flush privileges;
mysql> use vsftpd;
mysql> CREATE TABLE users (id INT AUTO_INCREMENTNOT NULL,
-> nameCHAR(20) BINARY NOT NULL,
->password CHAR(64) BINARY NOT NULL,
-> PRIMARY KEY(id));
2、添加虚拟用户
根据具体情况添加用户,由于pam_mysql的password()函数与MySQL的password()函数算法可能不太相同,此处使用明文密码。有兴趣的可以测试其它加密方式,如md5
mysql> inser tinto users(name,password) values ('user1','user123'),('user2','user123');
3、测试mysql的用户及表是否有效
# mysql -uvsftpd-p
mysql> showdatabases;
+--------------------+
| Database |
+--------------------+
|information_schema |
| test |
| vsftpd |
+--------------------+
3 rows in set(0.00 sec)
mysql> usevsftpd;
mysql> select *from users;
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 1 | user1 | user123 |
| 2 | user2 | user123 |
+----+-------+----------+
2 rows in set(0.00 sec)
以上结果证明,数据库是正常可用的。
三、配置vsftpd
1、建立pam认证文件
# vim /etc/pam.d/vsftpd.mysql
添加以下两行
auth required /lib/security/pam_mysql.so user=vsftpdpasswd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd123 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
内容解释:
auth 权限认证
required 必需通过认证
/lib/security/pam_mysql.so调用库文件
user=vsftpd 登录数据库用户名
passwd=vsftpd123 登录数据库密码
host=localhost 数据库主机地址,此处表示本机
db=vsftpd 数据库名称
table=users 用户帐号的表名
usercolumn=name 用户名字段
passwdcolumn=password 密码字段
crypt=0 表示密码的加密方式,0为明文,2为password函数加密
2、修改vsftpd.conf文件
# vim/etc/vsftpd/vsftpd.conf
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=ftpuser
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
然后添加虚拟用户所需要映射的系统用户ftpuser
# useradd -s/sbin/nologin -d /home/ftp ftpuser #没有系统登录权限,家目录为ftp
# chmod go+rx/home/ftp #添加其它用户组的权限为读执行
四、启动服务
# service vsftpd start
# chkconfig vsftpd on
登录测试:ftp://IP
可以用各种ftp客户端测试,包括浏览器,windows的资源管理器(我的电脑)
注意关闭iptabes或者添加策略。
五、配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
# mkdir/etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch user1user2
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让user1用户具有上传文件的权限,可以修改/etc/vsftpd/ vusers_config/user1文件,在里面添加如下选项即可。
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
六、vsftpd基础知识
vsftpd:
/etc/vsftpd 配置文件目录
/etc/init.d/vsftpd服务脚本
/usr/sbin/vsftpd主程序
/var/ftp 默认的数据文件目录,ftp根目录不能有写权限,可建立子目录
支持虚拟用户(基于PAM实现用户认证)
PAM的主要文件
/etc/ram.d/配置文件目录
/lib64/security/库文件目录
ftp用户类型
系统用户
匿名用户--> 映射到系统用户
虚拟用户 --> 映射到系统用户
默认情况下,如果允许系统用户直接登录,则其能切到大部分系统其它目录,而且还是明文传输的,这是非常危险的。
上传下载
/var/ftp ftp用户的家目录
匿名用户访问目录
文件服务权限=文件系统权限+文件共享权限
/etc/vsftpd/vsftpd.conf配置文件解释
anonymous_enable=YES 匿名用户,默认支持
local_enable=YES 系统用户,默认支持
write_enable=YES 系统用户上传文件,默认支持
anon_upload_enable=YES 匿名用户上传,默认禁止
anon_mkdir_write_enable=YES 匿名用户创建目录,默认禁止
anon_other_write_enable=YES 匿名用户删除文件,默认禁止
dirmessage_enable=YES 在目录下建立.message文件写提示内容
xferlog_enable=YES 记录传输日志
xferlog_std_format=YES 传输日志标准格式,最好禁止
xferlog_file=/var/log/xferlog 记录传输日志的目录
idle_session_timeout=600 会话连接超时时间,单位秒,默认禁止
chroot_list_enable=YES 禁固用户只能在家目录活动
chroot_list_file=/etc/vsftpd/chroot_list 禁固用户列表文件,手动创建
chroot_local_user=YES 禁固所有用户只能在家目录活动,默关
listen=YES 把FTP服务定义为独立守护进程
守护进程:
独立守护进程:适用用户量比较大,会话时间长
瞬时守护进程:由xinetd代为管理
pam_service_name=vsftpd pam管理的配置文件,目录/etc/pam.d/vsftpd
userlist_enable=YES 启用/etc/vsftpd/user_list文件
userlist_deny=YES 禁止/etc/vsftpd/user_list文件用户登录
guest_enables=YES 支持虚拟用户
guest_username=vuser 虚拟用户所映射到的系统用户名
max_clients vsftpd服务同时最大支持的连接用户数
max_per_ip 每个IP同时支持的最大连接用户数