vsftpd FTP服务器架设

在windows上完了完server-u,很简单,一个小时就能完成ftp服务器的假设,在liunx下要架设一个ftp就没那么容易了,在网上
找了找资料


 

     在windows上架设 FTP 首选 Server-u,看看资料,点点下一步,基本上10分钟就能架设一个ftp服务器了,在linux下面架设ftp服务器,确实费了我一番功夫,现在想起来,需要总结的就是 看资料的时候一定要全面,并且做好一个资料要看完。

 

   最终我选择了 vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。vsftpd (号称最安全的ftp 服务器)

 

 

下面讲下linux 下使用vsftpd 的步骤:

 

1.首先下载需要的 软件,双机直接安装:

 

  a.vsftpd-2.0.1-5.EL4.5.i386.rpm (在liunx4 的第一张光盘)

  b.db4-utils-4.2.52-7.1.i386.rpm (在liunx4 的第三张光盘) ,用来加密虚拟用户密码等文件的工具

 

2.启动vsftpd服务

  在控制台执行 service vsftpd start ,如果没有什么问题,你可以看到 服务启动的进程号,如果出现了问题,你可以试着将 gssftp 这个服务停掉,执行service vsftpd stop 因为这个服务或许会造成冲突

查看vsftpd服务器启动情况 service vsftpd status

 

3.用客户端工具连接ftp服务器

 

在window操作系统下,打开命令提示符,输入 ftp 133.64.81.164 回车

 

然后 使用默认的用户名(ftp)和密码(ftp) ,就可以登录ftp服务器了,或者你也可以使用系统用户的用户名和口令登录ftp服务器。

 

 

经过以上3个步骤我们就完成了ftp服务器的假设,但是这里有许多问题

 

a.安全性,匿名用户也可以登录,进行操作

b.用户登录以后并没有锁定目录

c.用户的权限配置没有体现

 

还有其他的问题,基于这些问题,需要我们了解下 vsftpd的工作 原理,上面的操作都是基于一下的3个配置文件的

 

vsftp相关配置文件说明
   /etc/vsftpd/vsftpd.conf
   /etc/vsftpd.ftpusers
  /etc/vsftpd.user_list
  其中,/etc/vsftpd/vsftpd.conf 是主配置文件。/etc/vsftpd.ftpusers 中指定了哪些用户不能访问FTP服务器。/etc/vsftpd.user_list 中指定的用户默认情况( 即在/etc/vsftpd/vsftpd.con中设置了userlist_deny=YES)下也不能访问FTP 服务器,当在/etc/vsftpd/vsftpd.con中设置了userlist_deny=NO时,仅仅允许/etc/vsftpd.user_list 中指定的用户访问FTP 服务器。

 

 

下面我们重点讲下 虚拟用户的设置:

 

如果 你不想把 匿名登录打开,也不想告诉对方 linux的系统账号(为了安全),防止他用系统账号做别的事,那么就需要建立一个虚拟用户了,在ftp中建立虚拟用户,然后映射成linux的系统用户,但是虚拟用户只有ftp的使用权限,并不能登录linux系统,很多FTP服务器都要密码和用户才能下到你要的好东西,你是不是也想要过下这个隐呢?给别人一个用户名和密码,这个配置其实也很简单。虚拟用户(virtual users)的FTP 服务器的配置。虚拟用户只能访问为其提供的FTP 服务,虚拟用户不能像本地的实用户那样登录系统而访问系统的其他资源。若用户对FTP
服务器站内具有写权限并且不允许访问系统的其他资源,则该用户应该使用虚拟用户才能提高系统的安全性

 

 

 

 

传统的FTP 服务器采用如下的方法实现虚拟用户:
1、 在本地建立普通用户账号并设置密码
2、将其登录shell 设为不可登录
3、由passwd/shadow 口令系统进行认证
vsftpd 的虚拟用户采用了不与系统账户口令文件合二为一的方法,也就是说,为了认证这
些虚拟用户vsftpd 使用单独的口令库文件(pam_userdb),由可插拔认证模块(PAM)进行认证。使用这种方式更加安全,并且配置更灵活。配置简单的虚拟用户FTP 服务器
1、生成虚拟用户口令库文件

2、配置生成vsftpd 的认证文件
3、建立虚拟用户所要访问的目录并设置相应权限
4、建立配置文件//生成虚拟用户口令库文件,为了建立此口令库文件,先要生成一个文本文件

 

下面我们开始完成建立一个 虚拟用户的 步骤:

 用户:xinlisn

 密码:123456

 

第一步:建立虚拟用户名和密码对应的文本文件,logins.txt 放在/home,ftp服务弄好以后记得删除这个文件,为了安全

 

xinlisn
123456


此文本文件的格式是:单数行为用户名,偶数行为口令,即:用户xinlisn的口令为123456

 

第二步:下面使用db_load 命令生成口令库文件,需要安装 db4-utils-4.2.52-7.1.i386.rpm

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

chmod 600 /etc/vsftpd_login.db

 

第三步:给虚拟用户创建目录


mkdir /home/snuser/ftp

chmod 700 /home/snuser/ftp

 

第四步:创建虚拟ftp用户登录后映射的linux 用户,注-s /sbin/nologin是让其不能登陆系统,-d 是指定用户目录为/home/snuser/ftp

 

useradd –s /sbin/nologin –d /home/snuser/ftp ftpuser

 

第五步:编辑生成虚拟用户所需的PAM 配置文件

vi /etc/pam.d/ftp.vu

 

插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

 

第六步:生成主配置文件 vsftpd.conf,也就是虚拟用户启动所需要的配置文件,不是执行  service vsftpd starts 所默认执行的  /ect/vsftpd/vsftpd.conf 的配置文件,把它放在/etc/vsftpd.conf

# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out)
#禁止匿名登录
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
#接受本地用户
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
#可以上传(全局控制)
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=002
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#允许上传
anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
#开启日记功能
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
#connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#日志文件位置
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
#使用标准格式
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#空闲连接超时
idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#数据连接超时
data_connection_timeout=600
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#定义PAM 所使用的名称,预设为vsftpd
#pam_service_name=vsftpd
#若启用此选项,userlist_deny选项才被启动
userlist_enable=YES
anon_umask=000
#enable for standalone mode
#绑定到listen_port指定的端口
listen=YES
#开启tcp_wrappers支持
tcp_wrappers=YES

guest_enable=YES
pam_service_name=ftp.vu
guest_username=ftpuser
pasv_enable=YES
#virtual_use_local_privs=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
#是否能使用ls -R命令以防止浪费大量的服务器资源
ls_recurse_enable=YES
#允许删除
anon_other_write_enable=YES

 

 

 

特别注意: anon_umask=000

 

理解umask:

umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7 。

 

umask = 022 时,新建的目录 权限是755,文件的权限是 644
umask = 077 时,新建的目录 权限是700,文件的权限时 600
vsftpd的local_umask和anon_umask借鉴了它
默认情况下vsftp上传之后文件的权限是600,目录权限是700
想要修改上传之后文件的权限,有两种情况
如果使用vsftp的是本地用户
则要修改配置文件中的 local_umask 的值
如果使用vsftp的是虚拟用户
则要修改配置文件中的 anon_umask 的值 

 

也就是一个匿名用户上传文件以后,这个文件的权限 是由 文件最大权限666和 目录最大权限777 与umask  共同决定的

 

 

举例: 如果你上传一个文件,你的 umask = 022 则,你上传文件以后,文件的权限是644

 

                       110 ,110 ,110

           or         000 ,010 ,010

             -------------------------------------

                       110 ,100 ,100                       =644

 

如果你上传一个文件,你的 umask = 000则,你上传文件以后,文件的权限是666

 

                       110 ,110 ,110

           or         000 ,000 ,000

             -------------------------------------

                       110 ,110 ,110                       =666

 

 

如果你不设置 anon_unask=000,那么 你上传的文件权限就是 600,也就是这个文件 只能被 文件创建者 读和写的权利,那么虚拟用户上传的文件将不能被自己下载。

 

 

 

以上配置 copy vsftpd的标准配置在/etc/vstfpd/vsftpd.conf ,增加了一些参数,改变了一些参数,具体参数含义可以看看附件中的文档,这些配置 做到:

 

1.登录后该用户已经被锁定在/home/snuser/ftp目录下

2.该用的有只有上传,下载,浏览权限

3.连接的会话失效时间和数据传输的失效时间都是10分钟

4.不允许匿名用户登录

5.不接受linux系统用户登录ftp服务器

 

第七步:先关闭原来的服务,在启动新的服务


 killall vsftpd


/usr/local/sbin/vsftpd /etc/vsftpd.conf &   /*如果失败请cd 到 usr/local/sbin 执行*/

 

 

配置结束配置好后,新的口令库中的所有用户就都可以登录此FTP 服务器了。哈哈,做到这里你已经完成了FTP服务器的配置了,而且已经能满足你日常小局域网了,使用 cmd ,输入ftp 133.*.*.*  验证吧

 

 

关于修改虚假用户名和密码:

 

 

a.如果要删除掉一个虚拟用户,先在logins.txt中删除用户对应的用户名和密码,然后删除vsftpd_login.db,重新运行db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db


b.如果只是要修改用户的密码,只需重新运行db_load就可以


c.如果要改变用户的其它配置,只需修改用户的配置文件

 

 

 

 

 

 

 

参考文章:

http://tristan1.iteye.com/blog/372377

 

 

你可能感兴趣的:(linux,虚拟机,浏览器,dos,Security)