Fedora 和 Red Hat 系统管理/查找和检查文件
外观
如果我们只根据权限搜索,我们将会从符号链接等得到错误的结果。
[user@station user]$ find . -perm +002 -ls 4095 0 lrwxrwxrwx 1 user user 22 Jan 4 08:30 ./rh033 -> rh033-RHEL3-1-20031103 10209 0 lrwxrwxrwx 1 user user 18 Jan 4 09:28 ./.mozilla/default/bgdnw5up.slt/lock -> 192.168.0.254:3311 63259 1 -rw-rw-rw- 1 user user 6 Jan 5 11:58 ./playground/real-problem
相反,请查找具有其他写入权限的普通文件。
[user@station user]$ find . -perm +002 -type f -ls 63259 1 -rw-rw-rw- 1 user user 6 Jan 5 11:58 ./playground/real-problem
当搜索“其他”可写的目录时,还应考虑该目录是否设置了“粘滞位”。在八进制中,粘滞位表示为四位八进制表示中第一位的 1(例如:1777)。这是临时目录的常见设置,通常不被认为是安全风险。
世界可写的临时目录
[user@station user]$ find / -perm -1002 -type d -ls 2>/dev/null 493 0 drwxrwxrwt 2 root root 40 Jan 4 09:25 /dev/shm 2 4 drwxrwxrwt 11 root root 4096 Jan 5 11:42 /tmp 58497 4 drwxrwxrwt 2 xfs xfs 4096 Jan 4 09:26 /tmp/.font-unix 29250 4 drwxrwxrwt 2 root user 4096 Jan 4 09:27 /tmp/.X11-unix 14625 4 drwxrwxrwt 2 user user 4096 Jan 4 09:27 /tmp/.ICE-unix 29252 4 drwxrwxrwt 2 user user 4096 Jan 4 09:28 /tmp/.esd 665189 4 drwxrwxrwt 2 root root 4096 Jan 3 07:51 /var/lib/texmf 97345 4 drwxrwxrwt 2 root root 4096 Jan 4 14:00 /var/tmp 178466 4 drwxrwxrwt 2 root root 4096 Aug 11 2003 /var/spool/vbox 762533 4 drwxrwxrwt 2 root root 4096 Sep 25 2003 /var/spool/samba
查找真正的有问题目录
[user@station user]$ find / -perm -002 -not -perm -1000 -type d -ls 2>/dev/null
46931 1 drwxrwxrwx 2 user user 1024 Jan 5 12:06 /home/kupferer/bad-permissions
SUID 和 SGID 可执行文件会带来严重的安全性问题,因为它们允许用户以另一个用户的权限执行程序。因此,应密切监控它们。SUID 在第一位表示为 4,SGID 表示为 2。
md5sum
命令会为文件生成一个校验和,该校验和可用于稍后检查文件的内容是否发生变化。
[user@station user]$ echo "some content" >a_file [user@station user]$ md5sum a_file eb9c2bf0eb63f3a7bc0ea37ef18aeba5 a_file [user@station user]$ echo "Some content" >a_file [user@station user]$ md5sum a_file 581ab2d89f05c294d4fe69c623bdef83 a_file
这通常用于从可能不可信的镜像下载文件。只要可以获得可信的校验和,就可以用来验证数据是否意外或恶意损坏。校验和文件通常与下载一起分发或保存在安全介质上,以检查系统是否存在可能的数据损坏或入侵。要创建 MD5 校验和文件,只需将 md5sum
的输出重定向到一个文件。 md5sum -c
然后可以用来稍后运行检查。
[user@station playground]$ for I in $(seq 1 6) > do echo "Content for file-$I" >file-$I > done [user@station user]$ ls file-1 file-2 file-3 file-4 file-5 file-6 [user@station playground]$ md5sum * >files.md5 [user@station playground]$ cat files.md5 37bca4ca3e0aa391ce8676a694940e66 file-1 ab831d920679cd711a85dc72360dbddc file-2 371e1a1c44fac93d8ff0aa87ce623f19 file-3 8472ca817e850d90b2d747254f4ec6d2 file-4 d1c4512228268473f5a7f9e22c20a14c file-5 1c64532d6ba6dd4125be760a1e7f66d3 file-6 [user@station playground]$ echo "different stuff" >file-3 [user@station playground]$ md5sum -c files.md5 file-1: OK file-2: OK file-3: FAILED file-4: OK file-5: OK file-6: OK md5sum: WARNING: 1 of 6 computed checksums did NOT match
[root@station root]# find / -type f -perm +6000 -exec md5sum {} \; >suid.md5 [root@station root]# echo "blah" > /usr/local/bin/new-suid [root@station root]# chmod 4755 /usr/local/bin/new-suid [root@station root]# find / -type f -perm +6000 -exec md5sum {} \; >suid.md5.new [root@station root]# diff suid.md5 suid.md5.new 45a46 > 0d599f0ec05c3bda8c3b8a68c32a1b47 /usr/local/bin/new-suid [root@station root]# mv suid.md5.new suid.md5 mv: overwrite `suid.md5'? y [root@station root]# echo "more" >> /usr/local/bin/new-suid [root@station root]# find / -type f -perm +6000 -exec md5sum {} \; >suid.md5.new [root@station root]# diff suid.md5 suid.md5.new 46c46 < 0d599f0ec05c3bda8c3b8a68c32a1b47 /usr/local/bin/new-suid --- > 9faee5c03d3f99ba4b95be1fc78c847f /usr/local/bin/new-suid