产品设计's Archiver

ngc168 发表于 2007-3-10 22:07

提高网络服务安全性

匿名FTP的设定 匿名FTP若有正确地设定与管理,将是一项很有价值的服务。这份文件的第一节提供一般 匿名FTP最起始的设定方式。第二节提出当一个网站要在匿名FTP下提供可写入目录区的 相关议题与面临的问题。第三节提供CERT以前的FTP 相关Advisories信息。 `GHMb-a
%E S4C8zYz B2JPH
以下的设定方式是由过去许多网站累积的经验与建议组成。我们认为可以让有个别需求的网站拥有不同设定的选择。 \8^'Z#P UZ6Z

:ssa {iQ I.设定匿名FTP
N6k b0oQ.^X 6Y&E7rzrm5rJ
A.FTP daemon 9flC ?0a O
-lR^XBw&x9h]a
网站必须确定目前使用的是最新版本的FTP daemon。 (la+h5EbqhN,@7u9g
]#_%~.o;pz.pTB
B.设定匿名FTP的目录 )E`8R3Df:yg"d

b3@#^9Bu'^;_ Q+~ 匿名ftp的根目录(~ftp)和其子目录的拥有者不能为ftp帐号,或与ftp相同群组的帐号。这是一般常见的设定问题。假如这些目录被ftp或与ftp相同群组的帐号所拥有,又没有做好防止写入的保护,入侵者便可能在其中增加档案(例如:.rhosts檔)或修改其它档案。许多网站允许使用root帐号。让匿名FTP的根目录与子目录的拥有者是root,所属族群(group)为system,并限定存取权(如chmod 0755),如此只有root有写入的权力,这能帮助你维持FTP服务的安全。
Z&R3i0]s#^ Mg 0k&wB u0Ldas
以下是一个匿名ftp目录的设定范例: B1fr uyU*Z
M&JR `_3K4cvD
V:z-_3u*EV v1o
drwxr-xr-x 7 root system 512 Mar 1 15:17 ./0_*^0Cm,bcZ#n X\D
drwxr-xr-x 25 root system 512 Jan 4 11:30 ../*` ph'f.A7`
drwxr-xr-x 2 root system 512 Dec 20 15:43 bin/
#U9I `%o ]JrAlV drwxr-xr-x 2 root system 512 Mar 12 16:23 etc/
M!g9Rr+IpLe0Z drwxr-xr-x 10 root system 512 Jun 5 10:54 pub/
K x!c ?e Pm 6C1A iB|+}`

A E ]l |
Y g)@8H6ZFnS N B9s4^ 所有的档案和链接库,特别是那些被FTP daemon使用和那些在 ~ftp/bin 与~ftp/etc 中的档案,应该像上面范例中的目录做相同的保护。这些档案和链接库除了不应该被ftp帐号或与ftp相同群组的帐号所拥有之外,也必须防止写入。 /w1dPh7N c:CV
4_Fr%p#hv5XU/k(m"Sn
C.使用合适的密码与群组档案 W(Xx V$W*M
Y+]:O W#@/Y,K*t
我们强烈建议网站不要使用系统中 /etc/passwd 做为~ftp/etc 目录中的密码档案或将系统中 /etc/group 做为 ~ftp/etc目录中的群组档案。在~ftp/etc目录中放置这些档案会使得入侵者取得它们。这些档案是可自定的而且不是用来做存取控制。
-f(\!\j|BZ N nH"u_
我们建议你在 ~ftp/etc/passwd 与 ~ftp/etc/group 使用代替的档案。这些档案必须由root所拥有。DIR命令会使用这代替的档案来显示档案及目录的拥有者和群组名称。网站必须确定 ~/ftp/etc/passwd档中没有包含任何与系统中 /etc/passwd文件中相同的帐号名称。这些档案应该仅仅包含需要显示的FTP阶层架构中档案与目录的拥有者与所属群组名称。此外,确定密码字段是"整理"过的。例如使用「*」来取代密码字段。
\kO%q/]'EI yzjA#b~\
以下为cert中匿名ftp的密码档案范例 j_Ae#q8R
p-~ T:u&^8]t0X
9y3Z[*o8@2i!V
ssphwg:*:3144:20:Site Specific Policy Handbook Working Group::p U4M ?6{#W2uz
cops:*:3271:20:COPS Distribution::0y9Ux4|%M9Q{
cert:*:9920:20:CERT::
5KH9r1@j+o \Y tools:*:9921:20:CERT Tools::x`2ar4h7bvDT
ftp:*:9922:90:Anonymous FTP::.k&V;FC h%Y)|XRc
nist:*:9923:90:NIST Files::
KKX!V!pD"fiW
ss$@S;shH3G| gAf`a
以下为cert中匿名ftp的群组档案范例 +@F9KS9V

Joi Pxl`5w
~.](O#J^q&Z+s cert:*:20:&E C*cU[tvW2h_*K
ftp:*:90:
{;dkj}}U5`gh naay)A1l:H's(|
Z!M]1F5yH7O(B
II.在你的匿名ftp提供可写入的目录
tY+Y/TJ X3X#n7oe:@^;?
让一个匿名ftp服务允许使用者储存档案是有风险存在的。我们强烈提醒网站不要自动建立一个上传目录,除非已考虑过相关的风险。CERT/CC的事件回报成员接获许多使用上传目录造成非法传输版权软件或交换帐号与密码信息的事件。也接获恶意地将系统档案灌报造成denial of service问题。 ;C(R%dd7` N;lL|

}7_2R-uXn1Wp 本节在讨论利用三种方法来解决这个问题。第一种方法是使用一个修正过的FTP daemon。第二个方法是提供对特定目录的写入限制。第三种方法是使用独立的目录。 .p5` A#v8Y3L9|)Y;x'b[
:e4I"k]k.nA
A.修正过的FTP daemon
O T:M;e}y8G
u"~Db/\5k 假如你的网站计划提供目录用来做档案上传,我们建议使用修正过的FTP daemon对档案上传的目录做存取的控制。这是避免使用不需要的写入区域的最好的方法。以下有一些建议: M9[[IiHUt@#V

?b$@&~lkp/M 1.限定上传的档案无法再被存取, 如此可由系统管理者检测后,再放至于适当位置供人下载。
6S_m{Pv8k%B
YJX;LW3l0RIv 2.限制每个联机的上传资料大小。 lee w3G u@$S
t+W?9xN0Co4g
3.依照现有的磁盘大小限制数据传输的总量。
+Cqj4}(Z;}C,w,C .V4gB,}3B'y-d3q-m!N"K
4.增加登录记录以提前发现不当的使用。 $U0Ik[9e6Q%A

/Y m^(y-^X 若您欲修改FTP daemon, 您应该可以从厂商那里拿到程序代码,或者您可从下列地方取得公开的FTP程序原始码:
$R-v wUs8p3n*N'u
DT8Y@:GL
c:P:_ M_:a e;sTxI wuarchive.wustl.edu ~ftp/packages/wuarchive-ftpd
@'?(nL5L| {)R2y ftp.uu.net ~ftp/systems/unix/bsd-sources/libexec/ftpd
!xM4?+]je gatekeeper.dec.com ~ftp/pub/DEC/gwtools/ftpd.tar.Z
{ ~2h dWB ` \xG O ` mU a iv3}:P
J}U| E5le
0i^#@@-B$s;JYa
CERT/CC 并没有正式地对所提到的FTP daemon做检测、评估或背书。要使用何种FTP daemon由每个使用者或组织负责决定,而CERT/CC建议每个机关在安装使用这些程序之前,能做一个彻底的评估。 3j&T b#v'EA D

:W5G vlw%Ce B.使用保护的目录
V"co Wpa%Ym$w
y2@]q!z!k0Y 假如你想要在你的FTP站提供上传的服务, 而你又没办法去修改FTP daemon, 我们就可以使用较复杂的目录架构来控制存取。这个方法需要事先规划并且无法百分之百防止FTP可写入区域遭不当使用, 不过许多FTP站仍使用此方法。 WOm;}"y`+XR'Z{^S
D/dyI"THro
为了保护上层的目录(~ftp/incoming),我们只给匿名的使用者进入目录的权限(chmod751~ftp/incoming)。这个动作将使得使用者能够更改目录位置(cd),但不允许使用者检视目录内容。Ex:drwxr-x--x 4 root system 512 Jun 11 13:29 incoming/在~ftp/incoming使用一些目录名只让你允许他们上传的人知道。为了要让别人不易猜到目录名称, 我们可以用设定密码的规则来设定目录名称。请不要使用本文的目录名称范例(避免被有心人士发现您的目录名,并上传档案)
2f!cX6AoQG hV#Jn8_8I%?+T#f
drwxr-x-wx 10 root system 512 Jun 11 13:54 jAjwUth2/ )t-uF(|B$Lg$G9q

-X%~lw7}^B/g drwxr-x-wx 10 root system 512 Jun 11 13:54 MhaLL-iF/ Jiw Yt A
K[,K&[ x!S
很重要的一点是,一旦目录名被有意无意的泄漏出来, 那这个方法就没什么保护作用。
P v8s%U/@y2tf(u|7d
iX;Zp[H1rV^6B 只要目录名称被大部分人知道, 就无法保护那些要限定使用的区域。假如目录名被大家所知道, 那你就得选择删除或更改那些目录名。 \ss@e5Y'Vfn\*I

A rg!Dj|+Q&HxA C.只使用一颗硬盘 [:u K(RP^U@

4c3^\1\/Vn 假如你想要在你的FTP站提供上传的服务, 而你又没办法去修改FTP daemon,您可以将所有上传的资料集中在同一个挂(mount)在~ftp/incoming上的档案系统。可以的话,将一颗单独的硬盘挂(mount)在~ftp/incoming上。系统管理者应持续检视这个目录(~ftp/incoming), 如此便可知道开放上传的目录是否有问题。 1Z]&M;k7p6k d| @l
m]Ms n _H
III.限制FTP用户目录 7E8~ KH%n0w\i

1P%W&P#zD!?0Gur UD 匿名FTP可以很好地限制用户只能在规定的目录范围内活动,但正式的FTP用户默认不会受到这种限制,这样,他可以自由在根目录、系统目录、其他用户的目录中读取一些允许其他用户读取的文件。
T|C2r;GJE ^#S9t1m6dP#x
如何才能把指定的用户象匿名用户一样限制在他们自己的目录中呢?以下我们以red hat和wu-ftp为例做一介绍。 cH,q;?2|DA

Jf-Q.V b?N5WB5tcA 1 创建一个组,用groupadd命令,一般可以就用ftp组,或者任何组名。
%o"rf}U(L!@ jt3^B8H
-----相关命令:groupadd ftpuser X0Q9o/Qbx

)t_3o3w w`fU -----相关文件:/etc/group 1g"sDjAO
@f1e"}A(J8EWP
-----相关帮助:man groupadd r2wH!] R(?l

{;nC7~3ZPgt3k 2 创建一个用户,如testuser,建立用户可用adduser命令。如果你已在先前建立了 testuser这个用户,可以直接编辑/etc/passwd文件,把这个用户加入到ftpuser这个组中。 -^ `C@8P'A
X+q U;PHkp!g
-----相关命令:adduser testuser -g ftpuser dg[+Q*iy
Q6wNu5e%z.L3\
-----相关文件:/etc/passwd
'AB8N3U9h|l
d2@;O:|HzTz{+B -----相关帮助:man adduser
(c5fq:\/`2ky 9]0n)ES]2^
3 修改/etc/ftpaccess文件,加入guestgroup的定义:guestgroup ftpuser我是这样改的,加的是最后5行: 3{.s [(b+_:N:M8C
"F+Y+O0rt I$t%t f^

|M[#`UsE&u compress yes all Xhc8V.m \h
tar yes all
0Z6Cz#AU'c#Y y chmod no anonymous #{ {%I?"RE
delete no anonymous J%L7Zc*c8Er&J:y4B
overwrite no anonymous
e v9Z;q*j(s5`P rename no anonymous a~;C'n#EU D
chmod yes guest Thcq3Y*Yq
delete yes guest ^9k'gY s(O#A(X%s
overwrite yes guest ^St zn W
rename yes guest
~ }2@W-Bi guestgroup ftpuser
PV$l7A y[\B
t[o.kMH d5G!|:G{(EJ
除了加 guestgroup ftpuser 这行,其他4行也要加上,否则用户登陆后,虽然可以达到用户不能返回上级目录的目的,但是却只能上传,不能覆盖、删除文件! (w}3Z}WL0^R
s,j/h'}/z.H#U3X3f"~
]S1yPw6T~#q
-----相关命令:vi /etc/ftpaccess
g0R{cK fM#{ T2Pn
eY3|t7wZ ][ -----相关文件:/etc/ftpaccess 'YG3gQ%?s

2r.L/e)OY -----相关帮助:man ftpaccess,man chroot .O1F+XVn3n1y0w\

_%I1N}:nf:{ 4 向这个用户的根目录下拷贝必要的文件,拷贝ftp server自带的目录,把 /home/ftp/下的bin,lib两个目录拷贝到这个用户的根目录下,因为一些命令(主要是ls)需要Lib支持,否则不能列目录和文件。 sa)bDp!g0U)Nr

8Ab#Ib~wML$E -----相关命令:
AT2f*M N)If
A/M sRVvE`;@ cp -rf /home/ftp/lib /home/testuser;cp -rf /home/ftp/bin /home/testuser
M E0Jkp1l7G b!n5|%cS
5 另外可别忘了关掉用户的telnet权,否则就白做了噢。怎么不让用户telnet呢?很简单:在/etc/shells里加一行/dev/null,然后可以直接编辑/etc/passwd文件,把用户的shell设置为/dev/null就可以了。 !E:{6d+YHm\ v
qIt Sw9[7dF}
-----相关命令:vi /etc/passwd
]l$Fe/TB1D
IY;h,Td E7F l k 这一步可以在步骤2 创建一个用户时就先做好。 1W:hy e*I/jh [
H(CEdKL
-----相关命令:adduser testuser -g ftpuser -s /dev/null D@ P!I^R

uU"i)Oj;Zm1JX 小经验:只要把/home/ftp下的bin和lib目录cp到/etc/skel目录里,以后新建用户都会自动把bin和lib目录CP到用户目录里,当然你也可以加上public_html目录和cgi-bin目录。 rKp$~1w2FL-f
qU _'pxz\F)yi]
经过以上设置,testuser这个用户的所有FTP动作将限制在他的/home/testuser目录中。
8L-s} fK4O _
t6mv XH'K,m9S (完) Z1@lmS]+f


页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.