1、Longjilongjilongjilongjilongjilongji机恐惧感开 通过Linux系统伪装方法加固系统安全 网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。 通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。 针对HTTP服务 通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来
2、提供HTTP服务,而Linux中最常见的是Apache。 默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。 通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来。但是,Red Hat Linux运行的Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替换里面的提示内容。
3、 以Apache 2.0.50为例,编辑ap_release.h文件,修改“#define AP_SERVER_BASEPRODUCT \"Apache\"”为“#define AP_SERVER_BASEPRODUCT \"Microsoft-IIS/5.0\"”。编辑os/unix/os.h文件,修改“#define PLATFORM \"Unix\"”为“#define PLATFORM \"Win32\"”。修改完毕后,重新编译、安装Apache。 Apache安装完成后,修改httpd.conf配置文件,将“ServerTokens Full”改为“ServerTok
4、ens Prod”;将“ServerSignature On”改为“ServerSignature Off”,然后存盘退出。重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。 针对FTP服务 通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。 以proftpd为例,修改配置文件proftpd.conf,添加如下内容: ServerIdent on \"Serv-U FTP Server v5
5、0 for WinSock ready...\" 存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试: C:\\>ftp 192.168.0.1 Connected to 192.168.0.1. 220 Serv-U FTP Server v5.0 for WinSock ready... User (192.168.0.1:(none)): 331 Password required for (none). Pa
6、ssword: 530 Login incorrect. Login failed. ftp > quit 221 Goodbye. 这样从表面上看,服务器就是一个运行着Serv-U的Windows了。 针对TTL返回值 可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就
7、会被丢弃。 通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如,ping一个Red Hat系统,显示如下: Pinging 192.168.0.1 with 32 bytes of data: Reply from 192.168.0.1: bytes=32 time <10ms TTL=64 Reply from 192.168.0.1: bytes=32 time <10ms T
8、TL=64 Reply from 192.168.0.1: bytes=32 time <10ms TTL=64 Reply from 192.168.0.1: bytes=32 time <10ms TTL=64 Ping statistics for 192.168.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:
9、 Minimum = 0ms, Maximum = 0ms, Average = 0ms 用以下命令修改Red Hat Linux的TTL基数为128(本来为64): # echo 128 > /proc/sys/net/ipv4/ip_default_ttl 若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行: net.ipv4.ip_default_ttl = 128 保存退出后,再ping 192.168.0.1,TTL基数就变为128
10、了。 针对3389端口和22端口 有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。 为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在: #iptables -I INPUT -s ! xx.xx.xx.xx -p tcp --dport 22 -j DROP 利用iptables,将本机的TCP 3389端口转
11、移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下: #echo 1 > /proc/sys/net/ipv4/ip_forward #iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to xx.xx.xx.xx #iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE 第一条命令表示允许数据包转发;第二条命令表示
12、转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。 这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。 针对netcraft netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。 上面介绍的几种方法对netcraft来说,均不奏效。
13、针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统: #iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx #iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j MASQUERADE 由于通过抓包发现,netcraft的服务器不止
14、一台,所以需要对它所在网段进行转发欺骗处理。 小结 以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人”,仅是给大家提供一个活学活用的新思路。 深入分析Linux 系统深度安全加固 Linux 的系统安全不容忽视.然而系统加固又不是一件很容易的事.本文作者简单介绍了一下 Linux 系统深度安全加固. ★ Linux 系统深度安全加固 author : ayazero drdos@ Personal web --
15、 Team's site -- 注:以下内容可能不适用于某些场合,请对号入座 1. 安装和升级 尽量选用最新的 Linux 发行版本,安装前拔掉网线,断开物理连接,安装时建议用 custom 自定义方式安装软件包,数量以少为好,一般来说服务器没有必要安装 X-windows,在 lilo/grub 引导器中加入口令限制,防止能够物理接触的恶意用户因为 Linux 安装光盘的 rescue 模式可以跳过这个限制,所以还要给bios加上密码或服务器机箱上锁 /var, /home, /usr, /root 等目录用独立的物理分区,防止垃圾数据和日志填满硬
16、盘而导致 D.o.S 攻击. root 账号给予强壮的口令. 安装完毕立即用 up2date 或 apt 升级系统软件,有时升级内核也是必要的,因为内核出现问题同样会给攻击者提供机会Apt 是 Debian GNU Linux 下的一个强大的包管理工具,也可用于其他版本的 Linux. 2. 账号 如果系统中的用户比较多,可以编辑 /etc/login.defs,更改密码策略 删除系统中不必要帐户和组, [root@ayazero /]# userdel -r username 如果不开匿名 ftp
17、 则可以把 ftp 账号也删了 最安全的方式是本地维护,可惜不太现实,但还是需要限制 root 的远程访问,管理员可以用普通账户远程登录,然后 su 到 root,我们可以把使用 su 的用户加到 wheel 组来提高安全性 在 /etc/pam.d/su 文件的头部加入下面两行: auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel 然后把可以执行 su 的用户放入 wheel
18、组 [root@ayazero /]# usermod -G10 admin 编辑 /etc/securetty,注释掉所有允许 root 远程登录的控制台,然后禁止使用所有的控制台程序,[root@ayazero /]# rm -f /etc/security/console.apps/servicename 登录采用加密的 ssh,如果管理员只从固定的终端登陆,还应限制合法 ssh 客户端的范围防止嗅探及中间人攻击 将命令历史纪录归为零,尽可能的隐藏你做过的事情 [root@ayazero /]# unset HISTFILE
19、SIZE 3. 服务 最少服务原则,凡是不需要的服务一律注释掉 在 /etc/inetd.conf 中不需要的服务前加 "#",较高版本中已经没有 inetd 而换成了 Xinetd;取消开机自动运行服务,把 /etc/rc.d/rc3.d 下不需要运行的服务第一个字母大写改称小写,或者由 setup 命令启动的 GUI 界面中的 service 更改 如果你希望简单一点,可以使用 /etc/host.allow,/etc/host.deny 这两个文件,但是本文计划用 iptables 防火墙,所以不在此详述. 4. 文件系统权
20、限 找出系统中所有含 "s" 位的程序,把不必要得 "s" 位去掉,或者把根本不用的直接删除 [root@ayazero /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {} [root@ayazero /]# chmod a-s filename 防止用户滥用及提升权限的可能性 把重要文件加上不可改变属性 [root@ayazero /]# chattr +i /etc/passwd [root@ayazero /]# chattr +i
21、/etc/shadow [root@ayazero /]# chattr +i /etc/gshadow [root@ayazero /]# chattr +i /etc/group [root@ayazero /]# chattr +i /etc/inetd.conf [root@ayazero /]# chattr +i /etc/httpd.conf ............................... 具体视需要而定,我怀疑现在的入侵者都知道这个命令,有些 exploit 溢出后往 inetd.conf 写一条语句绑定 shel
22、l 在一个端口监听,此时这条命令就起了作用,浅薄的入侵者会以为溢出不成功. 找出系统中没有属主的文件: [root@ayazero /]# find / -nouser -o -nogroup 找出任何人都有写权限的文件和目录: [root@ayazero /]# find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg {} [root@ayazero /]# find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {}
23、 防止入侵者向其中写入木马语句(诸如一个shell的拷贝)或继承属主权限而非法访问 找出并加固那些历来被入侵者利用的文件,比如 .rhosts 编辑 /etc/security/limits.conf,加入或改变如下行: * hard core 0 * hard rss 5000 * hard nproc 20 5. Banner 伪装 入侵者通常通过操作系统,服务及应用程序版本来攻击,漏洞列表和攻击程序也是按此来分类,所以我们有必要作点手脚来加大入侵的难度 更改 /etc/issue,因为 re
24、boot 后重新加载,所以编辑 /ect/rc.d/rc.local # This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. #echo "" > /etc/issue #echo "$R" >> /etc/issue #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc
25、/issue # #cp -f /etc/issue /etc/ #echo >> /etc/issue 把以上行前的 "#" 去掉 Apache 不回显版本: apache 的配置文件,找到 ServerTokens 和 ServerSignature 两个 directive,修改默认属性: #ServerTokens Full ServerTokens Prod <---------- #ServerSignature On ServerSignature Off <----------
26、 修改 uname 拿出 uname.c 的源码,找到如下行 print_element (PRINT_SYSNAME, name.sysname);//操作系统名如 linux print_element (PRINT_NODENAME, name.nodename);//主机名 print_element (PRINT_RELEASE, name.release);//发行版本,如:2.4.20-18 print_element (PRINT_VERSION, name.version);// print_element (PRINT_MA
27、CHINE, name.machine);//机器类型,如i686 print_element (PRINT_PROCESSOR, processor);//处理器类型 可以修改为 print_element (PRINT_SYSNAME,"HP-UX"); ....... 编译后替换 /bin/uname 其他服务及程序的修改可以查看其配置文件或者源码不要改太多,否则会给系统管理带来大麻烦。 6. Iptales 防火墙规则 假设我们的服务器 server1 运行 apache,sshd (sshd 可以
28、不运行在标准端口,配置文件中能修改)eth0 网卡接 Internet,eth1 连接 LAN,管理员在家中拨号登陆到 server2 (其私用网络 IP 为 192.168.0.12),再登陆 server1[roor@ayazero root]# iptables -A INPUT -i eth1 -s 192.168.0.12 -p tcp --dport 22 -j ACCEPT为防止 IP spoofing 的可能,还可以绑定 server2 的网卡地址:sh-2.05b# iptables -A INPUT -i eth1 -s 192.168.0.12 --mac-source
29、01:68:4B:91:CC:B7 -p tcp --dport 22 -j ACCEPT不过好像也很少有入侵者能够做到这种地步,而且没什么利用的价值 [root@ayazero root]# iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT [root@ayazero root]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT [root@ayazero root]# iptables -A INPUT -j DROP
30、 对攻击有所了解的人都知道“端口重定向+反向管道”的美妙结合来穿越防火墙的例子吧这种技巧已经运用太广,而危害很大为了对抗这种难以防御的攻击,我们必须以牺牲一定的易用性为代价 [root@ayazero root]# iptables -A OUTPUT -o eth0 -p tcp --syn -j DROP以上规则将阻止由内而外的 TCP 主动连接另外,用 tftp 或其他客户端反向攫取文件的攻击行为也很普遍,由于 tftp 以及其他一些工具依赖 UDP,所以现在要把它彻底抹煞掉[root@ayazero root]# iptables -A OUTPUT -o eth0 -p
31、 udp -j DROPPS: 在更新系统和调试网络时需要把这两条规则临时去掉因为入侵的本质就是通过文本或图形界面在标准或非标准端口得到目标操作系统的 shell,所以,这不仅能阻止反向管道本身,还能免疫很多入侵技巧不过对一般的系统管理员而言,这太苛刻了! iptables 的一些攻击对策 Syn-flood protection: [root@ayazero foo]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT Furtive port scanner:
32、 [root@ayazero foo]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Ping of death: [root@ayazero foo]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT 此外,iptables 还能配置出让一些扫描行为比如 nmap 失效的规则,应当注意:防火墙不是万
33、能的,当一个攻击者足够疯狂时,不要指望你的防火墙能抵挡得住 DDoS 的洪水。 关于 iptables 得更多细节,请参阅 Rusty Russell 的 Packet Filtering HOWTO 7. 完整性校验 tripwire 是一个比较有名的工具,它能帮你判断 关于加固 要让加固行动更为成功,您应该: · 在系统连接到网络之前进行加固,以避免攻击。 · 基于 最小权限原则(least-privilege model) 进行配置:系统应该为特定的功
34、能只赋予其所需要的权限。类似地,用户应该只拥有他们所需要的最小限度的权限。 在完成初步计划并准备和执行了最小化安装后(见第 2 部分),您需要进行一些配置步骤。这些步骤通常被称作是加固 Linux。 · 保护引导过程 · 保护服务和后台进程 · 保护本地文件 · 强制实行配额和限制 · 启用强制访问控制 · 更新和添加安全补丁 保护引导过程 配置引导加载器(LILO 或者 Grub),以令其在引导时不被任何用户干涉;这样就防止了用户在引导提示时向内核传递参数。除非您需要远程引导(比如在远程的数据中心),不然就配置它让它要求输入密码。这是对有可能物理上接触机
35、器的人的进一步防范;它可以防止某些事件的偶然攻击,比如使用参数 single 或者 init=/bin/sh 来获得 root shell,等等。不过,要注意,稍加努力就可以避开此防范机制(比如拆下硬盘驱动器并将其挂载到另一个系统上),除非您对文件系统也进行了加密。 对 LILO 而言,在 lilo.conf 配置文件(通常在 /etc 下)中使用参数 password 替换 prompt。对于 Grub,相应的参数是 Grub 配置文件(通常在 /boot/grub/grub/conf 下)中的 hiddenmenu、default 0 和 password。 在 /etc/init
36、tab 中添加 sp:S:respawn:/sbin/sulogin,以确保当切换到单用户模式时运行级的配置要求输入 root 密码。 防止用户使用 Ctrl-Alt-Del 进行重新引导:在 /etc/inittab 中注释掉 ctrlaltdel 行,禁用 ctrlaltdel。通过向类似这样一行( #ca::ctrlaltdel:/sbin/shutdown -t5 -rf now)添加一个井号(#),您就可以防止那个组合键触发重新引导。 保护服务和后台进程 服务的安全配置的第一个步骤是,禁用所有不需要的服务。不提供的服务不会为潜在的入侵者所利用,有效地降低了风险。 为
37、了找出所有启用的服务,需要检查若干个位置。另外,要禁用不安全的服务,并使用更为安全的选择来取代它们。例如,telnet 不是加密的,所以,使用加密的 ssh 服务来取代 telnet(见第 2 部分)。 当保护服务时,考虑这些方面: · /etc/inittab · /etc/init.d 中的引导脚本 · inetd/xinetd 后台进程 · TCP 封装器(wrappers) · 防火墙 /etc/inittab 在引导过程中,init 进程会去读取 /etc/inittab 文件中的条目。每一个条目 —— 每一行 —— 都定义了在特定的条件下运行哪个程序。
38、这些程序或者本身是服务,或者是用于启动和停止服务。 init 进程能识别若干个称为 运行级(run levels) (由一个字母标识)的状态。当输入了运行级或者发生特定的事件(比如电源故障)时,就会考察那些条目,并执行适当的命令。 /etc/inittab 中条目的格式是,前面是条目的标签,随后是在哪些运行级下此条目要执行,然后是动作关键字以及包括命令行参数的需要执行的命令。所有这些域都由冒号隔开,典型的条目应该类似这样: my_service:35:once:/usr/local/bin/my_service someparameter (在 inittab 手册中可以找到动
39、作关键字的完全列表。) 在这个示例中,条目的标签是 my_service。当输入的运行级为 3 或 5 时,它将使用参数 someparameter 来运行程序 /usr/local/bin/my_service。一旦这个程序被终止,它将不会再重新启动(动作关键字“once”)。 为了保护 Linux 系统,您应该理解 /etc/inittab 中所有条目的功能,并禁用潜在不必要的服务,方法是删除那个条目,或者在那一行的开头使用井号注释掉它。 在所有 Linux 系统中,都会有以下两类条目。第一类用来启动名为 /sbin/getty (或者类似的)的程序,这些通常是用来允许通过 L
40、inux 虚拟控制台或者串行线登录。第二类会运行 /etc/rc.d 目录中通常名为 rc 的脚本,并将当前运行级作为参数给出。这个脚本控制服务的启动和停止(接下来会介绍)。 /etc/init.d 中的引导脚本 /etc/init.d 中的引导脚本用来启动或者停止系统服务。对于每一个运行级,都有一个 /etc/rcN.d 目录(“N”是运行级的标识),其中包含了指向那些在运行级改变时需要调用的脚本的软链接。 如果链接名以“S”开头,则脚本在进入那个运行级时执行,启动相应的服务;如果以“K”开头,则脚本在退出那个运行级时执行,停止那个服务。 大部分情况下,引导脚本的名称会暗示它所
41、控制的服务。要防止在特定的运行级中会启动某个服务,则删除运行级目录中指向相应引导脚本的链接,或者使用一个不做任何事情的虚脚本取代 /etc/init.d 中原来的引导脚本。 inetd/xinetd 后台进程 也可以在客户机请求时根据需要调用服务。这些请求被转交给超级后台进程 inetd 或者 xinetd。然后超级后台进程确定要启动哪个服务,并将请求传递到相应的后台进程。通常,telnet、ftp、rlogin 等服务使用 inetd 或者 xinetd 启动。 inetd 后台进程在 /etc/inetd.conf 配置,那个文件中包含了关于每一个超级后台进程需要提供的服务的条目
42、配置 FTP 服务器的条目应该类似这样 —— ftp stream tcp nowait root /usr/bin/ftpd in.ftpd -el —— 使用井号注释掉它,就可以禁用它。 为了安全起见,建议使用 xinetd。与 inetd 相比, xinetd 能够启动基于 rpc 的服务,并支持访问控制。xinetd 可以限制进入连接的速度、来自特定主机的进入连接的数目,或者某个服务的总连接数。 通过用于每个从属后台进程的独立配置文件来配置 xinetd 。这些文件位于 /etc/xinetd.d/ 目录中。前面 FTP 服务器的示例配置文件应该称为 called /etc/
43、xinetd.d/ftp,类似这样: 清单 1. 配置文件,/etc/xinetd.d/ftp service ftp { socket_type = stream protocol = tcp wait = no user = root server = /usr/bin/ftpd server_args = -el disable = yes }
44、 为了禁用这个服务,参数 disable 被设置为 yes,如上面示例所示。 为了更详细的访问控制,xinetd 支持以下三个另外的参数: · only_from · no_access · access_time 为了限制访问,但不完全禁用 ftp 后台进程,您可以如下修改配置文件 /etc/xinetd.d/ftp: 清单 2. 为限制访问而修改过的配置文件,/etc/xinetd.d/ftp service ftp { socket_type = stream protocol = tcp
45、 wait = no user = root server = /usr/bin/ftpd server_args = -el disable = no only-from = 192.168.200.3 192.168.200.7 192.168.200.9 only-from += 192.168.200.10 192.168.200.12 172.16.0.0 n
46、o_access = 172.16.{1,2,3,10} access_times = 07:00-21:00 } only-from 和 no_access 可以接受数字 IP 地址(最右边的零作为任意数值处理)、IP 地址/网络掩码 范围、主机名以及 /etc/networks 中的网络名。如果组合使用 only-from 和 no_access, xinetd 会为每个主机连接寻找最接近的匹配。 在前面的代码示例中,表示 IP 地址为 172.16.x.x 的主机可以连接到此主机,但地址属于 172.16.1.x、 172.16.2.x
47、172.16.3.x 和 172.16.10.x 的则不能连接。可见,当使用 no_access 所用的因数符号时,不需要指定地址的所有四个部分。因数部分必须是地址最右边的部分。参阅下面的 参考资料 部分,以获得关于 xinetd 及其配置的文章。 TCP 封装器 如果您决定不使用 xinetd,而是使用 inted,那么您可以使用 TCP 封装器来记录请求和具体的对特定网络的 允许/拒绝。TCP 封装器会为了认证和记录日志而去检查 /etc/hosts.allow 和 /etc/hosts.deny,并将客户机请求封装起来,不直接回应它们。一旦认证成功,请求就会被转发到原来请求的服务
48、 相对于使用普通的 inetd,使用 TCP 封装器有两个主要的好处: · 发出请求的客户机不会察觉到 TCP 封装器;因此,没有异心的人不会发现任何区别,而心怀不轨的人也得不到关于他们的请求失败的任何信息。 · TCP 封装器的工作不会理会任何已经被封装的服务,让应用程序能够共享它们的配置文件,从而简化管理。 要获得关于 TCP 封装器配置文件的详细文档,请参阅 参考资料 中列出的 Red Hat Linux Reference Guide。 如何找到所有人都可写的(world-writable)文件 要找出所有人都可写的文件,使用此命令: find / -per
49、m -002 \( -type f -o -type d \) -ls 其中: · / 是搜索的起始位置。 · -perm 检查权限。 · 002 表示(八进制符号)“other”设置了写位。 · 模式 002 之前的 - 表示设置了所有权限位(没有考虑模式中的 zero-bits)。 · -type f 或者 -type d 搜索常规的文件和目录。 · -ls 以 ls 格式列出找到的文件。 防火墙 为了防范与不应该运行的服务或者不应该被 Internet 等特定网络所访问的服务的通信,建议安装一个防火墙。防火墙提供网络间基于信任级别的受控通信,并权衡使用基于角色的安全策略和最小权限原则允许或者拒绝对特定服务的访问。 防火墙的安装与配置是一个非常复杂的话题,不在本系列文章的讨论范围之内。 保护本地文件系统 保护本地文件系统涉及的是文件和目录的所有者及访问它们的权限。要保护文件系统,文件和目录的保护位必须设置为只授予最小限度的权限。 要特别注意关于所有人可写的文件和系统目录的不适当权限,以及所谓的 setuid 或者 setgid 命令。这些命令运行时的用户权限比运行此命令






