VSFTP 虚拟账户配置

Linux系统 gongyj 527℃ 已收录 0评论

FTP 服务器有一个特点,就是 FTP 服务器的用户本身也是系统用户。这显然是一个安全隐患,因为这些用户不仅能够访问 FTP,也能够访问其它的系统资源。如何解决这个问题呢?答案就是创建一个虚拟用户的 FTP 服务器。虚拟用户的特点是只能访问服务器为其提供的 FTP 服务,而不能访问系统的其它资源。所以,如果想让用户对 FT P服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

在 VSFTP 中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证。使用这种方式更加安全,并且配置更加灵活。 下面介绍配置过程。

1、添加虚拟用户口令文件

vim /etc/vsftpd/vftpuser.txt

添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。文件名可以任意,但要符合下面的格式。

ftp001 
5Wj86v2ZL6
ftp002
RKEkrqAmgp
ftp003
LGa5JXWEOX

2、 生成虚拟用户口令认证文件

将刚添加的 vftpuser.txt 虚拟用户口令文件转换成系统识别的口令认证文件。
首先查看系统有没有安装生成口令认证文件所需的软件 db4-utils,如果没有,安装一下。

rpm -qa |grep db4-utils
yum install -y db4-utils

然后将上步创建的文本文件转换成 DB 格式的口令库文件,使用 db_load 命令生成虚拟用户口令认证文件。

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

修改口令库的文件权限,将其设置成只有 root 用户可以读写。

chmod 600 /etc/vsftpd/vftpuser.db

3、修改 vsftpd 的 PAM 认证文件

vim /etc/pam.d/vsftpd

这个是 vsftpd 使用 PAM 模块时的相关配置文件。主要用来作为身份认证之用,还有一些用户身份的抵挡功能, 也是透过这个档案来达成的。将里面其他的都注释掉,添加下面这两行(32位系统是 /lib ,64位系统是 /lib64):

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vftpuser

有人说,pam_userdb.so 设置绝对路径时,无法登录系统,会报 530 错误,去掉绝对路径就正常了。我试了一下,二种配置方法都可以。

4、 建立本地映射用户并设置宿主目录权限

所有的 FTP 虚拟用户需要使用一个系统用户,目的是与虚拟用户绑定,并设定目录的访问权限。这个系统用户设置为最低权限就可以了,越小越安全。

useradd -d /var/ftpdir -s /sbin/nologin public

/var/ftpdir 就是虚拟用的主目录,除root用户之外,只有该用户具有对该目录的读、写和执行的权限。虽然用户是 nologin 用户,但 home 目录必须要有,否则虚拟用户无法登录 FTP ,会提示“500 OOPS: cannot change directory”错误,这点要特别注意 。

5、 修改主配置 vsftpd.conf(设置虚拟用户配置项)

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO                            #禁用匿名用户
use_localtime=YES                              #使用本地时间
local_enable=YES                               #启用本地用户,这个一定要开启,不然就无法登录
guest_enable=YES                               #开启虚拟用户
guest_username=public                          #FTP虚拟用户对应的系统用户
pam_service_name=vsftpd                        #PAM认证文件
xferlog_enable=YES                             #记录 FTP 服务器上传下载的情况
xferlog_std_format=NO                          #是否使与 wu_ftp 相同的日志格式
xferlog_file=/var/log/xferlog                  #将记录的上传下载情况写在 xferlog_file 所指定的文件中
dual_log_enable=YES                            #是否启用 VSFTP 自己的日志记录日志,开启后,系统会将操作记录存储到一个叫 vsftpd.log 的文件中
user_config_dir=/etc/vsftpd/vuser_config       #设置虚拟用户的独立配置文件目录

然后配置虚拟用户的独立配置文件,用哪个帐户登陆就用哪个帐户命名,实现不同用户不同权限。文件格式、属性和主配置文件一致 ,文件名没有.conf后缀,这里的属性会覆盖主配置文件相应的属性,并不是所有属性放这里都会起作用。这样每个用户都可以配置成不同的权限,这个文件是实时生效的,不需要重启服务。

首相要创建一下配置文件目录 /etc/vsftpd/vuser_config

mkdir /etc/vsftpd/vuser_config

然后创建每个用户的独立配置文件,一定要注意,文件名字要与用户名相同。

vim /etc/vsftpd/vuser_config/ftp001
local_root=/data/webdir/                       #设置虚拟用户的根目录,如果没有设置登录后会进入到系统用户的 home 目录下(根据实际修改)
write_enable=YES                               #全局文件中已经设置可写了,如果想让该用户没有写入权限可以改成 NO
anon_umask=022                                 #本地用户上传文件的umask,上传文件默认权限644(666-022),上传文件夹默认权限755(777-022)
anon_world_readable_only=NO                    #必须为NO,否则虚拟用户不能查看文件列表
anon_upload_enable=YES                         #虚拟用户如果需要上传文件,则需要为 YES
anon_mkdir_write_enable=YES                    #虚拟用户有创建目录权限是,需要要为 YES
anon_other_write_enable=YES                    #如果为 NO,且 anon_upload_enable 为yes,那么虚拟用户只能上传文件,不能删除文件,有删除权限,需要为 YES

其余的用户名也按照这样配置就可以了,这里还可以配置最大连接数,最大传输速度等权限设置,这个就可以让不同用户拥有不同的权限了。当然,如果在主配置文件中没有配置 user_config_dir 参数也可以,但需要把最基本的权限加入到主配置文件中,虚拟用户也可以正常使用,但所有用户的权限都会相同。

6、 重启 VSFTP 服务

配置好后,重启一下 FTP 服务就可以使用了。

service vsftpd restart

测试一下虚拟用户登录 FTP 吧

lftp ftp001:5Wj86v2ZL6@127.0.0.1

登录成功,现在就可以正常的上传下载文件了。

7、VSFTP 日志

VSFTP 有 2 个日志文件,分别为 /var/log/xferlog 与 /var/log/vsftpd.conf。

xferlog 只能记录文件上传,而 vsftpd.conf 可以记录所有操作,下面就简单分析 2 个日志文件的配置与日志格式。

(1)xferlog 格式分析:

查看主配置文件 /etc/vsftpd/vsftpd.conf 如下:

xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog

有了这 3 行,就可以记录该日志了。

/var/log/xferlog 样例如下:

Sat Oct 17 15:12:19 2015 1 192.168.100.101 0 /jisupdfmenu.dll b _ i g ftp001 ftp 0 * i
Sat Oct 17 15:13:22 2015 1 192.168.100.101 288072 /PdfCore.dll b _ i g ftp001 ftp 0 * c
Sat Oct 17 15:16:25 2015 1 192.168.100.101 422 /cache b _ i g ftp001 ftp 0 * c
Sat Oct 17 16:06:13 2015 1 192.168.100.101 396104 /CommonTab.dll b _ i g ftp001 ftp 0 * c
Sat Oct 17 16:09:47 2015 1 192.168.100.101 288072 /PdfCore.dll b _ i g ftp001 ftp 0 * c

每列含义:

Sat Oct 17 15:16:25 2015 | 1 | 192.168.100.101 | 422 | /cache | b | _ | i | g | ftp001 | ftp ||| c

记录 含义
Sat Oct 17 15:16:25 2015 FTP 传输时的时间,格式为“DDD MMM dd hh:mm:ss YYYY”
1
传输文件所用时间。单位/秒
192.168.100.101 FTP 客户端名称/IP
422 传输文件大小。单位/Byte
/cache 传输文件名,包含路径
b
传输方式:a 以 ASCII 方式传输;b 以二进制(binary)方式传输;
_
特殊处理标志位:“_”不做任何处理;“C”文件是压缩格式;“U”文件非压缩格式;“T”文件是 tar 格式;
i
传输方向:“i”上传;“o”下载;
g
用户访问模式:“a”匿名用户;“g”访客模式;“r”系统中的用户;
ftp001
登录的用户名
ftp
服务名称,一般都是 ftp
0
认证方式:“0”无;“1”RFC931认证;
*
认证用户 id:“*”表示无法获取 id
c
完成状态:“i”传输未完成;“c”传输已完成;

(2)vsftpd.log 格式分析:

查看主配置文件 /etc/vsftpd/vsftpd.conf 如下:

dual_log_enable=YES
log_ftp_protocol=YES

如果没有开启 log_ftp_protocol 参数,日志格式如下:

Sat Oct 17 15:09:19 2015 [pid 26036] CONNECT: Client "192.168.100.101"
Sat Oct 17 15:09:20 2015 [pid 26035] [ftp001] OK LOGIN: Client "192.168.100.101"
Sat Oct 17 15:10:25 2015 [pid 26037] [ftp001] OK UPLOAD: Client "192.168.100.101", "/history.cache", 422 bytes, 724.27Kbyte/sec
Sat Oct 17 15:10:47 2015 [pid 26037] [ftp001] OK DELETE: Client "192.168.100.101", "/PdfCore.dll"

如果开启 log_ftp_protocol 参数,所有的 FTP 请求和响应都会被记录到日志中,日志格式如下:

Sat Oct 17 15:17:39 2015 [pid 26133] CONNECT: Client "192.168.100.101"
Sat Oct 17 15:17:39 2015 [pid 26133] FTP response: Client "192.168.100.101", "220 (vsFTPd 2.2.2)"
Sat Oct 17 15:17:39 2015 [pid 26133] FTP command: Client "192.168.100.101", "USER ftp001"
Sat Oct 17 15:17:39 2015 [pid 26133] [ftp001] FTP response: Client "192.168.100.101", "331 Please specify the password."
Sat Oct 17 15:17:39 2015 [pid 26133] [ftp001] FTP command: Client "192.168.100.101", "PASS <password>"
Sat Oct 17 15:17:39 2015 [pid 26132] [ftp001] OK LOGIN: Client "192.168.100.101"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "230 Login successful."
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "SYST"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "215 UNIX Type: L8"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "FEAT"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "211-Features:"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " EPRT??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " EPSV??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " MDTM??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " PASV??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " REST STREAM??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " SIZE??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " TVFS??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", " UTF8??"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "211 End"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "PWD"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "257 "/""
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "CWD /"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "250 Directory successfully changed."
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "PWD"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "257 "/""
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "TYPE A"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "200 Switching to ASCII mode."
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "PASV"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "227 Entering Passive Mode (192,168,100,101,243,70)."
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "LIST -al"
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "150 Here comes the directory listing."
Sat Oct 17 15:17:39 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "226 Directory send OK."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "TYPE I"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "200 Switching to Binary mode."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "SIZE btninfo.dat"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "550 Could not get file size."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "PASV"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "227 Entering Passive Mode (192,168,100,101,74,178)."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "STOR btninfo.dat"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "150 Ok to send data."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] OK UPLOAD: Client "192.168.100.101", "/btninfo.dat", 34 bytes, 63.73Kbyte/sec
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "226 Transfer complete."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "MDTM 20151017151802 /btninfo.dat"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "213 File modification time set."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "TYPE A"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "200 Switching to ASCII mode."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "PASV"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "227 Entering Passive Mode (192,168,100,101,201,30)."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "LIST -al"
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "150 Here comes the directory listing."
Sat Oct 17 15:18:02 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "226 Directory send OK."
Sat Oct 17 15:18:07 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "DELE btninfo.dat"
Sat Oct 17 15:18:07 2015 [pid 26134] [ftp001] OK DELETE: Client "192.168.100.101", "/btninfo.dat"
Sat Oct 17 15:18:07 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "250 Delete operation successful."
Sat Oct 17 15:18:07 2015 [pid 26134] [ftp001] FTP command: Client "192.168.100.101", "QUIT"
Sat Oct 17 15:18:07 2015 [pid 26134] [ftp001] FTP response: Client "192.168.100.101", "221 Goodbye."

登录、上传、删除等动作,会比之前多出好多信息。在配置的时候,开启此参数,方便我能查找问题的所在,正式使用的时候,建议不要开启,我们不需要那么多的日志来审计。

配置虚拟用户,除了上述使用 db 文件做用户验证外,还有一种方法是使用 mysql 数据库,来做用户身份验证,需要使用 pam_mysql 模块,这里就不做介绍了,请参以下链接:

http://blog.chinaunix.net/uid-12290680-id-26900.html

LADP 环境配置虚拟账户,可以参考以下链接:

http://www.centoscn.com/image-text/config/2014/0316/2575.htm

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/228.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……