目录

Vsftp 部署及使用

安装vsftp db4-utils

1
2
yum install -y vsftpd db4-utils    #生成口令库需要db4
/etc/init.d/vsftpd restart

配置vsftp

vsftp默认情况下可以用系统用户登录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
vi /etc/vsftpd/vsftpd.conf
chroot_local_user=YES  取消注释

useradd virftp -s /sbin/nologin      #建立虚拟账号相关联的系统账号

vi  /etc/vsftpd/vsftpd_user    #建立虚拟账户相关的文件,在里面填写用户名和账号,第一行账号,第二行密码,依次类推

    test1
    123456
    test2
    abcdef

chmod 600 /etc/vsftpd/vsftpd_user

db_load -T -t hash -f /etc/vsftpd/vsftpd_user /etc/vsftpd/vsftpd_user.db    # 建立访问者的口令库文件

建立虚拟账号及目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
mkdir  /etc/vsftpd/vsftpd_user_conf    #建立虚拟账号相关的目录
cd   /etc/vsftpd/vsftpd_user_conf    
vi test1    #创建和用户对应的配置文件
local_root=/home/virftp/test1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

mkdir /home/virftp/test1    #创建FTP用户test1访问的目录
chown -R virftp:virftp /home/virftp

进入/etc/pam.d/编辑配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
vi /etc/pam.d/vsftpd    #在最开头添加两行
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_user   
#如果是64位系统,则改为/lib64/security/pam_userdb.so 
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_user   
#如果是64位系统,则改为/lib64/security/pam_userdb.so

vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES改为anonymous_enable=NO
#anon_upload_enable=YES 改为 anon_upload_enable=NO
#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO

再添加如下内容
chroot_local_user=YES
guest_enable=YES    #启用虚拟用户
guest_username=virftp    #虚拟用户映射到的系统账号
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf    #虚拟用户配置文件存放目录

grep -v "^#" /etc/vsftpd/vsftpd.conf >vsftpd.bak    #备份配置

重启服务

1
/etc/init.d/vsftpd start

使用ftp

Linux

1
2
wget --ftp-user=user --ftp-password=password ftp://ip/test/test.rar
wget  ftp://"uesr:password"@ip:port/test/test.rar

Windows

filezilla

配置详解

/etc/vsftpd/vsftpd.conf 本身就是一个挺详细的配置文件,且使用『 man 5 vsftpd.conf 』则可以得到完整的参数说明。

与主机较相关的设定值

  • connect_from_port_20=YES (NO) ftp-data 的端口;

  • listen_port=21 vsftpd 使用的命令通道之端口号,如果您想要使用非正规的端口,在这个设定项目修改吧! 不过你必须要知道,这个设定值仅适合以 stand alone 的方式来启动(对于 super daemon 无效)

  • dirmessage_enable=YES (NO) 当用户进入某个目录时,会显示该目录需要注意的内容,显示的文件默认是 .message ,你可以使用底下的设定项目来修改!

  • message_file=.message 当 dirmessage_enable=YES 时,可以设定这个项目来让 vsftpd 寻找该文件来显示信息!

  • listen=YES (NO) 若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的

  • pasv_enable=YES (NO) 启动被动式联机模式(passive mode),一定要设定为 YES 的

  • use_localtime=YES (NO) 是否使用本地时间?vsftpd 预设使用 GMT 时间(格林威治)

  • write_enable=YES (NO) 如果你允许用户上传数据时,就要启动这个设定值;

  • connect_timeout=60 单位是秒,在数据连接的主动式联机模式下,我们发出的连接讯号在 60 秒内得不到客户端的响应,则不等待并强制断线。

  • accept_timeout=60 当用户以被动式 PASV 来进行数据传输时,如果主机启用 passive port 并等待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与 connect_timeout 类似,不过一个是管理主动联机,一个管理被动联机。

  • data_connection_timeout=300 如果服务器与客户端的数据联机已经成功建立 (不论主动还是被动联机),但是可能由于线路问题导致 300 秒内还是无法顺利的完成数据的传送,那客户端的联机就会被我们的 vsftpd 强制剔除!

  • idle_session_timeout=300 如果使用者在 300 秒内都没有命令动作,强制脱机

  • max_clients=0 如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定同一时间,最多有多少 client 可以同时连上 vsftpd

  • max_per_ip=0 与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少联机?

  • pasv_min_port=0, pasv_max_port=0 上面两个是与 passive mode 使用的 port number 有关,如果您想要使用 65400 到 65410 这 11 个 port 来进行被动式联机模式的连接,可以这样设定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的话,表示随机取用而不限制。

  • ftpd_banner=一些文字说明 当使用者联机进入到 vsftpd 时,在 FTP 客户端软件上头会显示的说明文字。不过,这个设定值数据比较少啦! 建议你可以使用底下的设定值来取代这个项目;

  • banner_file=/path/file 这个项目可以指定某个纯文本档作为使用者登入 vsftpd 服务器时所显示的欢迎字眼。

与实体用户较相关的设定值

  • guest_enable=YES (NO) 若这个值设定为 YES 时,那么任何非 anonymous 登入的账号,均会被假设成为 guest (访客) 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。

  • guest_username=ftp 在 guest_enable=YES 时才会生效,指定访客的身份而已。

  • local_enable=YES (NO) 这个设定值必须要为 YES 时,在 /etc/passwd 内的账号才能以实体用户的方式登入我们的 vsftpd 主机

  • local_max_rate=0 实体用户的传输速度限制,单位为 bytes/second, 0 为不限制。

  • chroot_local_user=YES (NO) 将用户限制在自己的家目录之内(chroot)!这个设定在 vsftpd 当中预设是 NO,因为有底下两个设定项目的辅助喔! 所以不需要启动他! chroot_list_enable=YES (NO) 是否启用将某些实体用户限制在他们的家目录内?预设是 NO ,不过,如果您想要让某些使用者无法离开他们的家目录时, 可以考虑将这个设定为 YES ,并且规划下个设定值

  • chroot_list_file=/etc/vsftpd.chroot_list 如果 chroot_list_enable=YES 那么就可以设定这个项目了! 他里面可以规定那一个实体用户会被限制在自己的家目录内而无法离开!(chroot) 一行一个账号即可!

  • userlist_enable=YES (NO) 是否藉助 vsftpd 的抵挡机制来处理某些不受欢迎的账号,与底下的设定有关;

  • userlist_deny=YES (NO) 当 userlist_enable=YES 时才会生效的设定,若此设定值为 YES 时,则当使用者账号被列入到某个文件时, 在该文件内的使用者将无法登入 vsftpd 服务器!该文件名与下列设定项目有关。 userlist_file=/etc/vsftpd.user_list 若上面 userlist_deny=YES 时,则这个文件就有用处了!在这个文件内的账号都无法使用 vsftpd

匿名者登入的设定值

  • anonymous_enable=YES (NO) 设定为允许 anonymous 登入我们的 vsftpd 主机!预设是 YES ,底下的所有相关设定都需要将这个设定为 anonymous_enable=YES 之后才会生效!

  • anon_world_readable_only=YES (NO) 仅允许 anonymous 具有下载可读文件的权限,预设是 YES。

  • anon_other_write_enable=YES (NO) 是否允许 anonymous 具有写入的权限?预设是 NO!如果要设定为 YES, 那么开放给 anonymous 写入的目录亦需要调整权限,让 vsftpd 的 PID 拥有者可以写入才行!

  • anon_mkdir_write_enable=YES (NO) 是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES !

  • anon_upload_enable=YES (NO) 是否让 anonymous 具有上传数据的功能,默认是 NO,如果要设定为 YES , 则 anon_other_write_enable=YES 必须设定。

  • deny_email_enable=YES (NO) 将某些特殊的 email address 抵挡住,不让那些 anonymous 登入! 如果以 anonymous 登入主机时,不是会要求输入密码吗?密码不是要您 输入您的 email address 吗?如果你很讨厌某些 email address , 就可以使用这个设定来将他取消登入的权限!需与下个设定项目配合:

  • banned_email_file=/etc/vsftpd.banned_emails 如果 deny_email_enable=YES 时,可以利用这个设定项目来规定哪个 email address 不可登入我们的 vsftpd 喔!在上面设定的文件内,一行输入一个 email address 即可!

  • no_anon_password=YES (NO) 当设定为 YES 时,表示 anonymous 将会略过密码检验步骤,而直接进入 vsftpd 服务器内喔!所以一般预设都是 NO

  • anon_max_rate=0 这个设定值后面接的数值单位为 bytes/秒 ,限制 anonymous 的传输速度,如果是 0 则不限制(由最大带宽所限制),如果您想让 anonymous 仅有 30 KB/s 的速度,可以设定『anon_max_rate=30000』

  • anon_umask=077 限制 anonymous 的权限!如果是 077 则 anonymous 传送过来的文件 权限会是 -rw——-

关于系统安全方面的一些设定值

  • ascii_download_enable=YES (NO) 如果设定为 YES ,那么 client 就可以使用 ASCII 格式下载文件。

  • ascii_upload_enable=YES (NO) 与上一个设定类似的,只是这个设定针对上传而言!预设是 NO

  • one_process_model=YES (NO) 这个设定项目比较危险一点~当设定为 YES 时,表示每个建立的联机 都会拥有一支 process 在负责,可以增加 vsftpd 的效能。不过, 除非您的系统比较安全,而且硬件配备比较高,否则容易耗尽系统资源 一般建议设定为 NO

  • tcp_wrappers=YES (NO) 当然我们都习惯支持 TCP Wrappers 的 所以设定为 YES

  • xferlog_enable=YES (NO) 当设定为 YES 时,使用者上传与下载文件都会被纪录起来。记录的文件与下一个设定项目有关:

  • xferlog_file=/var/log/vsftpd.log 如果上一个 xferlog_enable=YES 的话,这里就可以设定了!这个是登文件的名称

  • xferlog_std_format=YES (NO) 是否设定为 vsftp 相同的登录档格式?!预设为 NO ,因为登录档会比较容易读! 不过,如果您有使用 vsftp 登录文件的分析软件,这里才需要设定为 YES

  • nopriv_user=nobody 我们的 vsftpd 预设以 nobody 作为此一服务执行者的权限。因为 nobody 的权限 相当的低,因此即使被入侵,入侵者仅能取得 nobody 的权限

  • pam_service_name=vsftpd 这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个