一入IT深似海·

记忆是掌心的水,不伦你摊开还是握紧,终究还是会从指缝中一滴一滴流淌干净。只是,那水的凉意。却是可以让人始终无法忘记。 博客园首页新随笔联系订阅管理 随笔 - 28 文章 - 0 评论 - 0 FTP服务-实现vsftpd虚拟用户 作者:@一入IT深似海· 个人网站:www.liuxiaosi.com.cn 本文为作者原创,转载请注明出处:https://www.cnblogs.com/xsuid/p/9537235.html 目录 实现基于文件验证的vsftpd虚拟用户,每个用户独立一个文件夹 1、创建用户数据库文件 2、设置权限与编译此文件 3、创建linux用户和ftp目录(这个账号将来虚拟账号映射成它) 4、修改pam配置文件 5、让主配置文件知道你要用自己修改的pam模块 6、把所有系统账号映射成我们创建的vftpuser账号,并关闭linux系统账号登陆 7、虚拟用户建立独立的配置文件 8、让两个虚拟用户进来时看到的文件夹不一样 实现:基于MYSQL验证的vsftpd虚拟用户 一、安装所需要包和包组 在FTP服务器上安装vsftpd和pam_mysql包 1、解压缩pam模块 2、编译 3、创建数据库和表 3、准备一个pam配置文件(在FTP服务器上建立pam认证所需文件) 4、让ftp服务器知道调用我们配置的pam模块配置文件 5、映射为系统账号vftpuser 6、让登陆的账号权限不一样(针对每个用户都有自己的配置文件) 前几篇介绍了基础,这篇将具体实现几个案例 实现基于文件验证的vsftpd虚拟用户,每个用户独立一个文件夹 1、创建用户数据库文件 01 02 03 04 05 vim /etc/vsftpd/vusers.txt qq centos momo centos 备注:文件内容格式为奇数行为用户名,偶数行为密码 2、设置权限与编译此文件 01 02 03 cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db ##编译文件 chmod 600 vusers.db 备注:修改权限是为了安全 3、创建linux用户和ftp目录(这个账号将来虚拟账号映射成它) 01 02 useradd -s /sbin/nologin vftpuser chmod 555 /home/vftpuser/ ###把用户家目录的写权限去掉 备注:映射账号对根要没有写权限 01 02 mkdir upload ##创建上传用的文件夹 chown vftpuser upload/ 备注:把这个文件夹的所属人改为vftpuser用户,次用户虽然对 /home/vftpuser/ 就也是根,没有写权限,但是对根下的目录有写权限。 把匿名写权限打开 clipboard 4、修改pam配置文件 vim /etc/pam.d/vusers.db #这个名字叫什么都可 01 auth required pam_userdb.so db=/etc/vsftpd/vusers 注意:这个vusers名字一定要和第二步中创建的xxxx.db名字一样 01 account required pam_userdb.so db=/etc/vsftpd/vusers 5、让主配置文件知道你要用自己修改的pam模块 clipboard 备注:放在vusers.txt里面的就是合法用户,可以登陆 6、把所有系统账号映射成我们创建的vftpuser账号,并关闭linux系统账号登陆 vim /etc/vsftpd/vsftpd.conf 01 02 guest_enable=YES guest_username=vftpuser 7、虚拟用户建立独立的配置文件 vim /etc/vsftpd/vsftpd.conf 01 user_config_dir=/etc/vsftpd/vftpuser.d/ 创建上面这个文件夹创建出来 01 mkdir /etc/vsftpd/vftpuser.d/ 在这个文件夹目录下创建针对虚拟用户的配置 01 02 03 04 [root@centos7_77 vftpuser.d]# cat > qq anon_upload_enable=YES anon_mkdir_write_enable=YES 备注:意思是说虚拟用户qq有匿名写权限 8、让两个虚拟用户进来时看到的文件夹不一样 vim /etc/vsftpd/vftpuser.d/qq 01 local_root=/data/qq 备注:要是这个文件夹不存在就创建 mkdir /data/qq 备注:在qq目录下创建个文件用于测试 touch /data/qq/qq.txt 重启,测试 clipboard 备注:想要增加用户,在vusers.txt文件中写入,再生成db文件 实现:基于MYSQL验证的vsftpd虚拟用户 说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器 一、安装所需要包和包组 在数据库服务器上安装包: Centos7:在数据库服务器上安装 01 02 03 yum –y install mariadb-server systemctl start mariadb.service systemctl enable mariadb Centos6:在数据库服务器上安装 01 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 https://sourceforge.net/projects/pam-mysql/ 1、解压缩pam模块 [root@centos7_77 ~]# tar xvf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1/ 2、编译 01 [root@centos7_77 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr 备注:这样需要注意指定的位置,mysql 现在还没有pam_mysql.so clipboard 开始make [root@centos7_77 pam_mysql-0.7RC1]# make && make install clipboard 3、创建数据库和表 1)创建ftpdb数据库 MariaDB [(none)]> create database ftpdb; 2)授权一个用户可以连这个数据库(有读权限就行) MariaDB [(none)]> grant select on ftpdb.* to vsftpd@'localhost' identified by 'centos'; 3)创建一个表 MariaDB [ftpdb]> create table users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL ); 4)往表里增加虚拟用户 MariaDB [ftpdb]> INSERT INTO users(name,password) values('gg',password('centos')); MariaDB [ftpdb]> INSERT INTO users(name,password) values('mm',password('centos')); clipboard 3、准备一个pam配置文件(在FTP服务器上建立pam认证所需文件) 01 02 03 04 05 06 07 cd /etc/pam.d/ vim vsftpd.mysql auth required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=centos host=localhost db=ftpdb table=users usercolumn=name passwdcolumn=passw ord crypt=2 备注: 配置字段说明 • 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()函数加密 4、让ftp服务器知道调用我们配置的pam模块配置文件 01 vim /etc/vsftpd/vsftpd.conf clipboard 5、映射为系统账号vftpuser vim /etc/vsftpd/vsftpd.conf 01 02 guest_enable=YES guest_username=vftpuser 备注:意思说,启动guest用户,系统用户映射为guest用户,而guest用户是vftpuser, 别忘了去掉此用户的家目录的读W权限 6、让登陆的账号权限不一样(针对每个用户都有自己的配置文件) 指定用户存放配置的文件夹 01 02 03 04 05 06 07 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vftpuser.d cd /etc/vsftpd/vftpuser.d [root@centos7_77 vftpuser.d]# cat > mm local_root=/data/mm cat > gg local_root=/data/gg 备注:要想gg mm 充当虚拟用户的根必须没有写权限 01 02 03 04 05 [root@centos7_77 data]# chmod a=rx mm [root@centos7_77 data]# chmod a=rx gg 再gg、mm目录下创建个文件好测试 [root@centos7_77 gg]# touch gg.txt [root@centos7_77 mm]# touch mm.txt 重启 测试 clipboard clipboard 备注:要想让gg用户有写权限,在/etc/vsftpd/vftpuser.d/gg文件中加入 anon_upload_enable=YES anon_mkdir_write_enable=YES 还要对/data/gg这个目录要有写权限 setfacl -m u:vftpuser:rwx /data/gghttps://www.cnblogs.com/xsuid/p/9537235.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信