|
什么是 vsftp:
除了 proftpd 之外,事实上,这个 vsftpd 也是一个很好的 FTP 服务器软件喔!为什么这么说呢?因为 vsftpd 全名是『very secure FTP daemon』的意思,所以他的发展本来就是以安全性为考虑来发展这个套件的。vsftpd 在安全性的考虑上面,主要针对了『程序的权限, privilege』概念来设计的,因为我们的任何服务在 Linux 上面运作时都会取得一个 PID,而这个 PID 是有拥有者的身份的,也就是说,这个服务的 PID 在我们的 Linux 上面是具有某些『权限』的。万一这个服务的PID 所属拥有者的身份等级太高,例如 root 的权限,那么如果不幸该 PID 有些设计上的漏洞,使得该 PID 被入侵的话,入侵者将具有该 PID 的权限,也就是 root 的身份喔!所以,近来发展的套件都会尽量的将服务取得的 PID 权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全。
除了上面这个权限的设计之外, vsftpd 也利用 chroot 这个软件的辅助,来让登入者仅能于一些较不重要的目录当中活动,而无法使用 Linux 系统全部的功能。所谓的 chroot 这个函数,最主要的功能就是『改变根目录的所在 ( change root directory )』了!举例来说,如果您想要让使用者登入 A 服务后,且执行任何指令都是在 /tmp/pub 目录下,并限制使用者使用 A 服务时都只能在 /tmp/pub 目录下,那么使用『 chroot /tmp/pub command』就能够让 /tmp/pub 变成 A 服务的根目录『/』了!如此一来,使用者就无法离开 /tmp/pub ,那么万一我们 A 服务的 PID 还是被入侵时,没有关系,入侵者还是仅能在 /tmp/pub 里面跑来跑去而已,而无法使用 Linux 的完整功能。这个时候,自然我们的系统也就会比较安全!
vsftpd 是基于上面的说明来设计的一个较为安全的 FTP 服务器软件,他具有底下的特点:
- vsftpd 是以一般身份启动服务,所以对于 Linux系统的使用权限较低,对于 Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被 vsftpd 这支服务所误用;
- 任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序 ( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响 Linux 本身的系统为准;
- 所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之 vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如 chown(), Login 的要求等等动作;
- 此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。
由于具有这样的特点,所以 vsftpd 会变的比较安全一些!
另外,要架设 vsftpd 之前,还是请您得先要针对 FTP 的主动联机、被动联机以及 port 21, 20 这两个指令信道与数据信道的基础有一定程度的认识喔,会比较容易进入状况,所以,还是回到前面的Wu FTP 那一张节,将前言的部分看完才好!我这里假设您已经具有 FTP 的相关知识了,所以底下就直接来进行 vsftpd 的安装与设定吧!
FTP的传输模式
1.主动FTP模式:
第一个过程是客户机主动去连接服务器。
第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令。
第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器。
第四个过程服务器会打开自己的20端口,并把数据主动送到客户机的一个随机端口上。
2.被动FTP模式:
第一个过程是客户机主动去连接服务器。
第二个过程服务器会打开21端口来接受客户端的访问,以后这个链接就会传输命令。
第三个当客户机要从服务器上下载东西的时候,会发一条指令给服务器。
第四个过程服务器会打开一个随机端口,并通过21告诉客户机打开的端口号,并等待客户机的连接。
vsftp的安装
1.解压安装文件
# tar xzvf vsftpd-2.3.2.tar.gz
# cd vsftpd-2.3.2
2.编辑builddefs.h文件
# vim builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS //将undef改为define,以支持tcp-wrappers。
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL //将undef改为define,支持ssl。
#endif /* VSF_BUILDDEFS_H */
3.编译安装
# make
# make install
注:帮助文件安装位置:
/usr/share/man/man5/vsftpd.conf.5
/usr/share/man/man8/vsftpd.8
4.拷贝配置文件
# mkdir /etc/vsftpd
# cp vsftpd.conf /etc/vsftpd/
# cp RedHat/vsftpd.pam /etc/pam.d/
5.验证安装结果
# which vsftpd
/usr/local/sbin/vsftpd //二进制文件安装的位置。
# ldd /usr/local/sbin/vsftpd //查看一下vsftpd的依赖库(如果您发现vsftpd所依赖的库有libpam的行,说明所编译的是通过pam验证登录。)
linux-gate.so.1 => (0x00930000)
libwrap.so.0 => /lib/libwrap.so.0 (0x00110000)
libnsl.so.1 => /lib/libnsl.so.1 (0x004f8000)
libpam.so.0 => /lib/libpam.so.0 (0x00c30000) //通过pam验证登陆。
libdl.so.2 => /lib/libdl.so.2 (0x0032c000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00fb8000)
libutil.so.1 => /lib/libutil.so.1 (0x00d76000)
libcap.so.1 => /lib/libcap.so.1 (0x0057b000)
libssl.so.6 => /lib/libssl.so.6 (0x00e8b000)
libcrypto.so.6 => /lib/libcrypto.so.6 (0x00118000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x00959000)
libaudit.so.0 => /lib/libaudit.so.0 (0x008ab000)
/lib/ld-linux.so.2 (0x00760000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00259000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00ad9000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x00286000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00289000)
libz.so.1 => /usr/lib/libz.so.1 (0x00803000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x002af000)
libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x004bc000)
libselinux.so.1 => /lib/libselinux.so.1 (0x002b8000)
libsepol.so.1 => /lib/libsepol.so.1 (0x002d0000)
安装成功!
vsftp环境配置
1.用户配置
# useradd nobody //vsftpd默认设置需要一个"nobody"用户,如果这个用户不存在,那么添加它。
# mkdir /usr/share/empty/ //vsftpd默认设置需要一个空目录:/usr/share/empty,增加这个目录。
建立匿名用户和登陆的主目录
# mkdir /var/ftp/
# useradd -d /var/ftp ftp
# chown root.root /var/ftp //为了安全
# chmod og-w /var/ftp
2.启动vsftpd
注:默认情况下系统是以xinetd方式启动vsftpd,为了提高效率,把它设置在standalone状态。
设置方法:
# vim /etc/vsftpd/vsftpd.conf
在配置文档中设置:listen=YES
# vim /etc/xinetd.d/vsftpd
改成:disable = yes
设置standalone结束。
# /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf & //启动vsftpd。
3.测试vsftpd
# ftp localhost
以匿名登陆
Name (localhost:root): anonymous
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
登陆成功!
vsftp登陆配置
[实体账户登陆配置]
# vim /etc/vsftpd/vsftpd.conf
在配置文件中添加:
pam_service_name=vsftpd.pam //使用pam验证文件验证登陆。
local_enable=YES //启用本地登陆。
至此,本地用户已经可以正常登陆ftp。
高级配置:
登陆用户限制
两个对用户登录起到限制作用的文件
1. /etc/ftpusers
所有添加到这个文件中的用户都不能登录FTP服务器
2.黑白名单在主配置文件添加userlist_enable=yes //启用user list功能。
黑名单:userlist_deny=yes(禁止userlist中的用户)
userlist_file=/etc/vsftpd/user_list(默认的文件名,可以修改)
白名单:userlist_deny=no(允许userlist中的用户)
userlist_file=/etc/vsftpd/user_list(默认的文件名,可以修改)
注:如果一个用户同时被添加到/etc/ftpusers里和白名单中,那用户也是不能登录FTP服务器的。
[虚拟账户登陆配置]
首先要安装db4:
db4-4.3.29-10.el5.i386
db4-devel-4.3.29-10.el5.i386
db4-java-4.3.29-10.el5.i386
db4-tcl-4.3.29-10.el5.i386
db4-utils-4.3.29-10.el5.i386
1.创建虚拟账户数据库
首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如logins.txt:
xp //虚拟登陆用户名
123 //虚拟用户密码
# vim /root/logins.txt
# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db //用户的数据库文件vsftpd_login.db保存在/etc/vsftpd/下。
# chmod 600 /etc/vsftpd/vsftpd_login.db //为了安全。
2.修改pam文件vsftpd.pam用来验证虚拟账户登录
# vim /etc/pam.d/vsftpd.pam
修改为如下:
#%PAM-1.0
#auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
#auth required /lib/security/pam_unix.so shadow nullok
#auth required /lib/security/pam_shells.so
#account required /lib/security/pam_unix.so
#session required /lib/security/pam_unix.so
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
3.配置虚拟账户
# useradd -d /home/ftpsite virtual //建立实体账户virtual,虚拟用户xp登陆后所映射的用户。虚拟用户登陆目录和所对应实体用户相同。
# vim /etc/vsftpd/vsftpd.conf
添加:
guest_enable=YES //启用虚拟账户。
guest_username=virtual //虚拟账户登陆后对应系统中实体账户。
pam_service_name=vsftpd.pam //虚拟账户登陆验证的文件。必须要和/etc/pam.d/vsftpd.pam一致!
local_enable=YES //启用本地登录,因为虚拟账户最后还是会映射到实体账户,所以必须开启本地登录。
4.激活单个用户配置功能
要激活这个功能,需要增加以下配置行到配置文件:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# mkdir /etc/vsftpd/vsftpd_user_conf //创建单个用户配置目录。
将每个用户以用户名作为配置文件名称复制到vsftpd_user_conf下。
[mysql虚拟账户登陆配置]
准备工具:vsftpd-2.3.2.tar.gz + RHEL 5.4 + pam_mysql-0.7RC1.tar.gz + mysql-5.1.30.tar.gz
+ mysql-devel-5.0.45-7.el5.i386
放在/usr/local/src/mysql_vsftp下备用。
1.安装mysql
# groupadd mysql
# useradd -g mysql mysql
# tar xzvf mysql-5.1.30.tar.gz
# cd mysql-5.1.30
# ./configure --prefix=/usr/local/mysql
# make
# make install
# cp support-files/my-medium.cnf /etc/my.cnf
# vim /etc/my.cnf
将其中的 #skip-federated 注释掉。
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql //初始化数据库。
# chown -R root .
# chown -R mysql var
# chgrp -R mysql .
# bin/mysqld_safe --user=mysql & //以mysql用户启动数据库。
2.安装mysql-devel
# rpm -ivh mysql-devel-5.0.45-7.el5.i386
3.安装pam_mysql
# tar xzvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql //指定了mysql的安装位置
# make
# make install
# cp .libs/pam_mysql.so /lib/security/ //复制用于验证登陆的文件。
4.建立映射到本地的用户
# mkdir /var/ftp/
# useradd -d /var/ftp ftp
# chown root.root /var/ftp //为了安全
# chmod og-w /var/ftp
5.配置验证
1) 在mysql中建库并设置相应权限
mysql>create database mysql_vsftp;
mysql>use mysql_vsftp;
mysql>create table users(name char(20) binary,passwd char(20) binary);
mysql>insert into users (name,passwd) values ('xp1','xp1');
mysql>insert into users (name,passwd) values ('xp2','xp2');
mysql>grant select,insert on mysql_vsftp.users to ftp@localhost identified by '123456'; //授权ftp用户可以读mysql_vsftp数据库的users表。
mysql>flush privileges; //刷新权限设置。
mysql>quit
验证:
# mysql -uftp -p123456 mysql_vsftp
mysql>select * from users;
如果成功,将会列出xp1、xp2的密码。
2) 建立PAM认证信息
# vim /etc/pam.d/vsftpd.pam
内容设置为:
auth required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=mysql_vsftp table=users usercolumn=name pas
swdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=ftp passwd=123456 host=localhost db=mysql_vsftp table=users usercolumn=name pas
swdcolumn=passwd crypt=0
注:
crypt=n
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密
crypt=3:表示使用md5的散列方式
6.配置vsftpd
# vim /etc/vsftpd/vsftpd.conf
增加:
pam_service_name=vsftpd.pam
guest_enable=YES
guest_username=ftp
# killall -9 vsftpd
# /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf & //重启vsftpd。
7.测试
分别用xp1和xp2登陆验证。
SSL-FTP 加密传输配置
1、生成密钥和证书
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout server.key -out server.crt
根据提示输入相关信息即可生成 server.key 密钥和 server.crt 证书
2、将密钥和证书加在一起生成vsftpd需要的pem文件
# cat server.key > /etc/vsftpd/server.pem
# cat server.crt >> /etc/vsftpd/server.pem
3、配置SSL
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/server.pem
这里只强制本地用户使用SSL登录,没有强制匿名用户使用SSL登录。
4、重启vsftpd
如果没有出错的话,那么就可以测试用户SSL连接了。
可能遇到的问题:
1)500 OOPS: SSL: ssl_enable is set but SSL support not compiled in
明白到自己没有在编译的时候把ssl功能编译进来,于是重新配置编译
(1)修改 builddefs.h
把 #undef VSF_BUILD_SSL 修改为 #define VSF_BUILD_SSL
(2)重新编译vsftpd出错,又发现自己没有ssl的库和相关头文件,找相关安装包。
openssl-devel-0.9.8b-8.3.el5.i386.rpm
krb5-devel-1.5-17.i386.rpm
e2fsprogs-devel-1.39-8.el5.i386.rpm
(3)安装好后重新make就可以生成vsftpd了。
2)522 SSL connection failed; session reuse required
当我用FileZilla(3.0.9.2)启用显式SSL连接服务器时候,在LIST命令时出现上述错误。
折腾了很久才解决,在 vsftpd.conf 里添加以下配置即可:
require_ssl_reuse=NO
vsftp配置参数详细说明:
【布尔选项】
下边是布尔选项的列表. 一个布尔选项的值可以被设为 YES 或 NO
allow_anon_ssl
只有在 ssl_enable 被激活时才有用. 如果设为 YES, 匿名用户将被允许使用安全的 SSL 联接.
默认: NO
anon_mkdir_write_enable
如果设为 YES, 匿名用户将允许在某些情况下创建目录. 这需要激活 write_enable 选项, 并且匿名 ftp 用户需要对父目录有写权限.
默认: NO
anon_other_write_enable
如果设为 YES, 匿名用户将拥有除 上载, 和创建目录 外更多的权限, 比如 删除和重命名. 通常不建议这么做, 但完整的配置文件是包括这一选项的.
默认: NO
anon_upload_enable
如果设为 YES, 匿名用户在某些情况下允许上载文件. 这需要将 write_enable 选项激活, 并且匿名用户应当对对应目录有写权限.
默认: NO
anon_world_readable_only
启用时, 将只允许匿名用户下载具有全球读权限的文件. 这将意味着 ftp 用户可以拥有自己的文件, 特别是前边提到的上载的文件.
默认: YES
anonymous_enable
用于控制是否允许匿名用户登录. 如果激活, ftp 和 anonymous 都将被视为匿名用户登录.
默认: YES
ascii_download_enable
如果被激活, 下载时将使用 ASCII 模式进行数据传输.
默认: NO
ascii_upload_enable
如果被激活, 上载时将使用 ASCII 模式进行数据传输.
默认: NO
async_abor_enable
如果被激活, 一个特别的 FTP 命令 "async ABOR" 将被激活. 只有某些 FTP 客户端需要使用这一特性. 另外, 这个特性并不是很好控制, 因此默认没有启用. 不幸的是, 如果没有启用这个特性, 某些 FTP 客户端在取消一个传输时就会挂起, 因此, 您可能希望启用它.
默认: NO
background
如果被激活, 并且 vsftpd 以 "listen" 模式启动, vsftpd 将会background 监听进程. 即 control will immediately be returned to the shell which launched vsftpd.
默认: NO
check_shell
注意! 这个选项只对构建时加入 non-PAM 参数的 vsftpd 有效. 如果令其失效, vsftpd 将不会检查有效用户的用于本地登录的 /etc/shells.
默认: YES
chmod_enable
如果被激活, 将允许使用 SITE CHMOD 命令. 注意! 这只对本地用户有效. 匿名用户从不允许使用 SITE CHMOD.
默认: YES
chown_uploads
如果被激活, 所有匿名上载的文件的宿主将会调整为 chown_username 中指定的用户. 这样就便于管理, 特别是从安全的角度考虑.
默认: NO
chroot_list_enable
如果被激活, 您需要提供一个需要将其限制于其家目录中的本地用户列表. 如果将 chroot_local_user 设为 YES 则意义稍有不同. 在此情况下, 此列表变成不需将用户限制于其家目录的用户的列表. 默认情况下,这个列表文件是 /etc/vsftpd.chroot_list, 但可以通过 chroot_list_file 选项来设定.
默认: NO
chroot_local_user
如果设为 YES, 本地用户, 在登录后将(默认)被限制在其家目录中. 警告: 此选项有安全隐患, 特别是在用户拥有上载权限, 或可以shell访问的时候. 如果您不清楚后果, 请不要启用它. 注意, 这些安全隐患并不是 vsftpd 所特有的. 所有的提供将本地用户进行目录限制的 FTP 守护进程有存在这种隐患.
默认: NO
connect_from_port_20
用于控制在服务器端, 是否使用端口20(ftp-data)进行数据联接. 基于安全的考虑, 有些客户端需要这样做. 相反, 禁用这个选项, 可以使 vsftpd 以较少特权运行.
默认: NO(但是在示例设置中启用了这个选项)
deny_email_enable
如果激活, 您应当提供一个禁止匿名用户用做密码的 e-mail 地址列表. 默认情况下, 这个列表文件为 /etc/vsftpd.banned_emails, 当然, 您可以通过 banned_email_file 选项指定.
默认: NO
dirlist_enable
如果设为 NO, 所有的目录列取命令都将被禁止.
默认: YES
dirmessage_enable
如果启用, 当用户首次进入一个新目录时, FTP 服务器将会显示欢迎信息. 默认情况下, 是扫描目录下的 .message 文件获取的, 当然, 您也可以通过 message_file 选项设定.
默认: NO(但是在示例设置中启用了这个选项)
download_enable
如果设为 NO, 所有的下载请求都将被拒绝.
默认: YES
dual_log_enable
如果启用, 将生成两个相似的日志文件, 默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下. 前者是 wu-ftpd 类型的传输日志, 可以用于 标准工具分析. 后者是 vsftpd 自己类型的日志.
默认: NO
force_dot_files
如果激活, 以 . 开始的文件和目录在目录列取的时候将会被显示, 即使客户端没有使用 "a" 标识. 这不包括 "." 和 ".." 目录
默认: NO
force_local_data_ssl
只有在 ssl_enable 被激活时才能使用. 如果被激活, 则所有的 非匿名用户 登录时都被强制使用安全 SSL 联接来传送接收数据.
默认: YES
force_local_logins_ssl
只有在 ssl_enable 被激活时才能使用. 如果被激活, 则所有的 非匿名用户 登录时都被强制使用安全 SSL 联接来传送密码.
默认: YES
guest_enable
如果启用, 所有非匿名用户都将以 "guest" 身份登录. guest 通过 guest_username 设定, 来映射到一个指定用户.
默认: NO
hide_ids
如果启用, 所有目录中的用户和组信息列取时都将显示为 "ftp".
默认: NO
listen
如果启用, vsftpd 将以独立模式运行. 这就意味着 vsftpd 不能由类 inetd 来启动. vsftpd 应当直接执行. 由 vsftpd 自身监听和处理联接请求.
默认: NO
listen_ipv6
如 listen 参数, 所不同的是, vsftpd 将对 IPv6 接口进行监听, 而不是 IPv4 接口. 此参数 和 listen 参数相互独立.
默认: NO
local_enable
用于控制是否允许本地登录. 如果启用, /etc/passwd 中的普通帐号即可用于登录.
默认: NO
log_ftp_protocol
如果启用, 假若选项 xferlog_std_format 没有启用, 所有的 FTP 请求和应答都会被记录. 此选项对将对调试很有用.
默认: NO
ls_recurse_enable
如果启用, 此设置将允许用户使用 "ls -R". 这有点安全威胁, 因为在大型站点的根目录下进行 ls -R 将会消耗很多资源.
默认: NO
no_anon_password
如果启用, 匿名用户登录将不再需要密码 - 可以直接登录.
默认: NO
no_log_lock
如果启用, 在写日志文件时, 将会阻止 vsftpd 使用文件锁定. 这个选项通常不会启用. 它的存在是为了处理操作系统的一个bug, 如 Solaris / Veritas 文件系统组合某些情况下试图锁定日志文件的现象.
默认: NO
one_process_model
如果你使用 Linux 2.4 内核, 您就可以使用一个不同的安全模式, 它只允许每个联接使用一个进程. 这有一点小小的安全问题, 但是提高了性能. 如果您不清楚后果, 或者您的站点要承受大量的并发用户联接时, 请不要启用此选项.
默认: NO
passwd_chroot_enable
如果启用, 同 chroot_local_user 一起使用, 就会基于每个用户创建限制目录, 每个用户限制的目录源于 /etc/passwd 中的家目录. 当家目录路径中包含 /./ 时, enotes that the jail is at that particular location in the path. pasv_enable
如果数据传输时, 您不允许使用 PASV 模式, 则将此选项设为 NO
默认: YES
pasv_promiscuous
如果您要禁用 PASV 安全检查, 将此选项设置为 YES. 该检查用于确保数据传输联接与控制联接源于同一 IP 地址. 如果不清楚后果, 请不要启用此选项! 此选项只有在某些使用安全隧道的方案中才能正常使用, 或者需要 FXP 的支持.
默认: NO
port_enable
如果您不允许使用端口模式获取数据联接, 将此选项设置为 NO.
默认: YES
port_promiscuous
如果您想禁用端口安全检查, 将此选项设置为 YES. 此检查用于确认出站的数据只流向客户端. 搞清楚后果前,不要启用此选项!
默认: NO
run_as_launching_user
如果您希望可以由用户来启动 vsftpd, 将此选项设置为 YES. 当不能使用root登录时, 这通常很有用. 严重警告: 搞清楚后果前,不要启用此选项, 随意的启用此选项将会导致非常严重的安全问题. 特别是 vsftpd 没有/不能 使用目录限制技术来限制文件访问时(甚至vsftpd是由root启动的). 一个愚蠢的替代方法是将选项 deny_file 设为 {/*,*..*}, 但是其可靠性并不能和限制目录相比, 甚至不在一个等级上. 如果启用此选项, 应当限制其它选项的使用. 例如, 非匿名登录,上载文件宿主转换, 使用源自端口20的联接和低于 1024 的端口不会工作. 其它一些选项也可能受到影响.
默认值: NO
secure_email_list_enable
如果您要为匿名用户指定一个做为密码的邮件地址列表, 将此选项设置为 YES. 在不需要创建虚拟用户的情况下, 构建一个低安全性访问控制很有用. 如果启用, 匿名用户只有使用在 email_password_file 中指定的邮件地址做为密码, 才能登录. 文件格式是每行一个密码, 没有空格. 默认文件名是 /etc/vsftpd.email_passwords.
默认: NO
session_support
此选项用于控制 vsftpd 是否为登录保持会话. 如果保持会话, vsftpd 将会尝试和更新 utmp 和 wtmp. 如果使用 PAM 认证, 同时还会打开 pam_session, 直至登出. 如果不需要保持登录会话, 或许您希望禁用此选项, 以使得 vsftpd 占用更少的进程和/或更少的特权. 注意 - utmp 和 wtmp 只有在启用 PAM 的情况下才支持.
默认: NO
setproctitle_enable
如果启用, vsftpd 将会尝试在系统进程列表中显示会话状态信息. 也就是说, 进程报告将会显示每个 vsftpd会话在做什么 (闲置, 下载 等等). 出于安全的考虑, 您可能需要将其关闭.
默认: NO
ssl_enable
如果启用此选项, 并在编译时加入 OpenSSL 支持, vsftpd 将支持通过 SSL 进行安全联接. 此选项用于控制联接(包括登录) 以及数据联接. 您可能同时需要支持SSL的客户端. 注意!! 小心启用此选项. 仅在需要时才启用. vsftpd 对使用 OpenSSL 库的安全性不做任何担保. 启用此选项, 就意味着您相信所安装的 OpenSSL 库的安全性.
默认: NO
ssl_sslv2
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 SSL v2 协议进行联接. TLS v1 仍为首选联接.
默认: NO
ssl_sslv3
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 SSL v3 协议进行联接. TLS v1 仍为首选联接.
默认: NO
ssl_tlsv1
只有激活 ssl_enable 选项时才有效. 如果启用, 此选项将允许使用 TLS v1 协议进行联接. TLS v1 仍为首选联接.
默认: YES
syslog_enable
如果启用, 任何本来应该输出到 /var/log/vsftpd/vsftpd.log 的日志, 将会输出到系统日志中. 记录由 FTPD 完成.
默认: NO
tcp_wrappers
如果启用, 并且在编译 vsftpd 时加入了对 TCP_Wrappers 的支持, 则连入请求转由 TCP_Wrappers 完成访问控制. 另外, 这是基于每个IP的配置机制. 如果 tcp_wrappers 设置了 VSFTPD_LOAD_CONF 环境变量, 则 vsftpd 会话将会试图加载在此变量中指定的 vsftpd 配置文件.
默认: NO
text_userdb_names
默认情况下, 目录列取时在用户和组字段显示的是数字ID. 如果启用此选项,则可以得到文本名称. 基于性能的考虑, 默认情况下关闭此选项.
默认: NO
tilde_user_enable
如果启用, vsftpd 将试图解析类似 ~chris/pics 的路径名, 即跟着用户名的波型号. 注意, vsftpd 有时会一直解析 ~ 和 ~/ (这里, ~ 被解析称为初始登录路径). ~user 则只有在可以找到包含闲置目录的 /etc/passwd 文件时才被解析.
默认值: NO
use_localtime
如果启用, vsftpd 在列取目录时, 将显示您本地时区的时间. 默认显示为 GMT. 由 MDTM FTP 命令返回的时间同样也受此选项的影响.
默认: NO
use_sendfile
一个内部设定,用于测试在您的平台上使用 sendfile() 系统的性能.
默认: YES
userlist_deny
此选项只有在激活 userlist_enable 时才会有效. 如果您将此选项设置为 NO, 则只有在 userlist_file 文件中明确指定的用户才能登录系统. 当登录被拒绝时, 拒绝发生在被寻问命令之前.
默认: YES
userlist_enable
如果启用, vsftpd 将会从 userlist_file 选项指定的文件中加载一个用户名列表. 如果用户试图使用列表中指定的名称登录, 那么他们将在寻问密码前被拒绝. 这有助于阻止明文传送密码. 详见 userlist_deny.
默认: NO
virtual_use_local_privs
如果启用, 虚拟用户将拥有同本地用户一样的权限. 默认情况下, 虚拟用户同匿名用户权限相同, 这倾向于更多限制 (特别是在写权限上).
默认: NO
write_enable
用于控制是否允许 FTP 命令更改文件系统. 这些命令是: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE.
默认: NO
xferlog_enable
如果启用, 将会维护一个日志文件, 用于详细记录上载和下载. 默认情况下, 这个日志文件是 /var/log/vsftpd.log. 但是也可以通过配置文件中的 vsftpd_log_file 选项来指定.
默认: NO(但是在示例设置中启用了这个选项)
xferlog_std_format
如果启用, 传输日志文件将以标准 xferlog 的格式书写, 如同 wu-ftpd 一样. 这可以用于重新使用传输统计生成器. 然而, 默认格式更注重可读性. 此格式的日志文件默认为 /var/log/xferlog, 但是您也可以通过 xferlog_file 选项来设定.
默认: NO
【数字选项】
下边是数字选项的列表. 数字选项必须设置一个非负的整数. 为了便于umask选项, 同样也支持八进制数字. 八进制数字首位应为 0 .
accept_timeout
超时, 以秒计, 用于远程客户端以 PASV 模式建立数据联接.
默认: 60
anon_max_rate
允许的最大数据传输速率, 单位 b/s, 用于匿名客户端.
默认: 0 (无限制)
anon_umask
用于设定匿名用户建立文件时的 umask 值. 注意! 如果您要指定一个八进制的数字, 首位应当是 "0", 否则将视作 10 进制数字.
默认: 077
connect_timeout
超时, 单位 秒, 用于响应 PORT 方式的数据联接.
默认: 60
data_connection_timeout
超时, 单位 秒, 用于设定空闲的数据连接所允许的最大时长. 如果触发超时, 则远程客户端将被断开.
默认: 300
file_open_mode
用于设定创建上载文件的权限. mask 的优先级高于这个设定. 如果想允许上载的文件可以执行, 将此值修改为 0777
默认: 0666
ftp_data_port
FTP PORT 方式的数据联接端口.(需要激活 connect_from_port_20 选项)
默认: 20
idle_session_timeout
超时, 单位 秒, 远程客户端的最大 FTP 命令间隔. 如果超时被触发, 远程客户端将被断开.
默认: 300
listen_port
如果 vsftpd 以独立模式启动, 此端口将会监听 FTP 连入请求.
默认: 21
local_max_rate
允许的最大数据传输速率, 单位 b/s, 用于限制本地授权用户.
默认: 0 (无限制)
local_umask
用于设定本地用户上载文件的 umask 值. 注意! 如果您要指定一个八进制的数字, 首位应当是 "0", 否则将视作 10 进制数字.
默认: 077
max_clients
如果 vsftpd 以独立模式启动, 此选项用于设定最大客户端联接数. 超过部分将获得错误信息.
默认: 0 (无限制)
max_per_ip
如果 vsftpd 以独立模式启动, 此选项用于设定源于同一网络地址的最大联接数. 超过部分将获得错误信息.
默认: 0 (无限制)
pasv_max_port
为 PASV 方式数据联接指派的最大端口. 基于安全性考虑, 可以把端口范围指定在一样较小的范围内.
默认: 0 (可以使用任意端口)
pasv_min_port
为 PASV 方式数据联接指派的最小端口. 基于安全性考虑, 可以把端口范围指定在一样较小的范围内.
默认: 0 (可以使用任意端口)
trans_chunk_size
您可能不想修改这个设置, 如果有带宽限制, 可以尝试将此值设置为 8192.
默认: 0 (让vsftpd 自己选择一个更合理的设置)
【字符选项】
下边是字符选项列表
anon_root
这个选项是一个目录, 匿名用户在登录后将被转向一个指定目录(译者注: 默认根目录). 失败时将被忽略.
默认: (无)
banned_email_file
此选项用于指定包含不允许用作匿名用户登录密码的电子邮件地址列表的文件. 使用此选项需要启用 deny_email_enable 选项.
默认: /etc/vsftpd.banned_emails
banner_file
此选项用于指定包含用户登录时显示欢迎标识的文件. 设置此选项, 将取代 ftpd_banner 选项指定的欢迎标识.
默认: (无)
chown_username
用于指定匿名用户上载文件的宿主. 此选项只有在 chown_uploads 选项设定后才会有效.
默认;root
chroot_list_file
此选项用于指定包含被限制在家目录中用户列表的文件. 使用此选项, 需启用 chroot_list_enable . 如果启用了 chroot_local_user 选项, 此文件所包含的则为不会被限制在家目录中的用户列表.
默认: /etc/vsftpd.chroot_list
cmds_allowed
此选项指定允许使用的 FTP 命令(登录以后. 以及登录前的USER, PASS 和 QUIT), 以 逗号分割. 其它命令将被拒绝使用. 这对于锁定一个 FTP 服务器非常有效. 例如: mds_allowed=PASV,RETR,QUIT
默认: (无)
deny_file
此选项用于设定拒绝访问的文件类型(和目录名等). 此设定并不是对文件进行隐藏, 但是您不能对其操作(下载, 更换目录, 以及其它操作). 此选项非常简单, 不能用于严格的访问控制--文件系统的优先级要高一些. 然而, 此选项对于某些虚拟用户的设定非常有效. 特别是在一个文件可以通过各种名称访问时(可能时通过符号联接或者硬联接), 应当注意拒绝所有的访问方法. 与 hide_file 中给出名称匹配的文件会被拒绝访问. 注意 vsftpd 只支持正则表达式匹配的部分功能. 正因为如此, 您需要尽可能的对此选项的设置进行测试.同时基于安全性考虑, 建议您使用文件系统自身的访问控制. 例如: deny_file={*.mp3,*.mov,.private}
默认: (无)
dsa_cert_file
此选项用于指定用于 SSL 加密联接的 DSA 证书的位置.
默认: (无 - 使用 RSA 证书)
email_password_file
此选项用于提供启用 secure_email_list_enable 选项, 所需要的可替代文件.
默认: /etc/vsftpd.email_passwords
ftp_username
用于处理匿名 FTP 的用户名. 此用的家目录即为匿名发 FTP 的根目录.
默认: ftp
ftpd_banner
用于替换首次连入 vsftpd 时显示的欢迎标识字符串.
默认: (无 - 显示默认 vsftpd 标识)
guest_username
参阅布尔选项 guest_enable . 此选项用于将 guest 用户映射到一个真实用户上.
默认: ftp
hide_file
此选项用于设定列取目录时, 要隐藏的文件类型(以及目录等). 尽管隐藏了, 知道其宿主的客户端仍然能对文件/目录等有完全访问权限. 与名称 hide_file 中包含的字符串匹配的项都将隐藏. 注意 vsftpd 只支持正则表达式匹配的部分功能. 例如: hide_file={*.mp3,.hidden,hide*,h?}
默认: (无)
listen_address
如果 vsftpd 以独立模式运行, 此设定用于修改默认(所有本地接口)监听地址. 格式为数字 IP 地址.
默认: (无)
listen_address6
如 listen_address, 不过应该指定为IPv6 监听器指定默认监听地址. 格式为标准 IPv6 地址格式.
默认: (无)
local_root
本选项用于指定本地用户(即, 非匿名用户)登录后将会转向的目录. 失败时将被忽略.
默认: (无)
message_file
此选项用于指定进入新目录时要查询的文件名. 这个文件的内容为显示给远程用户的欢迎信息. 使用此选项, 需要启用 dirmessage_enable 选项.
默认: .message
nopriv_user
用于指定一个用户, 当 vsftpd 要切换到无权限状态时, 使用此用户. 注意这最好是一个专用用户, 而不是用户 nobody. 在大多数机器上, 用户 nobody 被用于大量重要的事情.
默认: nobody
pam_service_name
用于指定 PAM 服务的名称.
默认: ftp
pasv_address
此选项为 vsftpd 指定一个 IP 地址, 用作对 PASV 命令的响应. IP 地址应该为数字模式.
默认: (无 - 即地址从连入的联接套接字中获取)
rsa_cert_file
此选项用于指定 SSL 加密联接所用 RSA 证书的位置.
默认: /usr/share/ssl/certs/vsftpd.pem
secure_chroot_dir
此选项用于指定一个空目录. 并且 ftp 用户不应对此目录有写权限. 当 vsftpd 不需要访问文件系统是, 此目录做为一个限制目录, 将用户限制在此目录中.
默认: /usr/share/empty
ssl_ciphers
此选项用于选择 vsftpd 允许使用哪些 SSL 加密算法来用于 SSL 加密联接. 更多信息参阅 ciphers 的联机手册. 注意这样可以有效的防止对某些发现漏洞的算法进行恶意的远程攻击.
默认: DES-CBC3-SHA
user_config_dir
此选项用于定义用户个人配置文件所在的目录. 使用非常简单, 一个例子即可说明. 如果您将 user_config_dir 设置为 /etc/vsftpd_user_conf 并以用户 "chris"登录, 那么 vsftpd 将对此用户使用文件 /etc/vsftpd_user_conf/chris 中的设定. 此文件的格式在联机手册中有详细说明. 请注意, 不是每个设定都能影响用户的. 例如, 有些设定只在用户会话开始时起作用. 这包括 listen_address, banner_file, max_per_ip,max_clients, xferlog_file, 等等.
默认: (无)
user_sub_token
此选项需要和虚拟用户联合使用. 其将依据一个模板为每个虚拟用户创建家目录. 例如, 如果真实用户的家目录由选项 guest_username 指定为 /home/virtual/$USER, 并且将 user_sub_token 设定为 $USER, 当虚拟用户 fred 登入后, 将会进入(限制)目录 /home/virtual/fred. 如果 local_root 中包含了 user_sub_token 此选项也会起作用.
默认: (无)
userlist_file
此选项用于指定启用 userlist_enable 选项后需要加载文件的名称.
默认: /etc/vsftpd.user_list
vsftpd_log_file
此选项用于指定写入 vsftpd 格式日志的文件. 如果启用了 xferlog_enable, 而没有设定 xferlog_std_format 的话, 日志将只会写入此文件. 另为,如果设置了 dual_log_enable 的话, 日志同样会写入此文件. 更复杂一点, 如果您设置了 syslog_enable 的话, 输出将不会写入此文件, 而是写入系统日志文件.
默认: /var/log/vsftpd.log
xferlog_file
此选项用于指定写入 wu-ftpd 样式日志的文件名. 只有在 xferlog_enable 和 xferlog_std_format 做了相应设定, 才会记录此传输日志. 另外, 如果您设置了 dual_log_enable 选项, 也会记录此日志.
默认: /var/log/xferlog
附: FTP 数字代码的意义
110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。
cmds_allowed权限列表
# ABOR - abort a file transfer 取消文件传输
# CWD - change working directory 更改目录
# DELE - delete a remote file 删除远程文件
# LIST - list remote files 列表远程文件目录
# MDTM - return the modification time of a file 返回文件的更新时间
# MKD - make a remote directory 新建文件夹
# NLST - name list of remote directory 列表远程文件夹目录
# PASS - send password 发送密码
# PASV - enter passive mode 被动连接模式
# PROT 主动模式
# PORT - open a data port 打开一个传输端口
# PWD - print working directory 显示当前工作目录
# QUIT - terminate the connection 退出
# RETR - retrieve a remote file 下载远程文件
# RMD - remove a remote directory 删除远程文件夹
# RNFR - rename from 重命名
# RNTO - rename to 重命名
# SITE - site-specific commands 站点特别的命令
# SIZE - return the size of a file 返回文件大小
# STOR - store a file on the remote host 上传文件
# TYPE - set transfer type 设置传输类型
# USER - send username 发送用户名
# NLIST name list 机器可读的文件列表
# OPTS 对ftp服务器发送命令使能某种编码方式
# ACCT* – send account information 发送账户信息
# APPE – append to a remote file 断点续传
# REST 断点下载
# CDUP – CWD to the parent of the current directory变更工作目录到当前目录父目录
# HELP – return help on using the server 返回帮助信息
# MODE – set transfer mode 设置传输模式
# NOOP – do nothing 不错任何事
# REIN* – reinitialize the connection 重新初始化连接
# STAT – return server status 返回服务器状态
# STOU – store a file uniquely 传输特殊文件
# STRU – set file transfer structure 设置文件传输结构
# SYST – return system type 返回系统类型
# FEAT 请求FTP服务器列出它的所有的扩展命令与扩展功能
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|