APP下载

利用虚拟用户账号访问基于linux的FTP服务器

2014-10-10邵雨舟

电脑知识与技术 2014年24期
关键词:配置文件

摘要:FTP是文件传输协议的缩写,它是Internet最早提供的网络服务功能之一,利用FTP服务可以实现文件的上传及下载等相关的文件传输服务。 Linux的FTP服务器根据服务的对象可以支持3种用户:匿名帐户、本地帐户、虚拟用户 。其中虚拟用户的配置比较麻烦,虚拟用户是FTP专有用户,使用虚拟用户登录FTP只能访问FTP服务器提供的资源,大大增强了系统的安全,虚拟用户不能用这些用户名登录到服务器中,而只能登录到FTP。该文将对虚拟用户的配置和使用加以介绍。

关键词:虚拟用户;FTP ;配置文件;权限

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)24-5620-04

从FTP服务器的安全角度考虑,可以为不同的访问者设置不同的访问账号。对于系统中的合法用户,可以用本地用户账号以/etc/passwd中的用户名为认证方式,当这类用户登录FTP服务器的时候,其默认的主目录就是他们的home目录;在服务器上没有账户的的用户,使用匿名(anonymous或ftp)身份获取公共资源,不需要密码。登录后默认进入/var/ftp服务目录(当然也可以根据需要自己建立目录);FTP服务器为虚拟用户建立专有的用户,将账号及密码保存在账号数据库中,采用非系统账户访问服务器资源,相对于FTP的本地用户而言,虚拟用户只能访问FTP共享资源,而不能登录linux服务器,增强了系统安全性。

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

使用虚拟用户就是一种解决办法。虚拟用户,顾名思义,并不是一个合法的Linux系统帐户,但是他可以用来登陆该系统上运行的FTP服务器,当用户在连接上FTP服务器后,会被要求输入用户名和密码,FTP服务器在拿到这个用户名和密码后,会调用相应的PAM认证模块对,和系统中的FTP认证文件进行相比较。如果该用户名和密码与FTP认证文件中的某条记录相符,就可以通过认证,此时该帐户就被映射成一个Linux下的本地帐户,然后就可以使用该本地帐户对FTP资源进行访问,否则就断开该连接请求。

在FTP服务器上创建虚拟用户的步骤如下:

建立虚拟用户口令文件

生成vsftpd的认证文件

建立虚拟用户所需的PAM配置文件

建立虚拟用户访问所需要的目录

修改vsftpd.conf配置文件。

定义虚拟用户的配置文件

下面我们通过一个应用实例来介绍在FTP服务器上创建虚拟用户。

要求:添加三个FTP虚拟用户user1、user2、user3

设置用户访问及文件权限控制:

User1:有浏览目录、上传、改名、删除等权限;

User2:有浏览目录、上传、下载权限;

User3:有浏览目录、下载的权限,速度为20k;

对于以上3个用户可以登陆FTP服务器,但不能登陆到linux系统,这样可以保证FTP服务器的安全。

1 建立虚拟用户的口令库文件

首先我们需要创建一个文本文件(这个文本文件的命名是任意的):ftpuser.txt ,在文件中为每个虚拟用户建立一个登录账号和口令,要求登录账号和口令都要单独占用一行。

其中:奇数行为虚拟用户名,偶数行为相应的口令,在该文件中,不要存在空格和空行。

2 生成虚拟用户的认证数据库文件

把刚才建立的虚拟用户口令库文件通过db_load命令生成FTP服务器的认证的数据库文件,该认证文件是一个被加密后的密文。用户访问FTP服务器的时候,FTP服务器的vsftpd服务程序把用户的请求发送到PAM模块进行认证。PAM在调用相应的认证模块后,会对从FTP服务器发来的用户名和密码进行加密,然后再和该数据库文件进行对比,发现相符条目后,登陆用户才会被允许登陆。

图1 PAM工作原理示意图

可以使用db_load命令将用户文本信息文件转换为db数据库并按照hash方式进行加密。

db_load是软件包db4_utils带的命令,在RHEL5上没有安装,需要安装db4_utils这个软件包才支持db_load命令。db4-utils-4.3.29-9.fc6.i386.rpm在安装盘的Server目录中。

db_load命令一定要在运行:rpm —ivh db4-utils-4.3.29-9.fc6.i386.rpm 命令后才能使用。

db_load命令使用格式如下:

#db_load —T —t hash —f ftpuser.txt /etc/vsftpd/vuser.db

其中:

选项:-T 允许应用程序能够将文本文件转译载入进数据库。由于我们是将虚拟用户的信息以文件方式存储在文件里的,所以必须要使用这个选项。

因为使用了选项-T,那么一定要使用子选项 —t ;子选项-t放在-T选项后,用来指定转译载入的数据库类型,hash就是使用hash码加密。

选项:-f 参数后面接包含用户名和密码的文本文件。

最后一项是生成的数据库的路径和文件名,该文件必须放在“/etc/vsftpd/”中。

由于vsftpd的认证文件vuser.db里保存了所有虚拟用户的用户名和密码,为了增强其安全性,应当设置只有root才可以查看。

#chmod 600 /etc/vsftpd/vuser.db ;修改数据库权限

3 创建虚拟用户使用的PAM认证文件 /etc/pam.d/vsftpd

在Linux中,大多数程序都定义使用叫做PAM的方法进行身份认证,PAM是一个可插入式的、模块化的结构,它为系统管理员设置用户身份验证政策提供了很大的灵活性。

一个支持PAM的应用程序的默认PAM配置文件就可以满足一般的要求。但是在有些情况下,还是需要对PAM配置文件进行特殊的配置。因为如果对PAM进行了错误的配置可能会导致系统的安全性被破坏,所以在对这些文件进行配置前必须对这些文件的结构有一定的了解。

每个支持PAM的应用程序或服务都在/etc/pam.d/目录中有一个对应的文件,这个对应的文件名称与它们所控制访问的服务名称相同。支持 PAM 的应用程序需要定义它们的服务名并在/etc/pam.d/目录中安装它们自己的PAM配置文件。例如vsfptd程序定义了它的服务名为vsftpd,并安装/etc/pam.d/vsftpd配置文件。这里要注意,该文件名要与FTP服务主配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=vsftpd选项的选项值相同。

PAM配置文件用于为应用程序提供用户认证控制(本地和虚拟账号登陆)。

如果是本地账户登陆,则认证文件名必须是:/etc/pam.d/vsftpd;

如果只用虚拟账号登陆,则文件名为:vsftpd.vu;

将虚拟用户的配置写入本地用户的验证文件,就可以实现本地用户和虚拟同时登录ftp。

配置命令如下:

#vi /etc/pam.d/vsftpd

#%PAM-1.0

auth sufficient pam_userdb.so db=/etc/vsftpd/vusers

account sufficient pam_userdb.so db=/etc/vsftpd/vusers

session optional pam_keyinit.so force revoke

auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

auth required pam_shells.so

auth include system_ayth

account include system_ayth

session include system_ayth

session required pam_loginuid.so

参数如下。

auth :是authentication(认证)的缩写,认证、授权(检查用户的名字、密码正确与否);

account:是账户,检查用户的帐户是否到期、禁用等;

pam_userdb.so:说明使用数据库验证;db=库文件名,后缀名.db可以不用写;

Sufficient:表示递归查找,最上2行表示虚拟用户配置文件,下面的都是本地用户配置文件。当上面查找不到时,再查找下面的。如果为required,则只能登录虚拟用户。

该文件第一行是注释行,由该行行首的井字号(#)标示。

注意:pam文件中db后面的数据库不能加扩展名。

在此文件中,只有第二行和第三行是虚拟用户认证设置行,必须要放在其他行的前面。其他行可以不用管它。

4 建立虚拟用户及所要访问的目录并设置相应的权限

建立虚拟用户对应的系统账号 virtual,虚拟用户账户不能登录系统,只能用于访问FTP服务器。通过下列命令建立vsftpd虚拟用户所需的系统本地帐号virtual:

# useradd -s /sbin/nologin virtual

其中选项: -s /sbin/nologin 表示指定shell环境,不允许登录系统。

创建虚拟用户要访问的目录:

# mkdir /home/virtual

虚拟用户必须有一个宿主目录,否则虚拟用户无法登陆。

建立的虚拟用户的宿主目录默认都是700权限,由于/home/virtual是公共目录,是不允许普通用户修改、添加、删除和重命名的,所以将其改成500(读+执行)即可。

# chmod o+rw /home/virtual

5设置vsftpd.conf配置文件

在vsftpd.conf配置文件中添加虚拟用户的配置项,内容如下:

#vi /etc/vsftpd/vsftpd.conf

write_enable=YES

anonymous_enable=NO ;禁用匿名用户登录

local_enable=YES ;启用本地用户登录是为了能够让虚拟用户登录

chroot_local_user=YES ;将所有本地用户限制在自己的目录中

pam_service_name=vsftpd ;配置vsftpd使用的PAM模块为vsftpd

user_config_dir=/etc/vsftpd/vs_dir ;设置虚拟账户配置文件的主目录为 /users_config

注意,在vsftpd.conf主配置文件中这里千万不要添加:guest_enable=yes和guest_username=virtual 这2行,否则本地用户无法写入文件,就算权限足够也不行。

为了保证服务器的安全,需要关闭匿名访问及与匿名相关的设置;虚拟用户会映射为服务器的系统账号,所以需要开启本地用户的支持。

6 创建虚拟用户配置文件目录

为了实现对不同虚拟用户的权限设置,要为不同的虚拟用户各自定义一个配置文件,这些配置文件要放在vsftpd.conf 文件中有user_config_dir选项定义的路径中。

在此,我们创建虚拟用户配置文件的主文件夹为/etc/vsftpd/vs_dir,并在此文件夹下建立虚拟用户user1、user2和user3的配置文件。

# mkdir /etc/vsftpd/vs_dir

7 创建虚拟用户的各自宿主目录

#mkdir /home/virtual/user1_folder

#mkdir /home/virtual/user2_folder

#mkdir /home/virtual/user3_folder

#chown virtual /home/virtual/ user1_folder

#chown virtual /home/virtual/ user2_folder

#chown virtual /home/virtual/ user3_folder

8 创建虚拟用户配置文件

1) 编辑user1用户的需求配置文件:有浏览目录、上传、改名、删除等权限

# vi /etc/vsftpd/vs_dir/user1

guest_enable=YES 开启虚拟账户登录

guest_username=virtual 设置虚拟用户的账户为virtual

anon_world_readable_only=NO 允许用户浏览FTP目录和下载文件

anon_other_write_enable=YES 允许进行文件改名和删除文件的权限

anon_mkdir_write_enable=YES 表示用户具有建立和删除目录的权利

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

local_root=/home/virtual/user1_folder

2) 编辑user2用户的需求配置文件:有浏览目录、上传、下载权限

# vi /etc/vsftpd/vs_dir/user2

guest_enable=YES

guest_username=virtual

anon_world_readable_only=NO

anon_mkdir_write_enable= NO

anon_other_write_enable= NO

anon_upload_enable=YES

local_root=/home/virtual/user2_folder

3) 编辑user3用户的需求配置文件:有浏览目录、下载的权限,速度为20k

#vi /etc/vsftpd/vs_dir/user3

guest_enable=YES

guest_username=virtual

anon_world_readable_only=NO

anon_mkdir_write_enable= NO

anon_other_write_enable= NO

local_root=/home/virtual/ user3_folder

anon_max_rate=20000

9 最后重启vsftpd服务即可

#service vsftpd start

分别以三个用户登录,验证结果。如果设置虚拟账号后,再用匿名账号登陆,就会出项:Reading non-root config file 的错误提示,导致匿名账号无法登陆。

可以采取如下措施解决:在虚拟账号用户的配置文件目录下创建一个名称为ftp的空文件即可。

# touch /etc/vsftpd/vs_dir/ftp

猜你喜欢

配置文件
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
提示用户配置文件错误 这样解决
掌握颜色查找表的魔力
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
互不干涉混用Chromium Edge
更改Windows10内置沙盒的设置
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
为View桌面准备父虚拟机