热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

在vsFTPd服务器中建立虚拟用户

Linux的FTP服务支持3种用户:1.匿名帐户2.本地帐户3.虚拟用户为什么要使用虚拟用户:匿名帐户可以很好的保证FTP服务器的安全性,但是,对匿名用户的权限管理不够灵活.如果想对访问FTP的帐户给予更多的权限,就可以用本地帐户来实现.但是,本地帐户默认情况下

Linux的FTP服务支持3种用户:

1.匿名帐户

2.本地帐户

3.虚拟用户

为什么要使用虚拟用户:

匿名帐户可以很好的保证FTP服务器的安全性,但是,对匿名用户的权限管理不够灵活.如果想对访问FTP的帐户给予更多的权限,就可以用本地帐户来实现. 但是,本地帐户默认情况下是可以登陆Linux系统的,这样对Linux系统来说是一个安全隐患.那么怎么能在灵活的赋予FTP用户权限的前提下,保证 FTP服务器乃至整个Linux系统的安全呢?使用虚拟用户就是一种解决办法.

下面,我们就一起来学习,该怎样在Linux下配置FTP服务器的虚拟用户.

开始配置前,让我们先大概了解下FTP虚拟用户的工作原理:

虚拟用户,顾名思义,并不是一个合法的Linux系统帐户,但是他可以用来登陆该系统上运行的FTP服务器.

当用户在连接上FTP服务器后,会被要求输入用户名和密码.FTP服务器在拿到这个用户名和密码后,会调用相应的PAM认证模块对,和系统中的FTP认证文件进行相比较.如果该用户名和密码与FTP认证文件中的某条记录相符,就通过认证,然后该帐户就被映射成一个Linux下的本地帐户,然后根据使用该本地帐户对FTP资源进行访问.否则则断开该连接请求.

了解了FTP虚拟用户的工作原理后,我们就可以开始配置FTP虚拟用户了.

整个过程可以分这几个步骤:

1.准备一个虚拟用户的口令库文件.该文件中保存的用户名和密码是用户连接FTP服务器时,需要输入的用户名和密码.文件可以自己创建,位置无关紧要,文件格式为:奇数行为用户名,偶数行为密码.

例如:touch login.txt          //创建一个名为login.txt的虚拟用户口令库文件

     vi login.txt             //编辑该口令库文件

     mike                     //虚拟用户mike

     123                      //虚拟用户mike的密码

     john                     //虚拟用户john

     321                      //虚拟用户john的密码

保存退出.

2.用刚才建立的虚拟用户口令库文件生成FTP服务器的认证文件.该认证文件是一个被加密后的密文.PAM在调用相应的认证模块后,会对从FTP服务器发来的用户名和密码进行加密,然后在跟该文件进行对比,发现相符条目后,登陆用户才会被允许登陆.

db_load -T -t hash -f login.txt /etc/vsftpd/vsftpd_login.db

//在运行该命令前,别忘记安装db4-utils软件包,该包包含有db_load命令等.关于该命令的使用不在本文讨论范围内.其中-f参数后跟的为刚才创建的虚拟用户口令库文件.最后的路径为生成的FTP认证文件的存放位置.

为了进一步保证安全,可以将该FTP认证文件的权限设置为600.

3.建立虚拟用户所需要的PAM配置文件.由于FTP服务器在接受到用户的用户名和口令后会调用PAM认证,所以我们还要创建虚拟用户的PAM配置文件.

我们将该文件保存在/etc/pam.d目录下,文件名暂时取为:vsftpd.这里要注意一点就是,该文件名要与FTP服务主配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=vsftpd选项的选项值相同.

创建好该文件后,将下面的内容加入到该文件中:

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

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

改好后,保存退出(注意,/etc/pam.d/vsftpd 这个文件只能有上面两行代码有效,其他内容请用#号注释掉).注意3个红色文件的文件名.该3个文件为1个文件,只不过在使用中写法不同.

4.由于用户在通过PAM的认证后要被映射成一个本地用户,所以我们还要建立一个本地用户供虚拟用户使用.

我们只需要对该本地用户赋予FTP主目录的适当访问权限就行.即使FTP服务器遭到攻击,这个本地用户也没有访问其他目录的权限,相对比较安全一些.

useradd -d /home/ftpsite virtual        //用户名为virtual,主目录为FTP的根

chmod 700 /home/ftpsite                 //将其权限设置为700,可以根据实际情形进行修改

**更正(ftp目录归属与被用于ftp的虚拟用户的情况下)**

000(---------) 可切仅可登陆
500(r-x------) 可见文件列表,可下载,不可上传与ftp上不同名的文件,不可删除、改名、新建文件夹
700(rwx------) 可上传下载文件,可修改文件名,可删除文件,可建立文件夹,可移动文件(可做全部操作)(vsftpd 配置许可的情况下)

5.在FTP的主配置文件中,启用FTP虚拟用户.增加如下选项即可:

guest_enable=YES

guest_username=virtual             //将虚拟用户映射成本地的哪个用户.这里用的是virtual,刚才建

立的那个用户.

pam_service_name=/etc/vsftpd/vsftpd    //切记要修改该项的值

6.配置到这里就完成了,别忘记重启FTP服务进行测试.

7.为不同的虚拟用户分配权限

默认情况下,虚拟用户拥有相同的权限,就是virtual的权限,我们可以根据实际需求对不同的虚拟用户分配权限.

首先在FTP的主配置文件中加一个选项:

user_config_dir=/etc/vsftpd_user_conf             //文件名和路径都可以自己定义

然后创建该目录.

mkdir /etc/vsftpd_user_conf

下面就可以在该目录下编辑不同虚拟用户的权限配置文件了,比如要对mike编辑其权限.

touch mike                  //建立mike的权限文件.文件名要与虚拟用户名相同

可以根据实际需求为该文件添加下面的选项和值:

anon_world_readable_only=NO               //表示用户可以浏览FTP目录和下载文件

anon_upload_enable=YES                    //表示用户可以上传文件

anon_mkdir_write_enable=YES               //表示用户有创建和删除目录的权限

anon_other_write_enable=YES               //表示用户具有文件改名和删除文件的权限

 另外:修改 /etc/selinux 文件夹下的 config 文件,SELINUX=enforcing 修改为 SELINUX=disabled

到这里,虚拟用户就算完成配置完成了.

不过,有一个问题,好象在配置完虚拟用户后,不关FTP主配置文件里怎样配置,匿名用户和本地用户都不能登陆FTP服务器了.该怎样解决这个问题呢?

如果不能上传文件,如果其他配置都和上面一样,而且ftp主目录的权限设置为777都不能上传的话,则可能是防火墙的问题:

========= 以下转自:(http://www.hebgh.org/bbs/Topic.aspx?BoardID=18&TopicID=321)  =========

Vsftpd匿名用户无法上传的解决

在CentOS下,通过#yum -y install vsftpd安装好vsftpd并通过编辑/etc/vsftpd/vsftpd.conf进行配置

anonymous_enable=YES

local_enable=YES

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

在/var/ftp/下建立upload目录,设置/var/ftp/upload目录的属性为777,将其属主改为ftp用户

chmod -R 777 /var/ftp/upload

chown ftp:ftp /var/ftp/upload

重启vsftpd。

至此,按理说vsftpd的匿名用户在ftp的upload目录下应具有下载、上传、建目录、删除的权限,但在上传时,却出现了错误

200 Switching to Binary mode.

200   PORT command successful.Consider using PASV.

553 Could not create file.

试了好多天,一直在配置文件上和目录权限上找原因,可都没有解决问题。

今天,看到一篇文章,说出现Consider using PASV是防火墙的原因。

通过setup打开防火墙配置项,看到有SELinux项,有强制、允许、禁用三项,选禁用后,vsftpd的匿名用户就可以进行上传,建目录等操作了。

或者运行命令

#setsebool -P ftpd_disable_trans 1

然后重启vsftpd服务,也可解决这个问题。

解决了上传的问题后,又有了新的问题,就是匿名用户上传的文件无法下载。经查上传的文件的属性为-rw-------。

先是在配置文件中,修改local_umask=022项,没有解决问题,增加如下项

anon_world_readable_only=NO

则能下载,具体原因不详。

后来增加anon_umask-022项,则上传的文件属性为-rw-r--r--,匿名用户可以正常下载。

=================================================================


推荐阅读
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文介绍了SELinux的两种主要工作模式——强制模式和宽容模式,并提供了如何在CentOS 7中正确启用和配置SELinux的方法,以及在遇到登录问题时的解决策略。 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文详细介绍了如何在CentOS 6.5系统上安装和配置Redis 3.0.6,包括必要的环境准备、软件包下载、编译安装及基本功能测试。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
author-avatar
手机用户2502903213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有