#################
用户权限控制
###############
# 可以上传 ( 全局控制 ).
write_enable=YES
# 本地用户上传文件的 umask
local_umask=022
# 上传文件的权限配合 umask 使用
#file_open_mode=0666
# 匿名用户可以上传
anon_upload_enable=NO
# 匿名用户可以建目录
anon_mkdir_write_enable=NO
匿名用户其它的写权利 ( 更改权限 ?)
anon_other_write_enable=NO
如果设为 YES ,匿名登入者会被允许下载可阅读的档案。默认值为 YES 。
anon_world_readable_only=YES
# 如果开启 , 那么所有非匿名登陆的用户名都会被切换成 guest_username 指定的用户名
#guest_enable=NO
所有匿名上传的文件的所属用户将会被更改成 chown_username
chown_uploads=YES
匿名上传文件所属用户名
chown_username=lightwiter
# 如果启动这项功能,则所有列在 chroot_list_file 之中的使用者不能更改根目录
chroot_list_enable=YES
# 允许使用 "async ABOR" 命令 , 一般不用 , 容易出问题
async_abor_enable=YES
管控是否可用 ASCII 模式上传。默认值为 NO 。
ascii_upload_enable=YES
# 管控是否可用 ASCII 模式下载。默认值为 NO 。
ascii_download_enable=YES
# 这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当 vsftpd 不需要 file system 的权限时,就会将使用者限制在此数据夹中。默认值为 /usr/share/empty
secure_chroot_dir=/usr/share/empty
################### 超时设置 ##################
# 空闲连接超时
idle_session_timeout=600
# 数据传输超时
data_connection_timeout=120
#PAVS 请求超时
ACCEPT_TIMEOUT=60
#PROT 模式连接超时
connect_timeout=60
################ 服务器功能选项 ###############
# 开启日记功能
xferlog_enable=YES
# 使用标准格式
xferlog_std_format=YES
# 当 xferlog_std_format 关闭且本选项开启时 , 记录所有 ftp 请求和回复 , 当调试比较有用 .
#log_ftp_protocol=NO
# 允许使用 pasv 模式
pasv_enable=YES
# 关闭安全检查 , 小心呀 .
#pasv_promiscuous+NO
# 允许使用 port 模式
#port_enable=YES
# 关闭安全检查
#prot_promiscuous
# 开启 tcp_wrappers 支持
tcp_wrappers=YES
# 定义 PAM 所使用的名称,预设为 vsftpd 。
pam_service_name=vsftpd
# 当服务器运行于最底层时使用的用户名
nopriv_user=nobody
# 使 vsftpd 在 pasv 命令回复时跳转到指定的 IP 地址 .( 服务器联接跳转 ?)
pasv_address=(none)
################# 服务器性能选项 ##############
# 是否能使用 ls -R 命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
# 是否使用单进程模式
#one_process_model
# 绑定到 listen_port 指定的端口 , 既然都绑定了也就是每时都开着的 , 就是那个什么 standalone 模式
listen=YES
# 当使用者登入后使用 ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的 UID ,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
# 显示目录清单时是用本地时间还是 GMT 时间 , 可以通过 mdtm 命令来达到一样的效果
use_localtime=NO
# 测试平台优化
#use_sendfile=YES
################ 信息类设置 ################
#login 时显示欢迎信息 . 如果设置了 banner_file 则此设置无效
ftpd_banner= 欢迎来到湖南三辰 Fake-Ta FTP 网站 .
# 允许为目录配置显示信息 , 显示每个目录下面的 message_file 文件的内容
dirmessage_enable=YES
# 显示会话状态信息 , 关 !
#setproctitle_enable=YES
############## 文件定义 ##################
# 定义不能更改用户主目录的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
# 定义限制 / 允许用户登录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
# 定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
# 禁止使用的匿名用户登陆时作为密码的电子邮件地址
banned_email_file=/etc/vsftpd.banned_emails
# 日志文件位置
xferlog_file=/var/log/vsftpd.log
# 目录信息文件
message_file=.message
############## 目录定义 #################
# 定义用户配置文件的目录
user_config_dir=/etc/vsftpd/userconf
# 定义本地用户登陆的根目录 , 注意定义根目录可以是相对路径也可以是绝对路径 . 相对路径是针对用户家目录来说的 .
local_root=webdisk # 此项设置每个用户登陆后其根目录为 /home/username/webdisk
# 匿名用户登陆后的根目录
anon_root=/var/ftp
############# 用户连接选项 #################
# 可接受的最大 client 数目
max_clients=100
# 每个 ip 的最大 client 数目
max_per_ip=5
# 使用标准的 20 端口来连接 ftp
connect_from_port_20=YES
# 绑定到某个 IP, 其它 IP 不能访问
listen_address=192.168.0.2
# 绑定到某个端口
#listen_port=2121
# 数据传输端口
#ftp_data_port=2020
#pasv 连接模式时可以使用 port 范围的上界, 0 表示任意。默认值为 0 。
pasv_max_port=0
#pasv 连接模式时可以使用 port 范围的下界, 0 表示任意。默认值为 0 。
pasv_min_port=0
############## 数据传输选项 #################
# 匿名用户的传输比率 (b/s)
anon_max_rate=51200
# 本地用户的传输比率 (b/s)
local_max_rate=5120000
########################################
别外 , 如果要对每个用户进行单独的控制 , 只需要在 user_config_dir 中建立 username 文件 , 内容为数据传输和用户权利里面设置个人的合适的选项 , 用户自定义文件同样适合用 pam 支持的虚拟用户
附 : 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 未执行请求的的命令,名称不正确。
2 、 VSFTPD 官方资料翻译版(不完整版) --- 摘自中国 Linux 公社
翻译了部分 VSFTPD 的官方资料。
有些知道是什么意思,但难于翻译。有些涉及专业的知识,我自己也不懂,只好按字面翻译。有些我自己看不懂,只好尽量翻译。
如果看了其中一部分觉得糊涂,请参阅官方文挡。
安装篇
===============
这个文件详细介绍了如何从 VSFTPD 的 .tar.gz 分发包开始,建立和安装并运行 VSFTPD 。
1 )建立 VSFTPD
先进入解压 .tar.gz 文件后产生的目录内。如下:
cd vsftpd-2.0.1
编辑 "builddefs.h" 以操作 compile-time 设定。( tcp_wrappers build, 等)
输入 make, 回车(如果它不工作请发邮件通知我 <wbr>.<br></wbr> 这将产生一个二进制文件,你可以验证一下。如下:
[chris@localhost vsftpd]$ ls -l vsftpd
-rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd
2 )满足 VSFTPD 安装所需的一些条件
VSFTPD 默认设置需要一个 \"nobody" 用户,如果这个用户不存在,那么添加它。如下:
[root@localhost root]# useradd nobody
useradd: user nobody exists
VSFTPD 默认设置需要一个空目录: /usr/share/empty. 增加这个目录,如果它还不存在的话。如下:
[root@localhost root]# mkdir /usr/share/empty/
mkdir: cannot create directory `/usr/share/empty': File exists
如果容许匿名用户( anonymous) ,那么你将需要一个 \"ftp" 用户和其 home 目录(这个 home 目录不属于 “ftp” 用户,而且 “ftp" 用户也对其没有写权限)在你的系统中存在。
以下命令用来创建一个 \"ftp" 用户,如果它还不存在的话。
[root@localhost root]# mkdir /var/ftp/
[root@localhost root]# useradd -d /var/ftp ftp
(即使你的 \"ftp" 用户已经存在,完成以下这两步也是很有好处的:)
[root@localhost root]# chown root.root /var/ftp
[root@localhost root]# chmod og-w /var/ftp
3 )安装 VSFTPD 的配置、执行和帮助文件。
输入 "make install" 后会将二进制文件和帮助文件拷贝到适当的目录。
你也可以手工拷贝这些文件:
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8
"make install" 不会拷贝默认的配置文件,所以建议你手工拷贝:
cp vsftpd.conf /etc
daidong 注:根据你系统版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd
4) 测试 (无 inetd 影响)
VSFTPD 能运行在独立模式( standalone) 或者通过 inetd(xinetd) 来启动。
你能通过 inetd 来运行 vsftpd 以更好地控制它。但我们在首次运行时不这么做,以便检查系统是否现在配置正常。
编辑 /etc/vsftpd.conf ( daidong 注:也可能是 /etc/vsftpd/vsftpd.conf) ,并在最下面加入以下这一行:
listen=YES
这将告诉 VSFTPD 不要从 inetd 启动。
OK ,现在试着启动 FTP 。
以 ROOT 登录。
确定你没有运行其他 FTP 服务(否则 VSFTPD 不能占用 FTP 所需的 21 端口)。
运行那个二进制文件,如下:
[root@localhost root]# /usr/local/sbin/vsftpd &
[1] 2104
如果一切正常,那么你将连上 FTP 服务器,如下:
[chris@localhost chris]$ ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 1.1.1)
Name (localhost:chris): ftp
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,229,133)
150 Here comes the directory listing.
d--x--x--x 2 0 0 4096 Jan 14 2002 bin
d--x--x--x 2 0 0 4096 Apr 21 20:52 etc
drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib
drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub
226 Directory send OK.
ftp>
5 )从 inetd 或者类似方式启动(官方推荐使用 standalone 方式)
你也许想通过 inetd 或者类似方式启动 VSFTPD ,因为这能给你更多的感受。例如 xinetd 就有很多的设置。
(注意: VSFTPD 的内在机制屏蔽了 xinetd 的大多数的有用的设置)。
如果使用标准的 \"inetd", 你需要编辑 /etc/inetd.conf, 在其中加入以下一行:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd
(确定你删除或者注释掉一些已存在的 FTP 服务配置行。如果你没有安装 tcp_wrappers, 或者不想使用它们,那么请去掉 /usr/sbin/tcpd part).
inetd 需要指定并重新载入它的配置文件:
kill -SIGHUP `pidof inetd`
如果你想使用 "xinetd", 请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的 xinetd 功能。
6 )为本地登录配置 PAM 文件(可选)
如果你在一台激活了 PAM 的设备上运行 VSFTPD ,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。
(注:如果你的 PAM 版本比较老,那么这个文件也许是 /etc/pam.conf).
做为一个标准设置,你可以拷贝一个已提供的范例文件,如下:
cp RedHat/vsftpd.pam /etc/pam.d/ftp
7 )自定义你的配置文件
完成以上的配置后,建议你安装一个配置文件。默认的配置文件位置是 /etc/vsftpd.conf. 在 VSFTPD 软件分发包内有一个范例配置文件。
你可以拷贝其为 /etc/vsftpd.conf 以做进一步修改。
cp vsftpd.conf /etc
( daidong 注:也可能是 cp vsftpd.conf /etc/vsftpd ).
这个默认配置即不容许本地登录也不容许匿名用户上传,也许你希望更改这个配置。
其它
===================
测试平台 (已通过)
- 流行的,功能完善的平台都能测试通过。在以下平台的较新版本, VSFTPD 工作得很好。在其大部分较早的版本下,也运行正常。
- RedHat Linux
- RedHat Enterprise Linux
- Solaris / GNU tools (Solaris 8 or newer)
- SuSE Linux
- Debian Linux
- OpenBSD
- FreeBSD
- NetBSD
- HP-UX / GNU tools
- IRIX / GNU tools
- Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)
虚拟用户 1
=============
这个例子示范了如何为虚拟用户设置 VSFTPD/PAM 。
虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全,因为这个账号只能用于 FTP 服务器。
虚拟用户经常用来提供给不大可信任的用户访问某些资源,而这些资源通常是其他普通用户不能访问的。
1 )创建虚拟用户数据库
我们将使用 pam_userdb 来认证虚拟用户。这需要提供一个 “db" 格式(一种通用数据库格式)的用户名 / 密码文件。
创建一个 \"db" 格式的文件,首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如 logins.txt :
tom
foo
fired
bar
这个例子中 ,tom 用户的密码是 foo.fired 用户的密码是 bar.
以 ROOT 登录,创建一个数据库文件,如下:
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(这要求 berkeley db 程序已经安装)
( 注:一些系统也许安装了多个版本的 \"db", 所以某些情况下你可能使用 \"db3_load" 才是正确的。对于一些 Debian 系统就是这样。
关键在于要让 pam_userdb 相信它的登录数据库是哪一个 db 版本所产生(一般都是 db3 ,尽管你的系统里可能安装的是 db4). )
这将创建 /etc/vsftpd_login.db 文件。显然,你希望设定这个文件的权限:
chmod 600 /etc/vsftpd_login.db
要了解更多关于维护你的登录数据库的信息,请在 "berkeley DB" 察看相关文档:
http://www.sleepycat.com/docs/utility/index.html
2 )用你的新数据库创建一个 PAM 文件
请参考范例 vsftpd.pam ,它包含 2 行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
这是告诉 PAM 用新的数据库去验证用户。把这个 PAM 文件拷贝到 PAM 目录,一般是 /etc/pam.d
cp vsftpd.pam /etc/pam.d/ftp
3) 为虚拟用户设置 home 目录
useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite
(which should give):
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite
我们已经创建了一个名叫 \"virtual" 的用户, home 目录是 \"/home/ftpsite".
我们拷贝一些东西到这个下载目录:
cp /etc/hosts /home/ftpsite
chown virtual.virtual /home/ftpsite/hosts
4 )创建你的 vsftpd.conf 配置文件
请参考这个目录下的例子。让我们一行行地看一看这些配置:
anonymous_enable=NO
local_enable=YES
安全起见,屏蔽了匿名用户,只启用了非匿名用户(即虚拟用户使用的账号)
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
为了安全请确认这几个配置,这将关闭写的权限。
chroot_local_user=YES
这将把虚拟用户锁定在我们在以上设置的 /home/ftpsite 目录内。
guest_enable=YES
guest_username=virtual
guest_enable 非常重要 - 它激活了虚拟用户!而 guest_username 说明所有的虚拟用户都对应我们在上面设置的真实用户: “virtual".
这同时确定了虚拟用户在文件系统中的位置,也就是说,虚拟用户的 home 目录即 \"virtual" 用户的 home 目录: /home/ftpsite 。
listen=YES
listen_port=10021
这让 VSFTPD 以独立模式 (standalone) 运行,而不是从 inetd 方式启动。也就是说,你运行 VSFTPD 可执行文件就启动了 FTP 服务。
同时也让 VSFTPD 启用非标准端口 10021 来监听 FTP 请求( FTP 一般使用 21 端口)。
pasv_min_port=30000
pasv_max_port=30999
这设定了被动模式的 FTP 请求端口。当你配置了一个防火墙的时候,这个配置就很好用。
拷贝范例配置文件到 /etc
cp vsftpd.conf /etc/
(daidong 注:也可能是 /etc/vsftpd)
5) 启动 VSFTPD
到 VSFTPD 二进制文件所在的目录,输入:
./vsftpd
如果一切正常,这个命令将生效。否则,你将会看到一些错误信息的反馈。
6 )测试
启动另一个会话。(或者 ctrl-z ,再输入 "bg", 让 VSFTPD 在后台运行)。
这是一个 FTP 会话的例子:
ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>
注释:
密码是 \"foo"
出现 ”failed to open directory“ 的话,别担心。这是因为 /home/ftpsite 目录不容许被任意浏览。
(我们可以更改 anon_world_readable_only=NO 以消除告警,但为了安全,还是保留这个配置)。
我们能通过 size 命令看到我们已经访问了被我们拷贝到这里的 "hosts" 文件。
vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=10021
pasv_min_port=30000
pasv_max_port=30999
# 可以上传 ( 全局控制 ).
write_enable=YES
# 本地用户上传文件的 umask
local_umask=022
# 上传文件的权限配合 umask 使用
#file_open_mode=0666
# 匿名用户可以上传
anon_upload_enable=NO
# 匿名用户可以建目录
anon_mkdir_write_enable=NO
匿名用户其它的写权利 ( 更改权限 ?)
anon_other_write_enable=NO
如果设为 YES ,匿名登入者会被允许下载可阅读的档案。默认值为 YES 。
anon_world_readable_only=YES
# 如果开启 , 那么所有非匿名登陆的用户名都会被切换成 guest_username 指定的用户名
#guest_enable=NO
所有匿名上传的文件的所属用户将会被更改成 chown_username
chown_uploads=YES
匿名上传文件所属用户名
chown_username=lightwiter
# 如果启动这项功能,则所有列在 chroot_list_file 之中的使用者不能更改根目录
chroot_list_enable=YES
# 允许使用 "async ABOR" 命令 , 一般不用 , 容易出问题
async_abor_enable=YES
管控是否可用 ASCII 模式上传。默认值为 NO 。
ascii_upload_enable=YES
# 管控是否可用 ASCII 模式下载。默认值为 NO 。
ascii_download_enable=YES
# 这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当 vsftpd 不需要 file system 的权限时,就会将使用者限制在此数据夹中。默认值为 /usr/share/empty
secure_chroot_dir=/usr/share/empty
################### 超时设置 ##################
# 空闲连接超时
idle_session_timeout=600
# 数据传输超时
data_connection_timeout=120
#PAVS 请求超时
ACCEPT_TIMEOUT=60
#PROT 模式连接超时
connect_timeout=60
################ 服务器功能选项 ###############
# 开启日记功能
xferlog_enable=YES
# 使用标准格式
xferlog_std_format=YES
# 当 xferlog_std_format 关闭且本选项开启时 , 记录所有 ftp 请求和回复 , 当调试比较有用 .
#log_ftp_protocol=NO
# 允许使用 pasv 模式
pasv_enable=YES
# 关闭安全检查 , 小心呀 .
#pasv_promiscuous+NO
# 允许使用 port 模式
#port_enable=YES
# 关闭安全检查
#prot_promiscuous
# 开启 tcp_wrappers 支持
tcp_wrappers=YES
# 定义 PAM 所使用的名称,预设为 vsftpd 。
pam_service_name=vsftpd
# 当服务器运行于最底层时使用的用户名
nopriv_user=nobody
# 使 vsftpd 在 pasv 命令回复时跳转到指定的 IP 地址 .( 服务器联接跳转 ?)
pasv_address=(none)
################# 服务器性能选项 ##############
# 是否能使用 ls -R 命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
# 是否使用单进程模式
#one_process_model
# 绑定到 listen_port 指定的端口 , 既然都绑定了也就是每时都开着的 , 就是那个什么 standalone 模式
listen=YES
# 当使用者登入后使用 ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的 UID ,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
# 显示目录清单时是用本地时间还是 GMT 时间 , 可以通过 mdtm 命令来达到一样的效果
use_localtime=NO
# 测试平台优化
#use_sendfile=YES
################ 信息类设置 ################
#login 时显示欢迎信息 . 如果设置了 banner_file 则此设置无效
ftpd_banner= 欢迎来到湖南三辰 Fake-Ta FTP 网站 .
# 允许为目录配置显示信息 , 显示每个目录下面的 message_file 文件的内容
dirmessage_enable=YES
# 显示会话状态信息 , 关 !
#setproctitle_enable=YES
############## 文件定义 ##################
# 定义不能更改用户主目录的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
# 定义限制 / 允许用户登录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
# 定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
# 禁止使用的匿名用户登陆时作为密码的电子邮件地址
banned_email_file=/etc/vsftpd.banned_emails
# 日志文件位置
xferlog_file=/var/log/vsftpd.log
# 目录信息文件
message_file=.message
############## 目录定义 #################
# 定义用户配置文件的目录
user_config_dir=/etc/vsftpd/userconf
# 定义本地用户登陆的根目录 , 注意定义根目录可以是相对路径也可以是绝对路径 . 相对路径是针对用户家目录来说的 .
local_root=webdisk # 此项设置每个用户登陆后其根目录为 /home/username/webdisk
# 匿名用户登陆后的根目录
anon_root=/var/ftp
############# 用户连接选项 #################
# 可接受的最大 client 数目
max_clients=100
# 每个 ip 的最大 client 数目
max_per_ip=5
# 使用标准的 20 端口来连接 ftp
connect_from_port_20=YES
# 绑定到某个 IP, 其它 IP 不能访问
listen_address=192.168.0.2
# 绑定到某个端口
#listen_port=2121
# 数据传输端口
#ftp_data_port=2020
#pasv 连接模式时可以使用 port 范围的上界, 0 表示任意。默认值为 0 。
pasv_max_port=0
#pasv 连接模式时可以使用 port 范围的下界, 0 表示任意。默认值为 0 。
pasv_min_port=0
############## 数据传输选项 #################
# 匿名用户的传输比率 (b/s)
anon_max_rate=51200
# 本地用户的传输比率 (b/s)
local_max_rate=5120000
########################################
别外 , 如果要对每个用户进行单独的控制 , 只需要在 user_config_dir 中建立 username 文件 , 内容为数据传输和用户权利里面设置个人的合适的选项 , 用户自定义文件同样适合用 pam 支持的虚拟用户
附 : 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 未执行请求的的命令,名称不正确。
2 、 VSFTPD 官方资料翻译版(不完整版) --- 摘自中国 Linux 公社
翻译了部分 VSFTPD 的官方资料。
有些知道是什么意思,但难于翻译。有些涉及专业的知识,我自己也不懂,只好按字面翻译。有些我自己看不懂,只好尽量翻译。
如果看了其中一部分觉得糊涂,请参阅官方文挡。
安装篇
===============
这个文件详细介绍了如何从 VSFTPD 的 .tar.gz 分发包开始,建立和安装并运行 VSFTPD 。
1 )建立 VSFTPD
先进入解压 .tar.gz 文件后产生的目录内。如下:
cd vsftpd-2.0.1
编辑 "builddefs.h" 以操作 compile-time 设定。( tcp_wrappers build, 等)
输入 make, 回车(如果它不工作请发邮件通知我 <wbr>.<br></wbr> 这将产生一个二进制文件,你可以验证一下。如下:
[chris@localhost vsftpd]$ ls -l vsftpd
-rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd
2 )满足 VSFTPD 安装所需的一些条件
VSFTPD 默认设置需要一个 \"nobody" 用户,如果这个用户不存在,那么添加它。如下:
[root@localhost root]# useradd nobody
useradd: user nobody exists
VSFTPD 默认设置需要一个空目录: /usr/share/empty. 增加这个目录,如果它还不存在的话。如下:
[root@localhost root]# mkdir /usr/share/empty/
mkdir: cannot create directory `/usr/share/empty': File exists
如果容许匿名用户( anonymous) ,那么你将需要一个 \"ftp" 用户和其 home 目录(这个 home 目录不属于 “ftp” 用户,而且 “ftp" 用户也对其没有写权限)在你的系统中存在。
以下命令用来创建一个 \"ftp" 用户,如果它还不存在的话。
[root@localhost root]# mkdir /var/ftp/
[root@localhost root]# useradd -d /var/ftp ftp
(即使你的 \"ftp" 用户已经存在,完成以下这两步也是很有好处的:)
[root@localhost root]# chown root.root /var/ftp
[root@localhost root]# chmod og-w /var/ftp
3 )安装 VSFTPD 的配置、执行和帮助文件。
输入 "make install" 后会将二进制文件和帮助文件拷贝到适当的目录。
你也可以手工拷贝这些文件:
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8
"make install" 不会拷贝默认的配置文件,所以建议你手工拷贝:
cp vsftpd.conf /etc
daidong 注:根据你系统版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd
4) 测试 (无 inetd 影响)
VSFTPD 能运行在独立模式( standalone) 或者通过 inetd(xinetd) 来启动。
你能通过 inetd 来运行 vsftpd 以更好地控制它。但我们在首次运行时不这么做,以便检查系统是否现在配置正常。
编辑 /etc/vsftpd.conf ( daidong 注:也可能是 /etc/vsftpd/vsftpd.conf) ,并在最下面加入以下这一行:
listen=YES
这将告诉 VSFTPD 不要从 inetd 启动。
OK ,现在试着启动 FTP 。
以 ROOT 登录。
确定你没有运行其他 FTP 服务(否则 VSFTPD 不能占用 FTP 所需的 21 端口)。
运行那个二进制文件,如下:
[root@localhost root]# /usr/local/sbin/vsftpd &
[1] 2104
如果一切正常,那么你将连上 FTP 服务器,如下:
[chris@localhost chris]$ ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 1.1.1)
Name (localhost:chris): ftp
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,229,133)
150 Here comes the directory listing.
d--x--x--x 2 0 0 4096 Jan 14 2002 bin
d--x--x--x 2 0 0 4096 Apr 21 20:52 etc
drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib
drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub
226 Directory send OK.
ftp>
5 )从 inetd 或者类似方式启动(官方推荐使用 standalone 方式)
你也许想通过 inetd 或者类似方式启动 VSFTPD ,因为这能给你更多的感受。例如 xinetd 就有很多的设置。
(注意: VSFTPD 的内在机制屏蔽了 xinetd 的大多数的有用的设置)。
如果使用标准的 \"inetd", 你需要编辑 /etc/inetd.conf, 在其中加入以下一行:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd
(确定你删除或者注释掉一些已存在的 FTP 服务配置行。如果你没有安装 tcp_wrappers, 或者不想使用它们,那么请去掉 /usr/sbin/tcpd part).
inetd 需要指定并重新载入它的配置文件:
kill -SIGHUP `pidof inetd`
如果你想使用 "xinetd", 请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的 xinetd 功能。
6 )为本地登录配置 PAM 文件(可选)
如果你在一台激活了 PAM 的设备上运行 VSFTPD ,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。
(注:如果你的 PAM 版本比较老,那么这个文件也许是 /etc/pam.conf).
做为一个标准设置,你可以拷贝一个已提供的范例文件,如下:
cp RedHat/vsftpd.pam /etc/pam.d/ftp
7 )自定义你的配置文件
完成以上的配置后,建议你安装一个配置文件。默认的配置文件位置是 /etc/vsftpd.conf. 在 VSFTPD 软件分发包内有一个范例配置文件。
你可以拷贝其为 /etc/vsftpd.conf 以做进一步修改。
cp vsftpd.conf /etc
( daidong 注:也可能是 cp vsftpd.conf /etc/vsftpd ).
这个默认配置即不容许本地登录也不容许匿名用户上传,也许你希望更改这个配置。
其它
===================
测试平台 (已通过)
- 流行的,功能完善的平台都能测试通过。在以下平台的较新版本, VSFTPD 工作得很好。在其大部分较早的版本下,也运行正常。
- RedHat Linux
- RedHat Enterprise Linux
- Solaris / GNU tools (Solaris 8 or newer)
- SuSE Linux
- Debian Linux
- OpenBSD
- FreeBSD
- NetBSD
- HP-UX / GNU tools
- IRIX / GNU tools
- Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)
虚拟用户 1
=============
这个例子示范了如何为虚拟用户设置 VSFTPD/PAM 。
虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全,因为这个账号只能用于 FTP 服务器。
虚拟用户经常用来提供给不大可信任的用户访问某些资源,而这些资源通常是其他普通用户不能访问的。
1 )创建虚拟用户数据库
我们将使用 pam_userdb 来认证虚拟用户。这需要提供一个 “db" 格式(一种通用数据库格式)的用户名 / 密码文件。
创建一个 \"db" 格式的文件,首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如 logins.txt :
tom
foo
fired
bar
这个例子中 ,tom 用户的密码是 foo.fired 用户的密码是 bar.
以 ROOT 登录,创建一个数据库文件,如下:
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(这要求 berkeley db 程序已经安装)
( 注:一些系统也许安装了多个版本的 \"db", 所以某些情况下你可能使用 \"db3_load" 才是正确的。对于一些 Debian 系统就是这样。
关键在于要让 pam_userdb 相信它的登录数据库是哪一个 db 版本所产生(一般都是 db3 ,尽管你的系统里可能安装的是 db4). )
这将创建 /etc/vsftpd_login.db 文件。显然,你希望设定这个文件的权限:
chmod 600 /etc/vsftpd_login.db
要了解更多关于维护你的登录数据库的信息,请在 "berkeley DB" 察看相关文档:
http://www.sleepycat.com/docs/utility/index.html
2 )用你的新数据库创建一个 PAM 文件
请参考范例 vsftpd.pam ,它包含 2 行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
这是告诉 PAM 用新的数据库去验证用户。把这个 PAM 文件拷贝到 PAM 目录,一般是 /etc/pam.d
cp vsftpd.pam /etc/pam.d/ftp
3) 为虚拟用户设置 home 目录
useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite
(which should give):
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite
我们已经创建了一个名叫 \"virtual" 的用户, home 目录是 \"/home/ftpsite".
我们拷贝一些东西到这个下载目录:
cp /etc/hosts /home/ftpsite
chown virtual.virtual /home/ftpsite/hosts
4 )创建你的 vsftpd.conf 配置文件
请参考这个目录下的例子。让我们一行行地看一看这些配置:
anonymous_enable=NO
local_enable=YES
安全起见,屏蔽了匿名用户,只启用了非匿名用户(即虚拟用户使用的账号)
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
为了安全请确认这几个配置,这将关闭写的权限。
chroot_local_user=YES
这将把虚拟用户锁定在我们在以上设置的 /home/ftpsite 目录内。
guest_enable=YES
guest_username=virtual
guest_enable 非常重要 - 它激活了虚拟用户!而 guest_username 说明所有的虚拟用户都对应我们在上面设置的真实用户: “virtual".
这同时确定了虚拟用户在文件系统中的位置,也就是说,虚拟用户的 home 目录即 \"virtual" 用户的 home 目录: /home/ftpsite 。
listen=YES
listen_port=10021
这让 VSFTPD 以独立模式 (standalone) 运行,而不是从 inetd 方式启动。也就是说,你运行 VSFTPD 可执行文件就启动了 FTP 服务。
同时也让 VSFTPD 启用非标准端口 10021 来监听 FTP 请求( FTP 一般使用 21 端口)。
pasv_min_port=30000
pasv_max_port=30999
这设定了被动模式的 FTP 请求端口。当你配置了一个防火墙的时候,这个配置就很好用。
拷贝范例配置文件到 /etc
cp vsftpd.conf /etc/
(daidong 注:也可能是 /etc/vsftpd)
5) 启动 VSFTPD
到 VSFTPD 二进制文件所在的目录,输入:
./vsftpd
如果一切正常,这个命令将生效。否则,你将会看到一些错误信息的反馈。
6 )测试
启动另一个会话。(或者 ctrl-z ,再输入 "bg", 让 VSFTPD 在后台运行)。
这是一个 FTP 会话的例子:
ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>
注释:
密码是 \"foo"
出现 ”failed to open directory“ 的话,别担心。这是因为 /home/ftpsite 目录不容许被任意浏览。
(我们可以更改 anon_world_readable_only=NO 以消除告警,但为了安全,还是保留这个配置)。
我们能通过 size 命令看到我们已经访问了被我们拷贝到这里的 "hosts" 文件。
vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=10021
pasv_min_port=30000
pasv_max_port=30999