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

VSFTPD服务器中新建虚拟用户

如果系统已经安装了rpm,可以直接修改rpm的配置文件rpm的配置文件在/etc/vsftpd/vsftpd.conf如果是tar源码安装,配置文件在/etc/vsftpd.confrpm的可执行文件在/usr/sbin/vsftpdtar的可执行文件在/usr/local/sbin/vsftpd不要在已经安装了rpm

  如果系统已经安装了rpm,可以直接修改rpm的配置文件

  rpm的配置文件在/etc/vsftpd/vsftpd.conf

  如果是tar源码安装,配置文件在/etc/vsftpd.conf

  rpm的可执行文件在/usr/sbin/vsftpd

  tar的可执行文件在/usr/local/sbin/vsftpd

  不要在已经安装了rpm的情况下去用tar编译,我就是这么干的,结果弄的我晕死

  因为默认的PATH搜索路径中,/usr/sbin/ 是比/usr/local/sbin/优先的。

  rpm安装很简单,tar安装也很简单,需要做的工作就是修改配置文件

  如果从源码安装,我们可以打开一些功能

  # vi builddefs.h \\编辑builddefs.h 文件,文件内容如下:

  #ifndef VSF_BUILDDEFS_H

  #define VSF_BUILDDEFS_H

  #undef VSF_BUILD_TCPWRAPPERS

  #define VSF_BUILD_PAM

  #undef VSF_BUILD_SSL

  把需要的功能前面的undef 改成define,然后编译就可以用了。

  tcp_wrappers是一个比较有用的功能,

  创建必要的帐号,目录:

  # useradd nobody //可能你的系统已经存在此帐号,那就不用建立

  # mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立

  # mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立

  # useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立

  # chown root:root /var/ftp

  # chmod og-w /var/ftp

  请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin

  #make

  #make install

  这样就安装完成了。接下来要做的事情就是修改配置文件

  虚拟用户形式实现(db及mysql形式)

  虚拟用户可以采用两种方法,一种是db,一种是mysql集成

  db方式

  1)先看系统是否安装了db的软件包。默认应该是有了

  # rpm ?qa | grep db4

  db4-devel-4.2.52-7.1

  db4-4.2.52-7.1

  db4-utils-4.2.52-7.1

  2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如

  # vi /home/logins.txt

  coolerfeng

  12345

  (3)建立数据库文件并设置文件属性

  # db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db

  # chmod 600 /etc/vsftpd_login.db

  (4)建立认证文件

  # vi /etc/pam.d/ftp 插入如下两行

  auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login

  account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

  (5)建立一个虚拟用户

  useradd -d /home/vsftpd -s /sbin/nologin vsftpd

  ls -ld /home/vsftpd

  drwx------ 3 vsftpd vsftpd 1024 Jun 6 22:55 /home/vsftpd/

  (6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)

  # vi /etc/vsftpd-pam.conf

  listen=YES

  listen_port=21

  tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)

  listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)

  anonymous_enable=NO

  local_enable=YES //PAM方式此处必须为YES,如果不是将出现如下错误:

  500 OOPS: vsftpd: both local and anonymous access disabled!

  write_enable=NO

  anon_upload_enable=NO

  anon_mkdir_write_enable=NO

  anon_other_write_enable=NO

  chroot_local_user=YES

  guest_enable=YES

  guest_username=vsftpd //这两行的意思是采用虚拟用户形式

  virtual_use_local_privs=YES //虚拟用户和本地用户权限相同

  pasv_enable=YES //建立资料联机采用被动方式

  pasv_min_port=30000 //建立资料联机所可以使用port 范围的上界,0表示任意。默认值为0。

  pasv_max_port=30999 //建立资料联机所可以使用port 范围的下界,0表示任意。默认值为0。

  (7)启动程序

  # /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &

  (8)测试连通及功能

  # vi /home/vsftpd/test //建立一个文件,内容如下

  1234567890

  # chown vsftpd.vsftpd /home/vsftpd/test

  # ftp 127.0.0.1

  Connected to 127.0.0.1.

  220 (vsFTPd 2.0.3)

  530 Please login with USER and PASS.

  530 Please login with USER and PASS.

  KERBEROS_V4 rejected as an authentication type

  Name (127.0.0.1:root): xuchen

  331 Please specify the password.

  Password:

  230 Login successful.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp>; pwd

  257 "/"

  ftp>; size test

  213 11

  ftp>; quit

  221 Goodbye.

  OK,用户名为xuchen,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!!

  如果我们需要用户看到文件,怎么办?也好办,在配置文件中加入如下语句:

  anon_world_readable_Only=NO //匿名登入者不能下载可阅读的档案,默认值为YES

  如果需要让用户上传文件和下载文件分开,建议如下这么做

  # vi /home/logins.txt

  xuchen

  12345

  upload

  45678

  //首先建立虚拟用户upload,密码为45678

  # db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新数据文件

  # mkdir /home/vsftpd/upload

  # vi /etc/vsftpd-pam.conf 加入如下语句

  user_config_dir=/etc/vsftpd_user_conf

  # mkdir /etc/vsftpd_user_conf

  # vi /etc/vsftpd_user_conf/upload 文件内容如下

  local_root=/home/vsftpd/upload

  write_enable=YES

  anon_world_readable_Only=NO

  anon_upload_enable=YES

  anon_mkdir_write_enable=YES

  anon_other_write_enable=YES

  # chmod 700 /home/vsftpd/upload

  # chown vsftpd.vsftpd /home/vsftpd/upload/

  这样,xuchen用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载

  对于用Mysql库存储用户名及密码的方式来说:

  就是把用户名和密码放在mysql库里,实现起来也相当简单

  (1)建立一个库并设置相应权限

  # mysql ?p

  mysql>;create database ftpd;

  mysql>;use ftpd;

  mysql>;create table user(name char(20) binary,passwd char(20) binary);

  mysql>;insert into user (name,passwd) values ('test1','12345');

  mysql>;insert into user (name,passwd) values ('test2','54321');

  mysql>;grant select on ftpd.user to ftpd@localhost identified by '123456';

  mysql>;flush privileges; 刷新权限设置

  mysql>;quit

  (2)下载libpam-mysql进行安装编译

  下载地址如下:

  [url]http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz[/url]

  假设我们把它放在了/home/xuchen目录下

  # cd /home/xuchen

  # tar xzvf pam_mysql-0.5.tar.gz

  # cd pam_mysql

  # make

  # cp pam_mysql.so /lib/security

  (3)建立PAM认证信息

  # vi /etc/pam.d/ftp ,内容如下

  auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

  account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

  注意:

  crypt= n

  crypt=0: 明文密码

  crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)

  crypt=2: 使用MYSQL中的password()函数加密

  crypt=3:表示使用md5的散列方式

  (4)建立本地虚拟用户

  # useradd -d /home/ftpd -s /sbin/nologin ftpd

  (5)下面就差修改vsftpd.conf文件了,我把我的提供给大家参考吧:)

  # vi /etc/vsftpd-pam1.conf

  anonymous_enable=NO

  local_enable=YES

  write_enable=YES

  local_umask=022

  anon_upload_enable=YES

  anon_mkdir_write_enable=YES

  anon_other_write_enable=YES

  chroot_local_user=YES

  guest_enable=YES

  guest_username=ftpd

  listen=YES

  listen_port=21

  pasv_enable=YES

  pasv_min_port=30000

  pasv_max_port=30999

  anon_world_readable_Only=NO

  virtual_use_local_privs=YES

  #user_config_dir=/etc/vsftpd_user_conf

  可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。

  (6)# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf & //以后台方式启动

  (7)测试连通

  # ftp 127.0.0.1

  Connected to 127.0.0.1.

  220 (vsFTPd 2.0.3)

  530 Please login with USER and PASS.

  530 Please login with USER and PASS.

  KERBEROS_V4 rejected as an authentication type

  Name (127.0.0.1:root): test1

  331 Please specify the password.

  Password:

  230 Login successful.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp>; pwd

  257 "/"

  ftp>; quit

  221 Goodbye.

  看,成功了!!这样就实现了mysql的认证方式,很简单吧??


推荐阅读
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 华为与红帽联手,加速开源电信软件革新
    华为与红帽携手合作,旨在加速开源电信软件的发展,以满足大型电信运营商对灵活网络解决方案的需求。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 了解多域名SAN SSL证书及其工作原理
    本文介绍了多域名SAN SSL证书的概念及其工作方式,探讨其在现代网络安全中的重要性和应用。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 探讨符合特定需求的个人网盘选择,包括分享功能、WebDAV支持及长期稳定性等。 ... [详细]
author-avatar
Amyb__ing舒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有