Chinaunix首页 | 论坛 | 博客
  • 博客访问: 842362
  • 博文数量: 65
  • 博客积分: 534
  • 博客等级: 中士
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-23 14:42
个人简介

世上没有东西可以取代坚毅的地位,才干不能,有才能而失败者比比皆是;天才不能,才华横溢又毫无进取者不胜枚举;单靠教育不能,受过教育但潦倒终生者充斥世间;惟有坚毅与果断者能够无所不能,得到成功。雷?克罗克

文章分类

全部博文(65)

文章存档

2017年(1)

2015年(4)

2014年(1)

2013年(19)

2012年(32)

2011年(8)

我的朋友

分类: LINUX

2012-05-11 12:27:13

为了建构一个安全为主的 FTP 服务器, vsftpd 针对操作系统的『程序的权限 (privilege)』概念来设计, PID 在系统上面能进行的任务与他拥有的权限有关。也就是说, PID 拥有的权限等级越高, 他能够进行的任务就越多。举例来说,使用 root 身份所触发的 PID 通常拥有可以进行任何工作的权限等级。

 

不过,万一触发这个 PID 的程序 (program) 有漏洞而导致被网络怪客 (cracker) 所攻击而取得此 PID 使用权时, 那么网络怪客将会取得这个 PID 拥有的权限吶!所以,近来发展的软件都会尽量的将服务取得的 PID 权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全的啦。 vsftpd 就是基于这种想法而设计的。

 

除了 PID 方面的权限之外, vsftpd 也支持 chroot 这个函式的功能,chroot 顾名思义就是『 change root directory 』的意思,那个 root 指的是『根目录』而非系统管理员。 他可以将某个特定的目录变成根目录,所以与该目录没有关系的其他目录就不会被误用了。

 

举例来说,如果你以匿名身份登入我们的 ftp 服务的话,通常你会被限定在 /var/ftp 目录下工作, 而你看到的根目录其实就只是 /var/ftp ,至于系统其他如 /etc, /home, /usr... 等其他目录你就看不到了! 这样一来即使这个 ftp 服务被攻破了,没有关系,入侵者还是仅能在 /var/ftp 里面跑来跑去而已,而无法使用 Linux 的完整功能。自然我们的系统也就会比较安全啦!

 

vsftpd 是基于上面的说明来设计的一个较为安全的 FTP 服务器软件,他具有底下的特点喔:

 

vsftpd 这个服务的启动者身份为一般用户,所以对于 Linux 系统的权限较低,对于 Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被 vsftpd 这支服务所误用;

 

任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序所控制, 该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响 Linux 本身的系统为准;

 

绝大部分 ftp 会使用到的额外指令功能 (dir, ls, cd ...) 都已经被整合到 vsftpd 主程序当中了,因此理论上 vsftpd 不需要使用到额外的系统提供的指令,所以在 chroot 的情况下,vsftpd 不但可以顺利运作,且不需要额外功能对于系统来说也比较安全。

 

所有来自客户端且想要使用这支上层程序所提供的较高执行权限之 vsftpd 指令的需求, 均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。 例如 chown(), Login 的要求等等动作;

 

此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制用户的执行权限。

由于具有这样的特点,所以 vsftpd 会变的比较安全一些咯!底下就开始来谈如何设定吧!

 

21.2.2 所需要的软件以及软件结构

vsftpd 所需要的软件只有一个,那就是 vsftpd 啊!^_^!如果你的 CentOS 没有安装,请利用 yum install vsftpd 来安装他吧!软件很小,下载连同安装不需要几秒钟就搞定了!而事实上整个软件提供的配置文件也少的令人高兴!简单易用就是 vsftpd 的特色啊!这些设定数据比较重要的有:

 

/etc/vsftpd/vsftpd.conf

严格来说,整个 vsftpd 的配置文件就只有这个档案!这个档案的设定是以 bash 的变量设定相同的方式来处理的, 也就是『参数=设定值』来设定的,注意, 等号两边不能有空白喔!至于详细的 vsftpd.conf 可以使用 man 5 vsftpd.conf 』来详查。

 

/etc/pam.d/vsftpd

这个是 vsftpd 使用 PAM 模块时的相关配置文件。主要用来作为身份认证之用,还有一些用户身份的抵挡功能, 也是透过这个档案来达成的。你可以察看一下该档案:

[root@www ~]# cat /etc/pam.d/vsftpd

#%PAM-1.0

session optional pam_keyinit.so    force revoke

auth    required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

auth    required pam_shells.so

auth    include  password-auth

account include  password-auth

session required pam_loginuid.so

session include  password-auth

上面那个 file 后面接的档案是『限制使用者无法使用 vsftpd 』之意, 也就是说,其实你的限制档案不见得要使用系统默认值,也可以在这个档案里面进行修改啦! ^_^

 

/etc/vsftpd/ftpusers

与上一个档案有关系,也就是 PAM 模块 (/etc/pam.d/vsftpd) 所指定的那个无法登入的用户配置文件啊! 这个档案的设定很简单,你只要将『不想让他登入 FTP 的账号』写入这个档案即可。一行一个账号,看起来像这样:

[root@www ~]# cat /etc/vsftpd/ftpusers

# Users that are not allowed to login via ftp

root

bin

daemon

....(底下省略)....

瞧见没有?绝大部分的系统账号都在这个档案内喔,也就是说,系统账号默认是没有办法使用 vsftpd 的啦! 如果你还想要让某些使用者无法登入,写在这里是最快的!

 

/etc/vsftpd/user_list

这个档案是否能够生效与 vsftpd.conf 内的两个参数有关,分别是『 userlist_enable, userlist_deny 』。 如果说 /etc/vsftpd/ftpusers PAM 模块的抵挡设定项目,那么这个 /etc/vsftpd/user_list 则是 vsftpd 自定义的抵挡项目。事实上这个档案与 /etc/vsftpd/ftpusers 几乎一模一样, 在预设的情况下,你可以将不希望可登入 vsftpd 的账号写入这里。不过这个档案的功能会依据 vsftpd.conf 配置文件内的 userlist_deny={YES/NO} 而不同,这得要特别留意喔!

 

/etc/vsftpd/chroot_list

这个档案预设是不存在的,所以你必须要手动自行建立。这个档案的主要功能是可以将某些账号的使用者 chroot 在他们的家目录下!但这个档案要生效与 vsftpd.conf 内的『 chroot_list_enable, chroot_list_file 』两个参数有关。 如果你想要将某些实体用户限制在他们的家目录下而不许到其他目录去,可以启动这个设定项目喔!

 

/usr/sbin/vsftpd

这就是 vsftpd 的主要执行档咯!不要怀疑, vsftpd 只有这一个执行档而已啊!

 

/var/ftp/

这个是 vsftpd 的预设匿名者登入的根目录喔!其实与 ftp 这个账号的家目录有关啦!

大致上就只有这几个档案需要注意而已,而且每个档案的设定又都很简单!真是不错啊!

 

21.2.3 vsftpd.conf 设定值说明

事实上,/etc/vsftpd/vsftpd.conf 本身就是一个挺详细的配置文件,且使用『 man 5 vsftpd.conf 』则可以得到完整的参数说明。 不过我们这里依旧先将 vsftpd.conf 内的常用参数给他写出来,希望对你有帮助:

 

 

与服务器环境较相关的设定值

connect_from_port_20=YES (NO)

记得在前一小节提到的主动式联机使用的 FTP 服务器的 port 吗?这就是 ftp-data 的埠号;

 

listen_port=21

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

 

dirmessage_enable=YES (NO)

当用户进入某个目录时,会显示该目录需要注意的内容,显示的档案默认是 .message ,你可以使用底下的设定项目来修订!

 

message_file=.message

dirmessage_enable=YES 时,可以设定这个项目来让 vsftpd 寻找该档案来显示讯息!

 

listen=YES (NO)

若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!预设是 NO 呦!所以我们的 CentOS 将它改为 YES 哩!这样才能使用 stand alone 的方式来唤醒。

 

pasv_enable=YES (NO)

支持数据流的被动式联机模式(passive mode),一定要设定为 YES 的啦!

 

use_localtime=YES (NO)

是否使用本地时间?vsftpd 预设使用 GMT 时间(格林威治),所以预设的 FTP 内的档案日期会比台湾晚 8 小时,建议修改设定为 YES 吧!

 

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 哩!限制使用 FTP 的用量!

 

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 设定值来取代这个项目;

 

banner_file=/path/file

这个项目可以指定某个纯文本档作为使用者登入 vsftpd 服务器时所显示的欢迎字眼。同时,也能够放置一些让使用者知道本 FTP 服务器的目录架构!

 

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

guest_enable=YES (NO)

若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 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)?如果是 YES 代表用户默认就会被 chroot,如果是 NO 则预设是没有 chroot。不过,实际还是需要底下的两个参数互相参考才行。为了安全性,这里应该要设定成 YES 才好。

 

chroot_list_enable=YES (NO)

是否启用 chroot 写入列表的功能?与底下的 chroot_list_flie 有关!这个项目得要开启,否则底下的列表档案会无效。

 

chroot_list_file=/etc/vsftpd.chroot_list

如果 chroot_list_enable=YES 那么就可以设定这个项目了!这个项目与 chroot_local_user 有关,详细的设定状态请参考 21.2.6 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 的!(登入时会检查输入的 emai)

 

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/xferlog

如果上一个 xferlog_enable=YES 的话,这里就可以设定了!这个是登录档的档名啦!

 

xferlog_std_format=YES (NO)

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

 

dual_log_enable=YES, vsftpd_log_file=/var/log/vsftpd.log

除了 /var/log/xferlog wu-ftp 格式登录档之外,还可以具有 vsftpd 的独特登录档格式喔!如果你的 FTP 服务器并不是很忙碌, 或许订出两个登录档的撰写 (/var/log/{vsftpd.log,xferlog) 是不错的。

 

nopriv_user=nobody

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

 

pam_service_name=vsftpd

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

上面这些是常见的 vsftpd 的设定参数,还有很多参数我没有列出来,你可以使用 man 5 vsftpd.conf 查阅喔!不过,基本上上面这些参数已经够我们设定 vsftpd

阅读(6236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~