企业系统的安全管理运维涉及到公司信息化系统和数据的防入侵、防泄露工作,这是为所有CSO、COO非常关注的基础性工作。虽然基础,但是一旦处理不到位,将会给企业带来重大数据、经济损失或者声誉损失。本文针对企业系统的安全管理,给出了10个非常实用、有效的系统强化措施,能够较好地帮助企业系统管理员发现和提前处理系统可能存在的风险和漏洞,从而在事前保证企业系统的安全运营。
1、从运行路径中去掉“.”
在超级用户(root)模式下,用户必须明确正在运行的命令是用户想要的。考虑下面的场景,用户在哪里登录了超级用户,那么用户的路径变量就是
.:/usr/bin:/usr/sbin:/bin:/sbin.
用户在ls目录下创建了一个包含如下命令的脚本:
#!/usr/bin/ksh
cp /usr/bin/ksh /tmp
chown root:bin /tmp/ksh
chmod 6755 /tmp/ksh
rm -f ls
/bin/ls $*
现在A用户呼叫并上报一个问题,在他的主目录里有些不明文件。用户作为超级管理员,使用cd命令进入他的目录并运行ls -l命令去查看。突然,在用户不知情的情况下,A用户可以运行一个shell脚本来获取用户的超级用户权限!
这样的情况经常发生,但是很容易避免。如果在用户的路径中没有“.”,用户会看到一个名为ls的脚本在他的主目录中,而不会去执行它。
2、规避风险脚本
当用户写一个脚本,总是指定正在使用的应用程序的完整路径。参考下面的脚本:
#!/usr/bin/ksh
date > log
find . -mtime +7 -ls -exec rm -rf {} ; >> log 2>&1
虽然只有三行,并且只有两行执行命令,然而却存在很多安全漏洞:
它没有指定一个路径。
它没有给出日期的完整路径。
它没有给出查找的完整路径。
它没有给出rm的完整路径。
它执行错误检查。
它没有验证目录的正确性。
让我们再看一下另外一个脚本是如何解决其中的一些问题的。
#!/usr/bin/ksh
cd /directory || exit -1
PATH=/usr/bin; export PATH
/usr/bin/date > log
/usr/bin/find /directory -mtime +7 -ls -exec /usr/bin/rm -rf {} ;
>> log 2>&1
第二行,cd /directory || exit -1,告诉ksh的尝试使用CD命令进入/directory。如果命令失败,它需要退出脚本并且返回一个–1的代码。在Ksh命令中||意味着“如果上 个命令失败”,&&则意味着“如果上个命令成功”。举一个额外的例子,使用命令touch /testfile || echo Could not touch创建一个名为/testfile的文件,或者如果文件不能被创建(也许用户没有足够的权限来创建它),那么在屏幕上会显示“Could not touch”。使用命令touch
/testfile && echo Created file来创建/testfile文件,如果touch命令成功,在屏幕上只会显示“Created file”。用户检查的条件将决定用户是使用||还是&&。
如果脚本继续运行,用户将进入/directory。现在用户可以明确指定用户的路径,如果用户忘记了完整路径可以使用系统搜索命令来锁定。这个方法的例 子并没有在这个小脚本中,但它是一个很好的习惯,尤其是在当用户写长的并且更复杂的脚本时;如果用户忘了指定完整的路径,用户的脚本调用木马程序几率将会 非常小。
接下来用户调用date的全名是:/usr/bin/date。用户也可以完全指定/usr/bin/find和/usr/bin/rm。通过执行此操 作,用户可以让希望在用户系统中插入木马程序并且在用户不知觉的情况下运行的人更加困难。毕竟,如果他们有足够的权限来修改文件/usr/bin,他们可 能就有足够的权限来做任何他们想做的事情。
当编写一个脚本,经常需要遵循这些简单的规则:
总是指定一个路径。
总是为每个应用程序使用的完整路径。
始终运行错误检查,特别是在运行具有潜在破坏性的命令时,如rm命令。
(责任编辑:安博涛)