说明:本实验在两台CentOS主机上实现,一台作为FTP服务器,一台作数据库服务器 **实验:实现基于mysql验证的vsftpd虚拟用户** 1、安装所须要包和包组: 在数据库服务器上安装包: •Centos7:在数据库服务器上安装 yum –y install mariadb-server systemctl start mariadb.service systemctl enable mariadb •Centos6:在数据库服务器上安装 yum –y install mysql-server 在FTP服务器上安装vsftpd和pam_mysql包 centos6:pam_mysql由epel6的源中提供 yum install vsftpd pam_mysql centos7:无对应rpm包,需手动编译安装 yum -y groupinstall "Development Tools" yum -y install mariadb-devel pam-devel vsftpd 下载pam_mysql-0.7RC1.tar.gz ftp://172.16.0.1/pub/Sources/sources/pam/ tar xvf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1/ ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security make make install
2、在数据库服务器上建立虚拟用户帐号 # 1.创建存储虚拟用户数据库和链接的数据库用户 mysql> CREATE DATABASE vsftpd; mysql> SHOW DATABASES; ftp服务和mysql不在同一主机: mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu'; ftp服务和mysql在同一主机: mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu'; mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu'; mysql> FLUSH PRIVILEGES; # 2.准备相关表 mysql> USE vsftpd; Mysql> SHOW TABLES; mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); mysql>DESC users; 测试链接 mysql -uvsftpd -h 172.16.200.200 -pmagedu mysql> SHOW DATABASES; # 3.添加虚拟用户 根据须要添加所须要的用户,为了安全应该使用PASSWORD函数加密其密码后存储 mysql>DESC users; mysql> INSERT INTO users(name,password) values(‘wang',password('magedu')); mysql> INSERT INTO users(name,password) values(‘mage',password('magedu')); mysql> SELECT * FROM users;
3、在FTP服务器上配置vsftpd服务 # 1.在FTP服务器上创建pam认证所需文件 vi /etc/pam.d/vsftpd.mysql 添加以下两行 auth required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2 注意:参考README文档,选择正确的加密方式 crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密 配置字段说明: auth 表示认证 •account 验证帐号密码正常使用 •required 表示认证要经过 •pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也能够写绝对路径;后面为给此模块传递的参数 •user=vsftpd为登陆mysql的用户 •passwd=magedu 登陆mysql的的密码 •host=mysqlserver mysql服务器的主机名或ip地址 •db=vsftpd 指定链接msyql的数据库名称 •table=users 指定链接数据库中的表名 •usercolumn=name 当作用户名的字段 •passwdcolumn=password 当作用户名字段的密码 •crypt=2 密码的加密方式为mysql password()函数加密 # 2.创建相应用户和修改vsftpd配置文件,使其适应mysql认证 创建虚拟用户映射的系统用户及对应的目录 useradd -s /sbin/nologin -d /var/ftproot vuser chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限 mkdir /var/ftproot/{upload,pub} setfacl –m u:vuser:rwx /var/ftproot/upload 确保/etc/vsftpd.conf中已经启用了如下选项 anonymous_enable=YES 添加下面两项 guest_enable=YES guest_username=vuser 修改下面一项,原系统用户没法登陆 pam_service_name=vsftpd.mysql
4、启动vsftpd服务 service vsftpd start;systemctl start vsftpd chkconfig vsftpd on;systemctl enable vsftpd 查看端口开启状况 netstat -tnlp |grep :21
5、Selinux相关设置:在FTP服务器上执行 •restorecon -R /lib64/security •setsebool -P ftpd_connect_db 1 •setsebool -P ftp_home_dir 1 •chcon -R -t public_content_rw_t /var/ftproot/
6、测试:利用FTP客户端工具,以虚拟用户登陆验证结果 •tail /var/log/secure
自动挂载 可以使用autofs按须要挂载NFS共享,在空闲时自动卸载 由autofs包提供 系统管理器指定由/etc/auto.master自动挂载器守护进程控制的挂载点 自动挂载监视器访问这些目录并按要求挂载文件系统 文件系统在失活的指定间隔5分钟后会自动卸载 为全部导出到网络中的NFS启用特殊匹配 -host 至“browse” 参看帮助:man 5 autofs 支持含通配符的目录名 * server:/export/& 自动挂载依赖autofs服务 yum install autofs 主配置文件 /etc/auto.master /dev/cdrom /misc/cd vim /etc/auto.master 1 相对路径法 文件路径:/d1/d2/d3/nfsdir2 两部分 dirname /d1/d2/d3 basename nfsdir2 vim /etc/auto.master 只定义dirname(文件的路径名) /d1/d2/d3 /etc/nfsmount(与定义basename文件对应) vim /etc/nfsmount 只定义basename(路径的具体文件名) nfsdir2 -fstype=nfs,vers=3 192.168.27.7:/app/nfs2 例子 /misc/cd虚拟目录实现自动挂载 vim /etc/auto.misc cd -fstype=iso9660,ro :/dev/cdrom 总结:dirname和basename都不须要手工建立,启动autofs服务自动生成dirname,访问basename目录时自动生成这个目录 2 绝对路径法:直接匹配包括本地路径名称,不会影响本地目录结构(home目录下其它用户文件夹可见) vim /etc/auto.master /- /etc/wanghome vim /etc/wanghome /home/wang -fstype=nfs,rw 192.168.27.7:/data/wanghome home目录下的mage文件夹将不受影响
远程用户的家目录经过nfs服务共享 vim /etc/exports.d/nfs.exports data/wanghome *(rw) setfacl -m u:wang(uid 1000):rwx /data/wanghome cp /etc/skel/.[^.]* /data/wanghome/ useradd -u 500 nfsuser -M 建立用户时不建立家目录 setfacl -m u:500(nfsuser):rwx /data/wanghome 指定uid受权 客户端测试 手工挂载方式: mount 192.168.27.7:/data/wanghome /home/wang su - wang(uid 1000) su - mage(uid 500) 不一样客户端建立账号uid最好统一 autofs自动挂载方式: vim /etc/auto.master dirname=/home /home /etc/wanghome 自动挂载方式:home目录下的文件将由/etc/wanghome文件挂载决定 vim /etc/wanghome wang -fstype=nfs,rw 192.168.27.7:/data/wanghome
nfs服务:伪根方式将多个不一样的文件夹组织成根目录mysql
nfs服务器配置 yum install nfs-utils mkdir /nfsroot/nfsdir{1,2,3} –pv 伪根目录 mkdir /app/data{1,2,3} –pv 存放数据目录 挂载: mount –B /app/data1 /nfsroot/nfsdir1/ mount -B /app/data2 /nfsroot/nfsdir2/ mount –B /app/data3 /nfsroot/nfsdir3/ nfs服务默认是以nfsnobody身份运行的 setfacl -m u:nobody:rwx /app/data2 exportfs –r exportfs -v vim /etc/exports /nfsroot *(fsid=0,ro,crossmnt) /nfsroot/nfsdir1 *(ro) /nfsroot/nfsdir2 192.168.64.103(rw) 除了192.168.64.103主机外 继承父目录的只读权限 /nfsroot/nfsdir3 *(rw) systemctl restart nfs-server 客户端配置 只读:nfs服务设置的权限 拒绝访问:文件系统设置的权限 mkdir /mnt/nfs mount 192.168.64.7:/ /mnt/nfs 写的是根,其实挂载的是 192.168.64.7:/nfsroot 伪根目录 