荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (人生不定式), 信区: Linux
标  题: 帐号安全(转寄)
发信站: BBS 荔园晨风站 (Thu Sep 14 12:40:13 2000), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@smth.org 所发表 】
发信人: starw (虫二·抛愚引砖), 信区: Linux
标  题: 帐号安全(转寄)
发信站: BBS 水木清华站 (Thu Sep 14 03:04:33 2000)

http://www.linuxaid.com.cn/solution/safe/account.htm

帐号安全

LinuxAid工程师unix_guo

序言

本文版权属于linuxAid网站所有,任何个人或团体引用原则上应带上引用自本网
站的说明。

本文不是讲网络安全的文章,但是也不需要读者有网络安全方面的专业知识。本
文注重于你的linux服务器创建好之后的安全问题,服务器的创建过程相信你通过
参考其他文章能够配置成功,但是光是能够运行是不够的,因为这时的服务器存
在着安全隐患,很容易被入侵,如果是个人的服务器,那到无所谓,但是如果是
一个企业或单位,那么损失可能会大大超过忽略安全而节省出来的费用。

也许有的系统管理员在配置好服务器之后,运行良好,就转而研究新的东西,这
不是个好习惯。举一个例子,有很多人装好的linux,如果你用端口扫描器扫描的
话,会发现许多 危险的端口都打开着,例如一台不是mail服务器的机器开着pop3
端口,另外还开着finger 端口,netstat端口等等,系统管理员却一点意识都没
有。一个基本的黑客可以用现成的软件 攻破这台主机,并获得root。

但是作为网络服务器,应用是第一位的,如果限制应用来保证安全,那就会失去
大量的用户,所以建立合理的安全策略是非常重要的。一个好的安全策略应该在
客户需求分析的基础上,由经理、工程师、系统管理员共同策划。然后在此基础
上,决定投入多少的安全资金。 一般说来,用户越多,安全级别就越低,投入的
安全资金就越多。好了,上面说的似乎太抽象了,我想读者还是想知道具体的东
西吧。

帐号安全

我们知道,帐号在linux里面是最基本的,也是最重要的,如果你的帐号被人知道
了密码,他就可以登录到你的linux主机,进行一些破坏活动,最危险的是root泄
露,那么你的 计算机就不是由你自己来控制了。

口令的选择是非常重要的,一些常用的、容易被猜到的口令会给系统带来不安全
的因素,所以口令的选择有如下基本规定:

选择一个至少6个字符长度的口令
口令中应该带数字或特殊字符
容易记忆,不要写在纸上
能够迅速输入,使偷看的人不容易认出
口令最好不要由单词或名字组成
在linux中,口令文件在/etc/passwd中,早期的这个文件直接存放加密后的密码,
前两位是"盐"值,是一个随机数,后面跟的是加密的密码。为了安全,现在的
linux都提供了 /etc/shadow这个影子文件,密码放在这个文件里面,并且是只有
root可读的。

Linux口令加密机制源于DES,通常使用56位密钥加密的64位的文本块。传统的
crypt()函数把用户口令填充到8个字符,并用每个字符的7位形成一个56位的
DES key。该 Key被用来对64位的零块(00000000)进行加密。加密结果再次用该
key加密,重复25次。 最终结果是一个11位的字符串,写到/etc/passwd或
/etc/shadow中。为了使基于DES的加密能够更有效的抵御字典攻击,增加了"盐"
值,在0~4095之间,用来搅乱DES算法,使得 同样的明文因"盐"的不同而密文不同。

上面的可能比较专业,看不懂也没有关系,下面来分析一下/etc/passwd文件,他
的每个条目有7个域,分别是 名字:密码:用户id:组id:用户信息:主目录:
shell 例如: ynguo:x:509:510::/home/ynguo:/bin/bash

在利用了shadow文件的情况下,密码用一个x表示,普通用户看不到任何密码信息。
如果你仔细的看看这个文件,会发现一些奇怪的用户名,她们是系统的缺省账号,
缺省账号是攻击者入侵的常用入口,因此一定要熟悉缺省账号,特别要注意密码
域是否为空。下面简单介绍一下这些缺省账号

adm 拥有账号文件,起始目录/var/adm通常包括日志文件
bin 拥有用户命令的可执行文件
daemon 用来执行系统守护进程
games 用来玩游戏
halt 用来执行halt命令
lp 拥有打印机后台打印文件
mail 拥有与邮件相关的进程和文件
news 拥有与usenet相关的进程和文件
nobody 被NFS(网络文件系统)使用
shutdown 执行shutdown命令
sync 执行sync命令
uucp 拥有uucp工具和文件

系统最好不要提供guest账号,如果必须提供,口令应该天天变化,并且这个用户
的 shell应该用rsh。不常用的账号是侵入者的最佳目标,有大量用户成员的系统
必然存在账号 变动,当有用户离开,有组织的删除他们的账号很重要。用userdel
命令可以删除账号,另外,禁用账号最快的方法是在/etc/passwd中或影子文件
中在用户的加密口令的开始加一个*,该用户就不能再次登录。

Root在unix中是最最重要,应该尽可能的保护,下面的规则必须注意:

除非必要,避免用root登录
如果必须用root,首先用自己的普通账号登录,然后使用/bin/su - 成为root
root shell用完必须关掉
root不能随意让人知道
永远不要将当前目录(.)放在root的搜索路径中。不要把普通用户的/bin目录放在
 root的搜索路径中。
调用su时一定要写上全路径/bin/su -,否则被特洛伊木马搞一把就惨了
永远不要以root运行其他用户的或不熟悉的程序

传统上,/etc/passwd文件在很大范围内是可读的,因为许多应用程序需要用他来
把UID转换为用户名。例如,如果不能访问/etc/passwd,那么ls -l 命令将显示
UID而不是用户名。 但是使用口令猜测程序,具有加密口令的可读/etc/passwd文
件有巨大的安全危险。所以出现了影子文件/etc/shadow。

影子口令系统把口令文件分成两部分:/etc/passwd和/etc/shadow。影子口令文
件保存加密的口令;/etc/passwd文件中的密码全部变成x。Shadow只能是root可
读,从而保证了安全。/etc/shadow文件每一行的格式如下:

用户名:加密口令:上一次修改的时间(从1970年1月1日起的天数):口令在两
次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被
禁用的天数:从1970年1月1日起账号被禁用的天数:保留域。

例如:
root:$1$t4sFPHBq$JXgSGgvkgBDD/D7FVVBBm0:11037:0:99999:7:-1:-1:1075498172
bin:*:11024:0:99999:7:::
daemon:*:11024:0:99999:7::: 缺省情况下,口令更新并不开启。如果你的系统
没有启动影子文件,那么运行pwconv程序。

PAM(pluggable Authentication modules)是一套共享库,他为系统管理进行用
户确认提供广泛的严密控制,本身不是一个工具。他提供一个前端函数库(一个
API)用来确认用户的应用程序。PAM库可以用一个单独的文件/etc/pam.conf来配
置,也可以通过位于/etc/pam.d/下的一组配置文件来配置。使事情对用户容易是
PAM的核心目标。PAM可以配置成提供单一的或完整的登录过程,使用户输入一条
口令就能访问多种服务。例如,ftp程序传统上依靠/etc/passwd机制来确认一个
希望开始进行ftp会议的用户。配置了PAM的系统把ftp确认请求发送给PAM API,
后者根据pam.conf或相关文件中的设置规则来回复。系统管理员可以设置PAM使一
个或多个认证机制能"插入"到PAM API中。PAM的优点之处在于其灵活性,系统管
理员可以精心调整整个认证方案而不用担心破坏应用程序。

DESIGN GOALS(设计目标):

1.管理员可以选择认证方式, 从简单的密码到智能卡系统。
2.可以为不同的程序配置不同的认证机制.如 使telnet使用 S/Key认证.。而本机的
  login 缺使用一般的 UNIX password。
3.支持程序的显示方式的需求。如login 需要基于终端的显示, 而dtlogin 需要
  X 显示, 而`ftp' 和 `telnet'需要透过网络来认证。
4.支持为一个程序配置同时使用多种认证机制。
5.可是用户在使用多种认证机制时,不必为同一个密码敲入多次。
6.可是用户在认真时需要输入多个密码。
7.当底层的认证机制改变时上层软件不需要修改。
8.结构为system authentication提供一个 _pluggable_ model。
9.必须能满足现有的服务需要

OVERVIEW OF THE PAM FRAMEWORK (纵览PAM的框架)其核心实际上是一些库函数。
你写的应用程序要调用它们。PAM为你提供了一套入口(the front end)。而这套
函数互调用特定认证机制所定义的模块(the back end)。简单的说是这样的:你
调用一个函数仅仅告诉它你要认正,这就足够了。至于用那一种机制来认证是由
配置文件规定的。你只需要看一看返回值就知道认证是否成功了。对于开发应用
程序的人来说只需要记住几个函数。PAM的功能被分为四个部分:

1.authentication(认证)
2.account(账号管理)
3.session (对话管理)
4.password (密码管理)。

这四个都是什么呢?

authentication(认证):包括 `pam_authenticate()' 来认证用户,`pam_setcred()'
来设置 刷新和销毁用户的 credentials。
Account management:包括 `pam_acct_mgmt()' 来检查用的账号是否还有效.可
以被用来检查用户是否超时或账号是否过期。
Session management:包括 `pam_open_session()' 和 `pam_close_session()'
 用于对话过程的管理。例如: 可以用来纪录用户的连接时间。一次telnet过程实
际上也是一个session。
Password management:`pam_chauthtok()' 用来修该密码。程序通过调用
`pam_start()'和 `pam_end()' 来开始或结束一次PAM 事务。`pam_get_item()'
和 `pam_set_item()' 读写有关事务的信息。可以用`pam_strerror()'来取得错误
信息。

如何配置你的系统呢?

pam.conf的一个例子:

#服务名 模块类型 控制标志 模块的名字选项
#------- ----------- ------------ ----------- -------
login auth required pam_unix_auth.so nowarn
login session required pam_unix_session.so
login account required pam_unix_account.so
ftp auth required pam_skey_auth.so debug
ftp session required pam_unix_session.so
telnet session required pam_unix_session.so
login password required pam_unix_passwd.so
passwd password required pam_unix_passwd.so
OTHER auth required pam_unix_auth.so
OTHER session required pam_unix_session.so
OTHER account required pam_unix_account.so

`OTHER' 被用来为没有它数指定的服务用的。选项是随着模块的参数。为一个服
务是可以指定多个auth模块的.它们一次被调用来验证用户的身份.这叫做 Stack
ed Modules。pam.conf中的`控制标志' 实际上是指明这些 Stacked module 的工
作方式。它可取的值如下:

(a) `required':该模块的让正必须通过,失败者立即返回错误信息。
(b) `optional':表示可以忽略它的错误而继续下面一个模块。
(c) `sufficient':表明该模块的让正已经是足够了,下面的模块就不用调用了.
立即返回成功的消息。

Password-Mapping 密码的映射多层的模块认证可能会需要多个密码。则会使用户
感到厌烦。一个简单的方法是是用户使用同一个密码而透过mapping机制来加强安
全性。其实是通过一个密码来产生另一个密码,使一个密码可被多个模块使用。
当然要保证第一个密码是强壮的。 auth的模块多有下列选项:

(a) `use_first_pass':使用第一个模块要求输入的密码.不再向用户提示要密码。
(b) `try_first_pass':先试着使用第一个模块要求输入的密码, 不对再要求用
户输入。
(c) `use_mapped_pass':使用 password-mapping 来得到密码,不再向用户提示
要密码。
(d) `try_mapped_pass':先试着使用 password-mapping 来得到密码,不对再向
用户提示要密码。

下面的例子可以看懂了吧:

pam.conf
login auth required pam_unix.so debug
login auth required pam_kerb.so use_mapped_pass
login auth optional pam_rsa.so use_first_pass

这种设计使你没有办法来知道执行的具体情况。当然它也是与应用程序无关的。

Notes:在linux下,也可以用/etc/pam.d中的文件来配置.这些文件的格式与pam.
conf类似,只是没有服务名。其服务名就是它的文件名。

关于PAM的详细资料,请看网站http://www.kernel.org/pub/linux/libs/pam/
index.html请记住,只要你的服务器是一个网络的服务器,有着大量的用户,PAM
就有用武之地。

下面我提供一些账号安全工具,具体怎么用请看工具附带的文档。

1. Anlpasswd:这是一个口令预先检查工具,防止用户选择差的口令
ftp://coast.cs.purdue.edu/pub/tools/unix/anlpasswd/
2. Crack:口令猜测程序,通过扫描口令文件来定位不安全的口令,并找到选择
该口令的用户http://www.users.dircon.co.uk/~crypto/
3. Epasswd:可代替标准的passwd程序,支持影子口令和口令更新
http://science.nas.masa.gov/Groups/Security/epasswd/index.html
4. Kerberos:物理上不安全的网络使用的网络认证协议http://web.mit.edu/
kerberos/www/
5. Npasswd:代替passwd命令ftp://ftp.cc.utexas.edu/people/clyde/npasswd/
doc/index.html
6. OPIE:One Time Passwords in Everything ftp://ftp.inner.net/pub/opie/
7. passwd+:口令预先检测工具ftp://ftp.dartmouth.edu/pub/security/
8. Shadow:用来代替login和passwd以使任何系统都可以使用影子口令文件
ftp://ftp.std.com/src/freeunix/shadow.tar.Z
9. SRA:用来代替telnet和ftp客户服务器程序。使用Secure RPC代码来提供通
过网络的加密认证,使得纯文本口令不再使用ftp://coast.cs.purdue.edu/pub/
tools/unix/TAMU/

--

        寒山惟白云,寂寂绝埃尘。草座山家有,孤灯明月轮。
        石床临碧沼,鹿虎每为邻。自羡幽居乐,长为世外人。


※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.117.1.24]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店