Linux FTP虚拟用户实现之vsftpd
2013-10-30 10:40
666 查看
vsftpd可以支持虚拟用户,这样这些用户跟系统用户不搭嘎,只能访问FTP服务提供的资源,系统势必就要安全的多了。我们实现FTP匿名用户可以有两种方式,可以把虚拟用户列表保存到本地一个数据文件中,也可以把数据保存至数据库文件中。下面分别介绍两种实现方式:
本地数据文件方式:
环境及需求:CentOS5.8
软件包:vsftpd, db4-utils(要用到其提供的db_load工具把文本格式的用户列表转换成二进制的数据格式供vsftpd使用)
1、安装所需软件包
yum –y install vsftpd db4-utils
2、创建用户口令文件
[root@ha1 vsftpd]# cd /etc/vsftpd/
[root@ha1 vsftpd]# vim vuser
tom /*奇数行为用户名
tompwd /*偶数行为上面用户的密码
jerry
jerrypwd
3、生成用户口令文件,并记得更改文件权限只有root有读写权限
[root@ha1 vsftpd]# db_load -T -t hash -f vuser vuser.db
[root@ha1 vsftpd]# ls
chroot_list ssl vsftpd.conf vuser
ftpusers user_list vsftpd_conf_migrate.sh vuser.db
[root@ha1 vsftpd]# chmod 700 vuser vuser.db
[root@ha1 vsftpd]# ll vuser vuser.db
-rwx------ 1 root root 26 Oct 29 13:40 vuser
-rwx------ 1 root root 12288 Oct 29 13:42 vuser.db
4、为其提供PAM的配置文件
[root@ha1 vsftpd]# cd /etc/pam.d/
[root@ha1 pam.d]# vim vsftpd.vuser
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser 注意这里db文件名后面的.db不用带上,这个相当于后缀吧,.db前面的才是文件名
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码
[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx------ 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/
6、编辑vsftpd配置文件使其支持虚拟用户
[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf #添加以下几行
guest_enable=YES /*启用虚拟用户
guest_username=vftpuser /*指定FTP虚拟用户映射到的系统用户
pam_service_name=vsftpd.vuser /*定义PAM认证文件
保存退出,重启vsftpd服务
service vsftpd restart
7、用虚拟账号登陆验证,可以看到可以成功使用tom账号登陆ftp并且上传文件,文件位于vftpuser家目录/var/ftp/vuser下
通过MySQL数据库服务器提供口令数据
1、安装mysql
yum –y install mysql-server mysql-devel
2、编译安装pam-mysql
下载地址:http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
下载完解压,编译安装,configure 只要指定一下—with-mysql即可,
[root@ha1 pam_mysql-0.7RC1]# make && make install
3、创建用户口令数据库
创建一个用户文件 vim /etc/vsftpd/vuser (字段之间用Tab键隔开,由于我的表有个id字段,所以第一个字段直接加个Tab)
tom tom
jerry jerry
我们用vftpuser登陆mysql验证一下是否具有查询权限
4、为mysql创建一个pam配置文件
[root@ha1 pam.d]# cd /etc/pam.d
[root@ha1 pam.d]# vim vsftpd.mysql
auth required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password crypt=0
account required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password ctypt=0
5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码
[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx------ 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/
6、修改vsftpd配置文件,支持通过mysql认证
[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vftpuser
pam_service_name=vsftpd.mysql
anon_world_readable_only=NO
用windows客户端登陆验证,需要注意的是虚拟用户默认使用的是匿名用户的权限,配置文件要加上一句anon_world_readable_only=NO,不然的话ls命令结果列不出来。
虚拟用户高级设置
虚拟用户默认使用的匿名用户的权限,当然vsftpd还支持继承系统用户的权限:
virtual_use_local_privs参数
当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
此外,如果有需要,我们还可以为我们的虚拟用户分别定义权限:
此时只要在vsftpd.conf加上一行
user_config_dir=/etc/vsftpd/vsftpd.conf
然后创建vsftpd.conf目录,在些目录下分别创建与虚拟用户同名的文件,里面写上相应的权限设置就可以啦,更多的功能小伙伴根据需要自由发挥啦。
本地数据文件方式:
环境及需求:CentOS5.8
软件包:vsftpd, db4-utils(要用到其提供的db_load工具把文本格式的用户列表转换成二进制的数据格式供vsftpd使用)
1、安装所需软件包
yum –y install vsftpd db4-utils
2、创建用户口令文件
[root@ha1 vsftpd]# cd /etc/vsftpd/
[root@ha1 vsftpd]# vim vuser
tom /*奇数行为用户名
tompwd /*偶数行为上面用户的密码
jerry
jerrypwd
3、生成用户口令文件,并记得更改文件权限只有root有读写权限
[root@ha1 vsftpd]# db_load -T -t hash -f vuser vuser.db
[root@ha1 vsftpd]# ls
chroot_list ssl vsftpd.conf vuser
ftpusers user_list vsftpd_conf_migrate.sh vuser.db
[root@ha1 vsftpd]# chmod 700 vuser vuser.db
[root@ha1 vsftpd]# ll vuser vuser.db
-rwx------ 1 root root 26 Oct 29 13:40 vuser
-rwx------ 1 root root 12288 Oct 29 13:42 vuser.db
4、为其提供PAM的配置文件
[root@ha1 vsftpd]# cd /etc/pam.d/
[root@ha1 pam.d]# vim vsftpd.vuser
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser 注意这里db文件名后面的.db不用带上,这个相当于后缀吧,.db前面的才是文件名
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码
[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx------ 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/
6、编辑vsftpd配置文件使其支持虚拟用户
[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf #添加以下几行
guest_enable=YES /*启用虚拟用户
guest_username=vftpuser /*指定FTP虚拟用户映射到的系统用户
pam_service_name=vsftpd.vuser /*定义PAM认证文件
保存退出,重启vsftpd服务
service vsftpd restart
7、用虚拟账号登陆验证,可以看到可以成功使用tom账号登陆ftp并且上传文件,文件位于vftpuser家目录/var/ftp/vuser下
[root@ha1 pam.d]# !ftp ftp 192.168.188.128 Connected to 192.168.188.128. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.188.128:root): tom 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp> lcd /etc/ Local directory now /etc ftp> put issue local: issue remote: issue 227 Entering Passive Mode (192,168,188,128,231,93) 150 Ok to send data. 226 File receive OK. 47 bytes sent in 0.0045 seconds (10 Kbytes/s) ftp> bye 221 Goodbye. [root@ha1 pam.d]# ls /var/ftp/vuser/ issue
通过MySQL数据库服务器提供口令数据
1、安装mysql
yum –y install mysql-server mysql-devel
2、编译安装pam-mysql
下载地址:http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
下载完解压,编译安装,configure 只要指定一下—with-mysql即可,
[root@ha1 ~]# tar xf pam_mysql-0.7RC1.tar.gz [root@ha1 ~]# cd pam_mysql-0.7RC1 [root@ha1 pam_mysql-0.7RC1]# ls acinclude.m4 config.status install-sh mkinstalldirs pkg.m4 aclocal.m4 config.sub libtool NEWS README ChangeLog configure ltmain.sh pam_mysql.c stamp-h config.guess configure.in Makefile pam_mysql.la stamp-h.in config.h COPYING Makefile.am pam_mysql.lo config.h.in CREDITS Makefile.in pam_mysql.spec config.log INSTALL missing pam_mysql.spec.in [root@ha1 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr
[root@ha1 pam_mysql-0.7RC1]# make && make install
3、创建用户口令数据库
创建一个用户文件 vim /etc/vsftpd/vuser (字段之间用Tab键隔开,由于我的表有个id字段,所以第一个字段直接加个Tab)
tom tom
jerry jerry
mysql> CREATE DATABASE vsftpd; //创建数据库 Query OK, 1 row affected (0.03 sec) mysql> USE vsftpd; //切到数据库vsftpd Database changed mysql> CREATE TABLE vuser //创建用户表 -> (id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name CHAR(20) BINARY NOT NULL, -> password CHAR(48) BINARY NOT NULL); Query OK, 0 rows affected (0.10 sec) mysql> DESC vuser; //查看表结构 +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | smallint(6) | NO | PRI | NULL | auto_increment | | name | char(20) | NO | | NULL | | | password | char(48) | NO | | NULL | | +----------+-------------+------+-----+---------+----------------+ 3 rows in set (0.04 sec) mysql> LOAD DATA LOCAL INFILE "/etc/vsftpd/vuser" INTO TABLE vuser; //可以直接从文本文件中批量导入用户 Query OK, 4 rows affected, 12 warnings (0.04 sec) Records: 4 Deleted: 0 Skipped: 0 Warnings: 8 mysql> INSERT INTO vuser (name,password) VALUES ('bob',password('bob')),('tina','tina'); //当然也可以直接批量插入用户数据,这里我一个使用了mysql的password函数,一个没有使用,因为pam_mysql和mysql使用的password函数可能不一样,会导致无法认证,下面会分别测试一下 Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> GRANT SELECT ON vsftpd.* TO vftpuser@localhost IDENTIFIED BY 'vftpuser'; Query OK, 0 rows affected (0.10 sec) mysql> GRANT SELECT ON vsftpd.* TO vftpuser@127.0.0.1 IDENTIFIED BY 'vftpuser'; //这两行给予vftpuser用户vsftpd数据库所有表查询权限 Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; //刷新权限信息使权限生效 Query OK, 0 rows affected (0.04 sec)
我们用vftpuser登陆mysql验证一下是否具有查询权限
[root@ha1 ~]# mysql -u vftpuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.0.95 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | test | | vsftpd | +--------------------+ 3 rows in set (0.00 sec) mysql> USE vsftpd; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SHOW TABLES; +------------------+ | Tables_in_vsftpd | +------------------+ | vuser | +------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM vuser; +----+-------+------------------+ | id | name | password | +----+-------+------------------+ | 1 | tom | tom | | 2 | jerry | jerry | | 3 | tina | tina | | 4 | bob | 7d67547927a4589e | +----+-------+------------------+ 4 rows in set (0.00 sec)
4、为mysql创建一个pam配置文件
[root@ha1 pam.d]# cd /etc/pam.d
[root@ha1 pam.d]# vim vsftpd.mysql
auth required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password crypt=0
account required /usr/lib/security/pam_mysql.so user=vftpuser passwd=vftpuser host=localhost db=vsftpd table=vuser usercolumn=name passwordcolumn=password ctypt=0
5、创建虚拟用户映射的系统用户,指定其家目录,不需要登陆权限及密码
[root@ha1 pam.d]# useradd -d /var/ftp/vuser -s /sbin/nologin vftpuser
[root@ha1 pam.d]# ll -d /var/ftp/vuser/
drwx------ 3 vftpuser vftpuser 4096 Oct 29 13:55 /var/ftp/vuser/
6、修改vsftpd配置文件,支持通过mysql认证
[root@ha1 pam.d]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vftpuser
pam_service_name=vsftpd.mysql
anon_world_readable_only=NO
用windows客户端登陆验证,需要注意的是虚拟用户默认使用的是匿名用户的权限,配置文件要加上一句anon_world_readable_only=NO,不然的话ls命令结果列不出来。
虚拟用户高级设置
虚拟用户默认使用的匿名用户的权限,当然vsftpd还支持继承系统用户的权限:
virtual_use_local_privs参数
当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
此外,如果有需要,我们还可以为我们的虚拟用户分别定义权限:
此时只要在vsftpd.conf加上一行
user_config_dir=/etc/vsftpd/vsftpd.conf
然后创建vsftpd.conf目录,在些目录下分别创建与虚拟用户同名的文件,里面写上相应的权限设置就可以啦,更多的功能小伙伴根据需要自由发挥啦。
相关文章推荐
- Linux系统vsftpd下建立虚拟用户的脚本实现
- 基于vsftpd+pam+mysql架设ftp并实现虚拟用户登录
- FTP服务-实现vsftpd虚拟用户
- Linux 下的FTP服务-2-vsftpd配置虚拟用户
- Linux下vsftpd安装以及配置FTP虚拟用户实践
- FTP服务系列之vsftpd+pam+mysql实现虚拟用户认证
- Linux运维 第三阶段 (三) VSFTPD(ftps及vsftpd+pam+mysql实现虚拟用户认证)
- vsftpd+openssl+mysql实现sftp和ftp虚拟用户
- Linux下vsftpd安装以及配置FTP虚拟用户实践
- Vsftpd虚拟用户配置(Linux FTP)
- 基于vsftpd+pam+mysql架设ftp并实现虚拟用户登录
- Linux下vsftpd基本配置和虚拟用户设置的安全方法
- linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建
- FTP服务器工作原理及如何通过PAM认证实现虚拟用户登录
- Linux 下vsftpd配置虚拟用户并为其划分工作根目录
- 探究ftp的奥妙之系统用户如何上传下载文件、vsftpd如何识别证书并利用客户端来实现远程连接传输
- Debian+vsftpd+MySQL实现虚拟用户
- 基于vsftpd + pam + mysql实现虚拟用户访问机制
- redhat5 linux vsftpd 添加ftp用户
- linux下vsftpd虚拟用户设置