admin 管理员组

文章数量: 887021

之三

虚拟用户 2
===============
这个例子将演示如何扩展 “VIRTUAL_USERS” 那个范例,从而实现更复杂一点的配置。

让我们假定我们需要 2 种不同的虚拟用户:一种只能浏览并下载资源,另一种能上传文件并浏览站内资源。

要激活这个设置,我们将使用 VSFTPD 的强大的 “ 单个用户配置 ” 功能(是 V1.1.0 后出现的新功能)。

在前一个虚拟用户范例中,我们创建了 2 个用户 -tom 和 fred.
我们将实现 fred 有写权限以上传新文件,同时 tom 只能下载文件。

1 )激活单个用户配置功能。
要激活这个功能,需要增加以下配置行到配置文件:

user_config_dir=/etc/vsftpd_user_conf

并且创建目录:

mkdir /etc/vsftpd_user_conf

2 )授予 tom 读取所有文件和目录的权限
在上一个例子的最后,我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使 /home/ftpsite 完全可读,而且被上传的文件也
赋予了完全可读的权限( daidong 注:意思是说这样虚拟用户就能读取所有的文件了)。但实现这个目的的另一个方法是授权 tom 能下载那些非完全可读的文件。

对于 tom, 他的配置文件中需要修改一个设置:
anon_world_readable_only:

设为 "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom
(daidong 注:既把默认配置修改了 anon_world_readable_only 后,复制到 /etc/vsftpd_user_conf 下,名字为 tom)

验证一下结果 - 以 tom 登录, “ls” 将返回一个目录列表。如果以 fred 登录将不会如此。

注意:重启 VSFTPD 以启用配置文件 /etc/vsftpd.conf( 高级用户也可以发送 SIGHUP 给 VSFTPD 的监听进程 ).

3) 授予 freg 读取所有文件 / 目录并创建新文件 / 目录的权限 , 但让他不能对已存在的文件 / 目录进行操作 .

echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred

验证一下 - 以 tom 登录 , 将不能上传 , 而 fred 就可以 .
试图删除一个文件 -- 噢 , 你们俩都不行 !
配置详解
=============
VSFTPD.CONF.5
================
名字
vsftpd.conf : VSFTPD 的配置文件

描述:
vsftpd.conf 用来控制 VSFTPD 的各项功能。默认状态下,它的位置是 /etc/vsftpd.conf 。
(译者注:也许老的 LINUX 版本下,配置文件是这个位置,但新的 LINUX 版本,例如 FC2 ,配置文件是在 /etc/vsftpd 目录下。
但是也很可能和安装方式有关, RPM 包安装,配置文件是 /etc/vsftpd.conf. 源码包安装: /etc/vsftpd/vsftpd.conf. 我不确定。
但以后我不再特别指出了,真累!!)
然而,你也可以通过修改配置行来指定到其它目录。这一点很有用,因为也许你想使用一些高级 inetd 功能,例如 xinetd ,在一个多虚拟主机的机器上调用不同的配置文件。

格式
VSFTPD.conf 的格式非常简单,每行要么是一个注释,要么是一个指令。注释行以 # 开始并被忽略掉。指令行格式如下:
配置项 = 参数值
很重要的一点是,这个格式里不存在任何空格。
默认的,每一个配置项在配置文件里都占一编辑行,可以被修改。

布尔选项
参数值的布尔选项可以是:
YES 或者 NO

allow_anon_ssl
只有 ss1_enable 激活了才可以启用此项。如果设置为 YES ,匿名用户将容许使用安全的 SSL 连接服务器。
默认值: NO

anon_mkdir_write_enable
如果设为 YES ,匿名用户将容许在指定的环境下创建新目录。如果此项要生效,那么配置 write_enable 必须被激活,并且匿名用户必须在其父目录有写权限。
默认值: NO

anon_other_write_enable
如果设置为 YES ,匿名用户将被授予较大的写权限,例如删除和改名。一般不建议这么做,除非想完全授权。
默认值: NO

anon_upload_enable
如果设为 YES ,匿名用户就容许在指定的环境下上传文件。如果此项要生效,那么配置 write_enable 必须激活。并且匿名用户必须在相关目录有写权限。
默认值: NO

anon_world_readable_only
启用的时候,匿名用户只容许下载完全可读的文件,这也就容许了 ftp 用户拥有对文件的所有权,尤其是在上传的情况下。
默认值: YES

anonymous_enable
控制是否容许匿名用户登录。如果容许,那么 “ftp” 和 “anonymous” 都将被视为 “anonymous" 而容许登录。
默认值: YES

ascii_download_enable
启用时,用户下载时将以 ASCII 模式传送文件。
默认值: NO

ascii_upload_enable
启用时,用户上传时将以 ASCII 模式传送文件。
默认值: NO

async_abor_enable
启用时,一个特殊的 FTP 命令 "async ABOR” 将容许使用。只有不正常的 FTP 客户端要使用这一点。而且,这个功能又难于操作,所以,
默认是把它关闭了。但是,有些客户端在取消一个传送的时候会被挂死( daidong 注:估计是客户端无响应了),那你只有启用这个功能才能避免这种情况。
默认值: NO

background
启用时,并且 VSFTPD 是 “listen” 模式启动的( daidong 注:就是 standalone 模式), VSFTPD 将把监听进程置于后台。但访问 VSFTPD 时,控制台将立即被返回到 SHELL 。
默认值: NO

check_shell
注意:这个选项只对非 PAM 结构的 VSFTPD 才有效。如果关闭, VSFTPD 将不检查 /etc/shells 以判定本地登录的用户是否有一个可用的 SHELL 。
默认值: YES

chmod_enable
启用时,将容许使用 SITE CHMOD 命令。注意,这只能用于本地用户。匿名用户绝不能使用 SITE CHMOD 。
默认值: YES

chown_uploads
如果启用,所以匿名用户上传的文件的所有者将变成在 chown_username 里指定的用户。这对管理 FTP 很有用,也许也对安全有益。
默认值: NO

chroot_list_enable
如果激活,你要提供一个用户列表,表内的用户将在登录后被放在其 home 目录,锁定在虚根下( daidong 注:进入 FTP 后, PWD 一下,可以看到当前目录是 \"/", 这就是虚根。是 FTP 的根目录,并非 FTP 服务器系统的根目录)。如果 chroot_local_user 设为 YES 后,其含义会发生一点变化。
在这种情况下,这个列表内的用户将不被锁定在虚根下。
默认情况下,这个列表文件是 /etc/vsftpd.chroot_list, 但你也可以通过修改 chroot_list_file 来改变默认值。
默认值: NO

chroot_local_user
如果设为 YES ,本地用户登录后将被(默认地)锁定在虚根下,并被放在他的 home 目录下。
警告:
这个配置项有安全的意味,特别是如果用户有上传权限或者可使用 SHELL 的话。在你确定的前提下,再启用它。
注意,这种安全暗示并非只存在于 VSFTPD ,其实是广泛用于所有的希望把用户锁定在虚根下的 FTP 软件。
默认值: NO

connect_from_port_20
这用来控制服务器是否使用 20 端口号来做数据传输。为安全起见,有些客户坚持启用。相反,关闭这一项可以让 VSFTPD 更加大众化。
默认值: NO (但在范例配置文件中,启用了,即 YES )

deny_email_enable
如果激活,你要提供一个关于匿名用户的密码 E-MAIL 表( daidong 注:我们都知道,匿名用户是用邮件地址做密码的)以阻止以这些密码登录的匿名用户。
默认情况下,这个列表文件是 /etc/vsftpd.banner_emails ,但你也可以通过设置 banned_email_file 来改变默认值。
默认值: NO

dirlist_enable
如果设置为 NO ,所有的列表命令( daidong 注:如 ls )都将被返回 “permission denied” 提示。
默认值: YES

dirmessage_enable
如果启用, FTP 服务器的用户在首次进入一个新目录的时候将显示一段信息。默认情况下,会在这个目录中查找 .message 文件,但你也可以
通过更改 message_file 来改变默认值。
默认值: NO (但在配置范例文件中启用了它)

download_enable
如果设为 NO ,下载请求将返回 “permission denied” 。
默认值: YES

dual_log_enable
如果启用,两个 LOG 文件会各自产生,默认的是 /var/log/xferlog 和 /var/log/vsftpd.log 。前一个是 wu-ftpd 格式的 LOG ,能被通用工具分析。
后一个是 VSFTPD 的专用 LOG 格式。
默认值 : NO

force_dot_files
如果激活,即使客户端没有使用 “a” 标记,( FTP 里)以 . 开始的文件和目录都会显示在目录资源列表里。但是把 "." 和 \".." 不会显示。 (daidong 注:即 LINUX 下
的当前目录和上级目录不会以 ‘.’ 或 ‘..’ 方式显示)。
默认值: NO

force_local_data_ssl
只有在 ssl_enable 激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的 SSL 登录以在数据线路上收发数据。
默认值: YES

force_local_logins_ssl
只有在 ssl_enable 激活后才能启用。如果启用,所有的非匿名用户将被强迫使用安全的 SSL 登录以发送密码。
默认值: YES

guest_enable
如果启用,所有的非匿名用户登录时将被视为 ” 游客 “ ,其名字将被映射为 guest_username 里所指定的名字。
默认值: NO

hide_ids
如果启用,目录资源列表里所有用户和组的信息将显示为 "ftp".
默认值: NO

listen
如果启用, VSFTPD 将以独立模式( standalone) 运行,也就是说可以不依赖于 inetd 或者类似的东东启动。直接运行 VSFTPD
的可执行文件一次,然后 VSFTPD 就自己去监听和处理连接请求了。
默认值: NO

listen_ipv6
类似于 listen 参数的功能,但有一点不同,启用后 VSFTPD 会去监听 IPV6 套接字而不是 IPV4 的。这个设置和 listen 的设置互相排斥。
默认值: NO

local_enable
用来控制是否容许本地用户登录。如果启用, /etc/passwd 里面的正常用户的账号将被用来登录。
默认值: NO

log_ftp_protocol
启用后,如果 xferlog_std_format 没有被激活,所有的 FTP 请求和反馈信息将被纪录。这常用于调试 (debugging) 。
默认值: NO

ls_recurse_enable
如果启用, \"ls -R" 将被容许使用。这是为了避免一点点安全风险。因为在一个大的站点内,在目录顶层使用这个命令将消耗大量资源。
默认值: NO

no_anon_password
如果启用, VSFTPD 将不会向匿名用户询问密码。匿名用户将直接登录。
默认值 :NO

no_log_lock
启用时, VSFTPD 在写入 LOG 文件时将不会把文件锁住。这一项一般不启用。它对一些工作区操作系统问题,如 Solaris / Veritas 文件系统共存时有用。
因为那在试图锁定 LOG 文件时,有时候看上去象被挂死(无响应)了。( daidong 注:这我也不是很理解。所以翻译未必近乎原意。原文如下: It exists to workaround
operating system bugs such as the Solaris / Veritas filesystem combination
which has been observed to sometimes exhibit hangs trying to lock log files. )
默认值: NO

one_process_model
如果你的 LINUX 核心是 2.4 的,那么也许能使用一种不同的安全模式,即一个连接只用一个进程。只是一个小花招,但能提高 FTP 的性能。请确定需要后再启用它,而且也请确定你的
站点是否会有大量的人同时访问。
默认值: NO

passwd_chroot_enable (daidong 注:这段自己看,无语 ...)
if enabled, along with
.BR chroot_local_user
, then a chroot() jail location may be specified on a per-user basis. Each
user's jail is derived from their home directory string in /etc/passwd. The
occurrence of /./ in the home directory string denotes that the jail is at that
particular location in the path.
默认值: NO

pasv_enable
如果你不想使用被动方式获得数据连接,请设为 NO 。
默认值: YES

pasv_promiscuous
如果你想关闭被动模式安全检查(这个安全检查能确保数据连接源于同一个 IP 地址)的话,设为 YES 。确定后再启用它( daidong 注:原话是:只有你清楚你在做什么时才启用它!)
合理的用法是:在一些安全隧道配置环境下,或者更好地支持 FXP 时(才启用它)。
默认值: NO

port_enable
如果你想关闭以端口方式获得数据连接时,请关闭它。
默认值: YES

port_promiscuous
如果你想关闭端口安全检查(这个检查可以确保对外的 (outgoing) 数据线路只通向客户端)时,请关闭它。确认后再做!
默认值: NO

run_as_launching_user
如果你想让一个用户能启动 VSFTPD 的时候,可以设为 YES 。当 ROOT 用户不能去启动 VSFTPD 的时候会很有用( daidong 注:应该不是说 ROOT 用户没有权限启动 VSFTPD ,
而是因为别的,例如安全限制,而不能以 ROOT 身份直接启动 VSFTPD )。强烈警告!!别启用这一项,除非你完全清楚你在做什么( daidong: 无语 ....) !!!随意地启动这一项会导致
非常严重的安全问题,特别是 VSFTPD 没有或者不能使用虚根技术来限制文件访问的时候(甚至 VSFTPD 是被 ROOT 启动的)。有一个愚蠢的替代方案是启用 deny_file ,将其设置为 {/*,*..*} 等,
但其可靠性却不能和虚根相比,也靠不住。
如果启用这一项,其他配置项的限制也会生效。例如,非匿名登录请求,上传文件的所有权的转换,用于连接的 20 端口和低于 1024 的监听端口将不会工作。其他一些配置项也可能被影响。
默认值 :NO

secure_email_list_enable
如果你想只接受以指定 E-MAIL 地址登录的匿名用户的话,启用它。这一般用来在不必要用虚拟用户的情况下,以较低的安全限制去访问较低安全级别的资源。如果启用它,匿名用户除非
用在 email_password_file 里指定的 E-MAIL 做为密码,否则不能登录。这个文件的格式是一个密码一行,而且没有额外的空漯

本文标签: 之三