热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vsFTPd虚拟用户的配置方法

两种方式建立Vsftpd虚拟用户我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。本地用户登录:使用系统用户登录,在/etc/passwd中。虚拟用户登录:这是FTP专有用户,有两种
  两种方式建立Vsftpd虚拟用户
  
  我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。
  匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。
  本地用户登录:使用系统用户登录,在/etc/passwd中。
  虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。
  FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。
  
  本文实验的Linux系统是CentOS 5 update2
  
  一、本地数据文件方式
  1. 添加虚拟用户口令文件
  [root@CentOS5 /]#vi /etc/vsftpd/vftpuser.txt
  添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。
  bobyuan #用户名
  123456 #密码
  markwang #用户名
  123456 #密码
  
  2. 生成虚拟用户口令认证文件
  将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。
  首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。
  [root@CentOS5 /]#rpm ?qa |grep db4-utils
  [root@CentOS5 /]#rpm ?ivh db4-utils-4.3.29-9.fc6.i386.rpm
  下面使用db_load命令生成虚拟用户口令认证文件。
  [root@CentOS5 /]#db_load ?T ?t hash ?f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db
  
  3. 编辑vsftpd的PAM认证文件
  在/etc/pam.d目录下,
  [root@CentOS5 /]#vi /etc/pam.d/vsftpd
  将里面其他的都注释掉,添加下面这两行:
  auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
  account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
  
  4. 建立本地映射用户并设置宿主目录权限
  所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。
  [root@CentOS5 /]#useradd ?d /home/vftpsite ?s /sbin/nologin vftpuser
  [root@CentOS5 /]#chmod 700 /home/vftpsite
  
  5. 配置vsftpd.conf(设置虚拟用户配置项)
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
  guest_enable=YES #开启虚拟用户
  guest_username=vftpuser #FTP虚拟用户对应的系统用户
  pam_service_name=vsftpd #PAM认证文件
  
  6. 重启vsftpd服务
  [root@CentOS5 /]#service vsftpd restart
  
  7. 测试虚拟用户登录FTP
  C:\User\Administrator>ftp 192.168.120.240
  连接到192.168.120.240。
  220 Welcome to BOB FTP server
  用户(192.168.120.240(none)):markwang
  331 Please specify the password.
  密码:
  230 Login successful.
  
  二、数据库服务器(MySQL)方式
  1. 安装MySQL
  我使用的是Tar包安装的MySQL,版本号:mysql-6.0.8-alpha.tar.gz
  具体安装方法,请查看我的另一篇文章“部署LAMP+Discuz!7.0”。
  
  2. 建立本地映射用户并设置宿主目录权限
  [root@CentOS5 /]#useradd ?d /home/vftpsite ?s /sbin/nologin vftpuser
  [root@CentOS5 /]#chmod 700 /home/vftpsite
  
  3. 配置vsftpd.conf(设置虚拟用户配置项)
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
  guest_enable=YES #开启虚拟用户
  guest_username=vftpuser #FTP虚拟用户对应的系统用户
  pam_service_name=vsftpd #PAM认证文件
  
  4. 在MySQL中建立用户口令数据库
  [root@CentOS5 /]#mysql ?u root ?p
  mysql> create database vftpuser; #建立虚拟用户数据库,库名vftpuser
  mysql> use vftpuser; #进入vftpuser数据库
  
  mysql> create table users(name char(16) binary,passwd char(16) binary); #建立虚拟用户口令表,表名users
  
  mysql> insert into users (name,passwd) values ('bobyuan',password('111'));
  mysql> insert into users (name,passwd) values ('markwang',password('111'));
  #建立两个虚拟用户,bobyuan和markwang
  注:在这里我用这种方法添加的虚拟用户密码都是经过MySQL加密的,加密后的密码pam-mysql不能识别(MySQL和pam-mysql兼容性有些问题),因此本次实验使用明文保存密码。
  添加明文密码:
  方法一:单个添加用户
  mysql> insert into users (name,passwd) values ('bobyuan', '111');
  mysql> insert into users (name,passwd) values ('markwang',‘111');
  方法二:批量添加用户
  新建vftpuser.txt文件
  [root@CentOS5 /]#vi vftpuser.txt
  添加用户名和密码,注意字段数据之间要用Tab键隔开。
  bobyuan 111
  markwang 111
  mysql>use vftpuser;
  mysql>load data local infile “/vftpuser.txt”into table users;
  mysql>flush privileges;
  
  mysql> grant select on vftpuser.users to vftpuser@localhost identified by '111111'; #授权vftpuser这个账号可以读取vftpuser数据库的user表
  
  5. 验证第4步的设置是否成功
  [root@CentOS5 /]#mysql ?u vftpuser ?p
  mysql>show databases;
  mysql>use vftpuser;
  mysql>show tables;
  mysql>select * from users;
  mysql>quit
  如下图:
  
  
  6. 编译MySQL的PAM认证模块
  查看/lib/security目录下有没有MySQL对应的PAM模块。
  
  如果没有则下载pam-mysql安装(http://sourceforge.net/projects/pam-mysql),
  我下载的是pam_mysql-0.7RC1.tar.gz。
  [root@CentOS5 /]#cd /usr/local/src
  [root@CentOS5 src]#tar ?zxvf pam_mysql-0.7RC1.tar.gz
  [root@CentOS5 src]#cd pam_mysql-0.7RC1
  [root@CentOS5 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql/ --with-pam-mods-dir=/lib/security/
  [root@CentOS5 pam_mysql-0.7RC1]#make
  [root@CentOS5 pam_mysql-0.7RC1]#make install
  
  7. 编辑vsftpd的PAM认证文件
  在/etc/pam.d目录下,
  [root@CentOS5 /]#vi /etc/pam.d/vsftpd
  将里面其他的都注释掉,添加下面这两行:
  auth required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
  account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
  crypt=0:表示口令使用明文方式保存在数据库中
  crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
  crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
  crypt=3:表示口令使用MD5散列值的方式保存在数据库中
  
  8. 重启vsftpd服务
  [root@CentOS5 /]#service vsftpd restart
  
  9. 测试虚拟用户登录FTP
  C:\User\Administrator>ftp 192.168.120.240
  Connected to 192.168.120.240.
  220 Welcome to BOB FTP server
  User (192.168.120.240:(none)): bobyuan
  331 Please specify the password.
  Password:
  230 Login successful.
  ftp> quit
  221 Goodbye.
  
  三、虚拟用户高级设置
  1. 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时,虚拟用户只能下载、删除和重命名文件,无其他权限。
  
  2. 建立各个虚拟用户自身的配置文件
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
  添加:
  user_config_dir=/etc/vsftpd/vsftpd_user_conf
  [root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf
  编辑bobyuan的配置文件
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan
  添加:
  anon_world_readable_only=NO #开放bobyuan的下载权限(只能下载)。注意这个地方千万不能写成YES,否则bobyuan将不能列出文件和目录。
  编辑markwang的配置文件
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/markwang
  添加:
  write_enable=YES #开放markwang的写权限
  anon_world_readable_only=NO #开放markwang的下载权限
  anon_upload_enable=YES #开放markwang的上传权限
  anon_mkdir_write_enable=YES #开放markwang创建目录的权限
  anon_other_write_enable=YES #开放markwang删除和重命名的权限
  
  四、虚拟用户配置文件(实验)
  1. 所有虚拟用户使用统一配置
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
  write_enable=YES
  anonymous_enable=NO
  local_enable=YES
  guest_enable=YES
  guest_username=vftpuser
  virtual_use_local_privs=NO
  pam_service_name=vsftpd
  anon_world_readable_only=NO #可以下载
  anon_upload_enable=NO(默认值) #不能上传
  anon_mkdir_write_enable=NO(默认值) #不能新建文件夹
  anon_other_write_enable=NO(默认值) #不能删除和重命名文件
  ftpd_banner=Welcome to BOB FTP server
  xferlog_enable=YES
  xferlog_file=/var/log/vsftpd.log
  xferlog_std_format=YES
  ascii_upload_enable=YES
  ascii_download_enable=YES
  tcp_wrappers=NO
  setproctitle_enable=YES
  listen_port=21
  connect_from_port_20=YES
  idle_session_timeout=600
  data_connection_timeout=120
  max_clients=0
  max_per_ip=3
  local_max_rate=512000
  
  2. 各个虚拟用户使用自身配置
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf
  write_enable=YES
  anonymous_enable=NO
  local_enable=YES
  guest_enable=YES
  guest_username=vftpuser
  virtual_use_local_privs=NO
  pam_service_name=vsftpd
  user_config_dir=/etc/vsftpd/vsftpd_user_conf
  ftpd_banner=Welcome to BOB FTP server
  xferlog_enable=YES
  xferlog_file=/var/log/vsftpd.log
  xferlog_std_format=YES
  ascii_upload_enable=YES
  ascii_download_enable=YES
  tcp_wrappers=NO
  setproctitle_enable=YES
  listen_port=21
  connect_from_port_20=YES
  idle_session_timeout=600
  data_connection_timeout=120
  max_clients=0
  max_per_ip=3
  local_max_rate=512000
  
  [root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf
  编辑bobyuan(FTP匿名用户)的配置文件
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan
  anon_world_readable_only=NO
  编辑ftpadmin(FTP匿名管理员)的配置文件
  [root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/ftpadmin
  anon_world_readable_only=NO
  anon_upload_enable=YES
  anon_mkdir_write_enable=YES
  anon_other_write_enable=YES
  
  
推荐阅读
author-avatar
liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有