Shell 安全:保障脚本与系统安全的全面指南(上)
在计算机系统的世界里,安全问题始终是重中之重。系统安全就像一把双刃剑,许多公司投入大量资金购买系统管理工具,但往往对管理员的培训不足。系统资源短缺的问题最初通常由程序员发现。例如,曾有一家公司规定程序员不能访问性能监控工具,但管理员发现工具可访问后将其设为安全状态,然而几周后员工又悄悄恢复使用,因为禁用这些工具会削弱公司的第一道防线。
1. Shell 脚本安全理念
Shell 脚本的安全与系统安全类似,并非要将所有设置收紧到脚本几乎无法运行的程度,而是要确保脚本不做不必要的假设,避免在移植到新系统或调试难题时带来更多麻烦。同时,要让脚本具备抗崩溃能力,以应对紧急情况或同事的恶意破坏。就像使用nounset外壳选项一样,更高的安全性意味着更低的维护成本。
2. 基本 Linux 安全模型
在 Linux 系统中,所有文件都由所有者和所属组拥有。每个文件都分配了特定登录用户的用户 ID 号,用户又被进一步划分为组,每个用户都有一个组号。最初,Unix 将用户分配到一个主要组(主 gid),BSD 4.3 引入了额外的补充组。用户必须有与文件 GID 匹配的主组或补充组,才能获得组访问权限。
每个 Linux 用户都有一个 uid(用户 ID 号),Linux 系统上的每个文件都有一个 uid 号来表明其所有者。使用ls --numeric-uid-gid开关可以显示文件 uid 和 gid 所有者的八进制数字,而非名称。
$ id uid=5