MEI SHENME
分类:
2006-12-29 15:51:07
1. AIX用户安全性的概念 AIX的每个用户有唯一的用户名、用户ID和口令,文件属主取决于用户ID;root可以更改文件属主;系统缺省root为超级用户;系统用户adm、sys、bin不允许登录;需要共享同一类文件的用户可以归入同一个组;最常用的组有两个,system为管理员组,staff为普通用户组。 系统安全性的基本原则是:用户被赋予唯一的用户名、用户ID(UID)和口令。用户登录后,对文件访问的合法性取决于UID。 文件创建时,UID自动生成为文件属主。只有文件属主和root才能修改访问许可权。需要共享同一组文件的用户可以归入同一个组中。每个用户可属于多个组。每个组被赋予唯一的组名和组ID(GID),GID也被赋给新创建的文件。 应该特别强调的是对于root特权的控制: 应严格限制使用root特权的人数; root口令应由系统管理员以不公开的周期更改; 不同的机器采用不同的root口令; 系统管理员应以普通用户的身份登录,然后用su命令进入特权; root所用的PATH环境变量与系统安全性关系重大。 安全性日志是系统安全的重要保障,有经验的系统管理员经常使用其做安全性检查。Su命令执行的结果存放在/var/adm/sulog中;用户登录和退出登录的记录存放在/var/adm/wtmp和/etc/utmp中,可用who命令查看;非法和失败登录的记录存放在/etc/security/failedlogin中,同样用who命令查看,未知的登录名记为unknown。 2. 文件和目录的存取许可权 文件和目录有一组许可权位,采用标准的读、写和执行来定义三个级别的许可权:用户(文件属主)、组和其他人,另外附加的三种许可权位是SUID、SGID和SVTX(粘着位)。 带SUID位的可执行文件意味着文件运行时,其进程以文件的有效UID运行。Shell程序不支持SUID,SUID对目录无意义;带SGID位的可执行文件意味着文件运行时,其进程以文件属组的有效GID运行;带SGID的目录表示在该目录下创建的文件/目录将继承目录的组ID,而忽略创建者的属组;AIX中的粘着位对文件无意义,带粘着位的目录意味着:即使对目录具有写许可权(如/tmp),用户也不能随便删除目录下的文件,除非是文件属主或目录属主。 许可权位 文件 目录 R 用户具有读许可权 用户列出目录的内容 W 用户可修改文件内容 用户可在目录下创建或删除文件 X 用户可执行该文件 用户可cd到该目录并在PATH中引用该目录 SUID 执行该程序时具有文件属主的有效UID —— SGID 程序运行时具有文件组的有效GID 目录下创建的文件继承目录的GID SVTX —— 只有文件或目录属主有权在该目录下删除文件 3. 安全性文件 存放用户属性和控制访问许可权的文件和目录如下: /etc/passwd中包含合法用户(不含口令) /etc/group中包含合法组; /etc/security中包含普通用户无权访问的安全性文件; /etc/security/passwd中包含用户口令; /etc/security/user中包含用户属性、口令约束等; /etc/security/limits中包含用户使用资源限制; /etc/security/environ中包含用户环境设置; /etc/security/login.cfg中包含登录设置; /etc/security/group中包含组的属性。 4. 用户环境的合法性检查 以下介绍进行用户环境合法性检查的三个命令: pwdck验证本机认证信息的合法性,检查/etc/passwd和/etc/security/passwd的一致性,以及与/etc/security/login.cfg和/etc/security/user的一致性; usrck验证用户定义的合法性,检查/etc/passwd、/etc/security/user、/etc/security/limits和/etc/security/passwd中的用户信息,同时也检查/etc/group和/etc/security/group,以保证数据的一致性。 grpck验证组的合法性,检查/etc/group、/etc/security/group和/etc/security/user之间的数据一致性。 上述命令由root或security组的成员执行,用于在修改用户配置之后做清理工作。 |
作者: workaholic 发布日期: 2005-6-01 |
系统安全控制 安全控制对于一个UNIX系统来说非常重要,我们将从系统管理员和系统用户两个角度,讨论有关系统安全的几个常见问题。 安全管理概要 系统的安全管理主要分为四个方面: (1)防止未授权存取:这是计算机安全最重要的问题,即未被授权使用系统的人进入系统。用户意识、良好的口令管理(由系统管理员和用户双方配合)、登录活动记录和报告、用户和网络活动的周期检查、这些都是防止未授权存取的关键。 (2)防止泄密:这也是计算机安全的一个重要问题。防止已授权或未授权的用户存取相互的重要信息。文件系统查帐,su登录和报告,用户意识,加密都是防止泄密的关键。 (3)防止用户拒绝系统的管理:这一方面的安全应由操作系统来完成。一个系统不应被一个有意试图使用过多资源的用户损害。不幸的是,UNIX不能很好地限制用户对资源的使用,一个用户能够使用文件系统的整个磁盘空间,而UNIX基本不能阻止用户这样做。系统管理员最好用PS命令,记帐程序df和du 周期地检查系统。查出过多占用CUP的进程和大量占用磁盘的文件。 (4)防止丢失系统的完整性:这一安全方面与一个好系统管理员的实际工作(例如:周期地备份文件系统,系统崩溃后运行fsck检查,修复文件系统,当有新用户时,检测该用户是否可能使系统崩溃的软件)和保持一个可靠的操作系统有关(即用户不能经常性地使系统崩溃)。 安全检查 像find这样的程序称为检查程序,它们搜索文件系统,寻找出SUID/ SGID文件,设备文件,任何人可写的系统文件,设有口令的登录用户,具有相同UID /GID的用户等等。 记帐 UNIX记帐软件包可用作安全检查工具,除最后登录时间的记录外,记帐系统还能保存全天运行的所有进程的完整记录,对于一个进程所存贮的信息包括UID,命令名,进程开始执行与结束的时间,CPU时间和实际消耗的时间,该进程是否是root进程,这将有助于系统管理员了解系统中的用户在干什么。 acctcom 命令可以列出一天的帐目表。系统中有多个记帐数据文件,记帐信息保存在文件pacct*中,pacct是当前记录文件,/usr/adm/pacctn 是以前的记帐文件(n为整型数)。若有若干个记帐文件要查看,可在acctcom命令中指定文件名。pacct 要检查的其中一个问题是:在acctcom的输出中查找一个用户过多的登录过程,若有,则说明可能有人一遍遍地尝试登录,猜测口令,企图非法进入系统。此外,还应查看root进程,除了系统管理员用su命令从终端进入root,系统启动,系统停止时间,以及由init(通常init只启动getty,login,登录shell),cron启动的进程和具有root SUID许可的命令外,不应当有任何root进程。由记帐系统也可获得有关每个用户的CPU利用率,运行的进程数等统计数据。 其它检查命令 *du:报告在层次目录结构(当前工作目录或指定目录起)中各目录占用的磁盘块数,可用于检查用户对文件系统的使用情况。 *df:报告整个文件系统当前的空间使用情况,可用于合理调整磁盘空间的使用和管理。 *ps:检查当前系统中正在运行的所有进程。对于用了大量CPU时间的进程,同时运行了许多进程的用户,运行了很长时间但用了很少CPU时间的用户进程应当深入检查。还可以查出运行了一个无限制循环的后台进程的用户,未注销户头就关终端的用户(一般发生在直接连线的终端)。 *who:可以告诉系统管理员系统中工作的进展情况等等许多信息,检查用户的登录时间,登录终端。 *su:每当用户试图使用su命令进入系统用户时,命令将在sulog文件中写一条信息,若该文件记录了大量试图用su进入root的无效操作信息,则表明了可能有人企图破译root口令。 *login:在一些系统中,login程序记录了无效的登录企图。每天总有少量的无效登录,若无效登录的次数突然增加了两倍,则表明可能有人企图通过猜测登录名和口令,非法进入系统。 这里最重要的一点是:系统管理员越熟悉自己的用户和用户的工作习惯,就越能快速发现系统中任何不寻常的事件,而不寻常的事件很可能意味着系统已被人窃密。 |
作者: workaholic 发布日期: 2005-6-01 |
1.保持系统管理员个人的登录安全 若系统管理员的root口令泄密了,则系统安全便岌岌可危了,拥有了root口令便使得系统安全防线只有一步之遥了。即使su命令通常要在任何都不可读的文件中记录所有想成为root的企图,还可用记帐数据或ps命令识别运行su命令的用户。正因为如此,系统管理员作为 root运行程序时应当特别小心,因为最微小的疏忽也可能"沉船"。下列一些指导规则可使系统管理员驾驶一艘“坚固的船”: * 不要作为root或以自己的登录户头运行其他用户的程序,首先用su命令进入用户的户头。 * 决不要把当前工作目录排在PATH路径表的前边,那样实际是招引特洛依木马。当系统管理员用su命令进入root时,他的PATH将会改变,就让PATH保持这样,以避免特洛依木马的侵入。 * 敲入/usr/bin/su执行su命令。若有su源码,将其改成必须用全路径名运行(即su要确认argv[0]的头一个字符是"/"才运行)。随着时间的推移,用户和管理员将养成敲/usr/bin/su的习惯。 * 不要未注销户头就离开终端,特别是作为root用户时更不能这样。当系统管理员作为root用户时,命令提示符是"$",这个提示符对某些人来说可能是个红灯标志。 * 不允许root在除控制台外的任何终端登录(这是login的编译时的选项),如果没有login源码,就将登录名root改成别的名,使破坏者不能在root登录名下猜测各种可能的口令,从而非法进入root的户头。 * 经常改变root的口令。 * 确认su命令记下了想运行su企图的记录/var/adm/sulog,该记录文件的许可方式是600,并属root所有。这是非法者喜欢选择来替换成特洛依木马的文件。 * 不要让某人作为root运行,即使是几分钟,即使是系统管理员在一旁注视着也不行! 2 保持系统安全要点 * 考虑系统中一些关键的薄弱环节: a. 系统是否有MODEM?电话号码是否公布? b. 系统是否连接到网络?还有什么系统也连接到该网络? c. 系统管理员是否使用来源不可靠的程序? d. 系统管理员是否将重要信息放在系统中? e. 系统的用户是熟悉系统的还是新手? f. 用户是否很重视安全? g. 用户的管理部门是否重视安全? * 保持系统文件安全的完整性。检查所有系统文件的存取许可,任何具有SUID许可的程序都是非法者想偷换的选择对象。 * 要特别注意设备文件的存取许可。 * 要审查用户目录中具有系统ID/系统小组的SUID/SGID许可的文件。 * 在未检查用户的文件系统的SUID/SGID程序和设备文件之前,不要安装用户的文件系统。 * 将磁盘的备份存放在安全的地方。 * 设置口令时效,如果能存取UNIX的源码,将加密口令和信息移到仅对root可读的文件中,并修改系统的口令处理子程序。这样可增加口令的安全。 * 记录本系统的用户及其授权使用的系统。 * 查出久未使用的登录户头,并取消该户头。 * 确保没有无口令的登录户头。 * 启动记帐系统。 * 查出不寻常的系统使用情况,如大量的占用磁盘,大量的使用CPU时间,大量的进程,大量的使用su的企图,大量无效的登录,大量的到某一系统的网络传输,奇怪的uucp请求。 * 修改shell,使其等待了一定时间而无任务时终止运行。 * 修改login,使其打印出用户登录的最后时间,三次无效登录后,将通讯线挂起,以便系统管理员能检查出是否有人试图非法进入系统。确保login不让root在除控制台外的任何地方登录。 * 当安装来源不可靠的软件时,要检查源码和makefile文件,查看特殊的子程序调用或命令。 * 即使是安装来源可靠的软件,也要检查是否有SUID(SGID)程序,确认这些许可的确是必要的。如果可能,不要让这些程序具有系统ID(或组)的SUID (SGID)许可,而应该建立一个新用户(或给)供该软件运行。 * 如果系统在办公室中,门应上锁,将重要数据保存在软盘上或带上,并锁起来。 |
作者: workaholic 发布日期: 2005-6-01 |
这篇文章主要讨论在AIX系统上如何检查文件、目录和可执行程序的安全性,以防止可能的安全方面的隐患。 1. 删除垃圾文件 很多程序运行完毕后,会在/tmp目录下留下很多的垃圾文件。AIX系统提供一个命令skulker,它可以删除/tmp目录下的a.out文件、core文件和ed.hup文件。具体的命令执行方式为: # skulker -p 2. 删除无所有者的文件 在AIX系统上如果一个用户被删掉后,原来属于这个用户的文件将变成无所有者的文件。可以用下面命令来找出这些文件: # find / -nouser -ls 如果找出得文件还有用,可将它们指定到已存在的某些用户下。否则就删除这些文件。 3. 管理未授权的远程访问 某些程序使用.rhosts文件访问远程系统。但有时这种做法会被未授权的用户使用。为避免这种情况,可删除.rhosts文件。 在HACMP环境下,.rhosts文件是需要的。这时需要将.rhosts文件的访问权限设为600,并且是所有者是root.system。 可用下面命令查找.rhosts文件: # find / -name .rhosts -ls 4. 监视可执行文件的属性 在监视某些可执行文件之前,需要了解这些文件是如何被使用的。尤其是要监视那些所有者是root,文件方式字中有SUID和SGID设置的文件。 通过以下命令可以找出满足上面条件的所有文件: # find / -perm -4000 -user 0 -ls # find / -perm -2000 -user 0 -ls 保存上面命令的输出结果。定时运行这两条命令,并与保存的结果相比较,看是否有未知的文件出现,以杜绝可能的安全隐患。 5. 管理cron和at运行的后台作业 必须做如下内容: - 确认只有root用户在cron.allow和at.allow文件里。 - 从目录var/adm/cron中删除cron.deny和at.deny文件。 - 确保cron和at作业的所有者是root并且只能由root可写。 上面所谈的内容对AIX系统在文件方面的安全性有指导意义。在具体考虑使用AIX系统的安全性时,还应该考虑更多方面的内容。 |
作者: workaholic 发布日期: 2005-6-01 |
这篇文章主要讨论关于X11和CDE(Common Desktop Environment)方面的安全问题。 1. 删除/etc/rc.dt文件 虽然运行CDE图形环境方便了用户使用AIX,但同时也带来了安全隐患。所以,对于那些要求较高安全性的系统来讲,就不应该运行CDE。 最好的方法是不安装CDE(dt)软件包。如果已经安装了这些软件包,应考虑删除它们,尤其是启动CDE的脚本文件/etc/rd.dt。 2. 屏蔽X服务器的远程监视功能 一个很重要的安全问题是X11服务器的远程监视机制。xwd和xwud常被用于监视X服务器的活动状况,它能够捕捉到键盘的敲击结果,因此可能泄露密码或其它敏感信息。 为防止这种情况的出现,可以删除这些可执行程序或者将其执行权限定为root可以执行。 xwd和xwud可以在文件包X11.apps.clients中找到。 如果需要使用xwd和xwud命令,可以考虑使用OpenSSH或MIT Magic Cookies。这些第三方厂家的软件可以有效的防止使用xwd和xwud命令时带来的风险。 3. 禁止用户使用xhost命令 确保只有指定的用户可以使用xhost命令,或指定只能超级用户才能使用,方法是运行chmod命令修改/usr/bin/X11/xhost的属性: # chmod 744 /usr/bin/X11/xhost 确认在运行xhost命令时,指定hostname,否则将允许所有的远程主机访问本机,这将带来潜在的危险性。 |
作者: workaholic 发布日期: 2005-6-01 |
更改登录屏幕的欢迎消息 为防止在登录屏幕上显示某些信息,请编辑 /etc/security/login.cfg 文件中的 herald 参数。 缺省的 herald 包含随登录提示一起显示的欢迎消息。您可用 chsec 命令或直接编辑文件来更改该参数。 以下示例用 chsec 命令更改缺省的 herald 参数: # chsec -f /etc/security/login.cfg -a default -herald "Unauthorized use of this system is prohibited .\n\nlogin:" 要直接编辑文件,请打开/etc/security/login.cfg文件并更新herald参数如下: 缺省值: herald ="禁止未授权使用本系统\n\n登录:" sak_enable = false logintimes = logindisable = 0 logininterval = 0 loginreenable = 0 logindelay = 0 注: 要使得该系统更安全,请将 logindisable 和 logindelay 变量的值设置为大于 0(# > 0)。 更改公共桌面环境的登录屏幕 该安全性说明也影响公共桌面环境(CDE)用户。在缺省情况下,CDE登录屏幕也显示主机名和操作系统版本。 要防止显示此信息,请编辑 /usr/dt/config/$LANG/Xresources 文件,其中 $LANG 指的是安装在您的机器上的本地语言。 在我们的示例中,假定 $LANG 设置为 C,将该文件复制到 /etc/dt/config/C/Xresources 目录中。 然后,打开 /usr/dt/config/C/Xresources 文件并编辑,以除去包含主机名和操作系统版本的欢迎消息。 设置系统缺省登录参数 要为许多登录参数设置基本缺省值,例如那些可能需要为新用户设置的参数(登录重试次数、登录重新启用和登录内部), 请编辑 /etc/security/login.cfg 文件。 保护无人照管终端 如果终端处于登录状态却无人照管,那么所有的系统都是脆弱的。当系统管理员让用超级权限启用的终端处于无人照管状态时, 就会出现最严重的问题。通常,任何时候用户离开他们的终端时都应该注销。让系统终端处于非安全状态会造成潜在的安全威胁。 要锁定终端,请使用 lock 命令。如果您的界面是 AIX windows,请使用 xlock 命令。 强制自动注销 另一个要关注的有效安全性问题是用户长时间将他们的帐户置于无人照管状态造成的后果。这种情况使闯入者可以控制用户的终端, 从而潜在地危及系统的安全。 要预防这类潜在的安全威胁,您可在系统中启用自动注销功能。要这样做,请编辑 /etc/security/.profile 文件,为所有用户包含自动注销值, 如下例所示: TMOUT=600 ; TIMEOUT=600 ; export readonly TMOUT TIMEOUT 在本例中,数字 600 是以秒为单位,它等于 10 分钟。但是,该方法只在 shell 中生效。 当先前的操作允许您对所有用户强制执行自动注销策略时,系统用户就能通过编辑他们各自的 .profile 文件来绕过一些限制。 为了完全实现自动注销策略,必须采取权威的措施,即给用户提供适当的 .profile 文件,阻止对这些文件的写访问权。 |
作者: workaholic 发布日期: 2005-6-01 |
AIX5.2之前版本的操作系统中,在AIX的登录界面中,输入的用户名都是可见的,而且在提示输入用户口令的显示信息中也会将对应的用户名列示出来。而在一些对安全性要求极高的场合中,显示出用户的名称会被认为系统存在安全漏洞。在AIX5.2的版本中,新增加的功能可以使系统管理员选择在用户登录时不显示相应的用户名。该项设置可以被配置为系统的缺省设置或者是只对指定端口生效的设置。 缺省的情况下,在没有更改系统的设置时,当一个用户以“test9”的用户名telnet远程登录至系统时,用户名“test9”将会被系统显示两次如下: telnet (server1) AIX Version 5 © Copyrights by IBM and by others 1982, 2000. login: test9 test9's Password: ... 在AIX5.2版本的操作系统中,对登录的用户名进行保护的相关属性保存在/etc/security/login.cfg文件中。“pwdprompt”属性定义了当用户进行登录时请求输入口令的提示信息的内容。“usernameecho”属性则决定了在用户登录系统时和显示相关的提示信息时是否显示出用户名,该属性值为布尔值。如果“usernameecho”属性的值被设置为“false”,那么在用户登录系统时和显示相关的提示信息时,用户名都将不被显示。如果“usernameecho”属性的值被设置为“true”(系统的缺省值),那么相应的用户名信息将被正常显示。如果只是想对某一个特定的端口设置这些属性,则必须为指定的端口(如:/dev/lft0)创建一个新的标准,并且为指定的端口增加相应的属性设置。如果希望这些属性的设置对所有的端口都有效,则需要将这些属性的设置放在缺省的标准中。对特定端口的标准中的属性设置将会覆盖掉缺省标准中的属性的设置。 (1)下面的例子显示出,设置整个系统的口令输入提示内容为:Password。 # chsec -f /etc/security/login.cfg -s default -a pwdprompt="assword:" 在上面的命令执行后,当用户telnet远程登录至系统时,系统显示的提示信息内容如下: telnet (server1) AIX Version 5 © Copyrights by IBM and by others 1982, 2000. login: root Password: (2)在下面显示的例子中,口令输入的提示内容被设置回系统的缺省值,“usernameecho”属性值被设置为“false”。从用户登录的显示结果可以看到,用户名被系统隐藏了。 # chsec -f /etc/security/login.cfg -s default -a pwdprompt= # chsec -f /etc/security/login.cfg -s default -a usernameecho=false 在上面的命令执行后,当用户telnet远程登录至系统时,系统显示的提示信息内容如下: telnet (server1) AIX Version 5 © Copyrights by IBM and by others 1982, 2000. login: *****'s Password: ... 当用户使用passwd命令更改用户的口令时,系统显示的提示信息内容如下: $ passwd Changing password for "*****" *****'s Old password: *****'s New password: Enter the new password again: (3)下面的例子则说明了如何为特定的端口(如:/dev/lft0)设置“usernameecho”属性: # chsec -f /etc/security/login.cfg -s /dev/lft0 -a usernameecho=false |
作者: alligator 发布日期: 2005-6-01 |