?
副标题:Unix/Linux文件目录权限设计指南
在Unix/Linux系统中设计文件目录权限时,遵循权限最小化的原则非常重要。 通过正确设置文件和目录权限,您可以保护系统免受未经授权的访问,同时确保合法用户拥有所需的访问权限。
附: 笔者目睹了太多从不考虑权限设计的软件项目或软件系统。 从第一行代码和第一个配置文件开始,root一直简单粗暴地进入生产环境。 一切都是由 root 完成的。 这通常可以省去麻烦。 但一旦安全风险被引爆,后果将很严重,轻则拒绝服务,重则数据泄露,更严重的问题包括客户流失、巨额赔偿、品牌声誉损失(你们公司不值得信赖,为什么你们继续使用你的产品)。 即便如此,更多的原因可能是很多人“不知道如何做权限设计”,这才是最可怕的。
本文将为您介绍Unix/Linux文件目录权限设计的指导原则,并以浅显易懂、易于实践的方式讲解技术原理。
1.了解文件和目录权限
在Unix/Linux系统中,每个文件和目录都有关联的权限信息来定义谁可以对其进行读、写和执行操作。
?
权限信息通常以“rwxr-x---”的形式呈现,代表所有者、所属组以及其他用户的权限。 其中,“r”代表读权限,“w”代表写权限,“x”代表执行权限,“-”代表没有相应权限。
2. 最小化权限原则
根据权限最小化原则,文件和目录的权限应该设置为必要的最小权限,即只授予用户所需的最小权限,而不是过多的权限。 这有助于减少潜在的安全风险并防止未经授权的访问和意外操作。
3. 文件权限设计指导
对于文件来说,常见的权限设计包括:
- 所有者应具有读写权限才能编辑和修改文件。
- 根据情况,所属组的成员可能需要读取权限。
- 其他用户通常不需要任何权限。
?
例如,在设置文件权限时,可以使用命令“chmod 640”将文件权限设置为“rw-r-----”,实现权限最小化的设计。
4.目录权限设计指导
对于目录来说,权限设计比较复杂,因为除了目录本身的权限之外,还需要考虑目录中文件的访问权限。 一般来说:
- 只需要访问该目录内容的用户应该被赋予该目录的执行权限,但不需要被赋予写入权限。
- 如果用户需要在目录中创建或删除文件,还必须授予写权限。
以命令“chmod 751”为例。 将目录的权限设置为“rwxr-x--x”。 这样可以保证用户拥有必要的访问权限,而不需要授予太多的权限(最后一个--x很重要),其他用户必须有访问子目录的权限,并且至少需要执行x权限,并且不需要读取 r 权限)。
注意:目录权限是逐层减少的,包括用户和权限。 例如,/opt 目录的所有者是 root,而下一个目录 /opt/ 的所有者是非 root。 权限范围从751到750,再到640到600,再到550、440甚至400(比如非常机密的密钥文件)等等。 一般情况下,文件权限比目录权限小一点。 后面介绍的umask基本就是这个规则。
5. 其他注意事项
在权限设计过程中,还需要考虑使用特殊权限标签(如SUID、SGID、Bit)以及ACL(访问控制列表)的配置来更精细地控制文件和目录的访问权限。颗粒状的方式。
6. umask -p 027
通过 umask 设置动态生成的目录和文件的初始权限。
umask 是 Unix 和类 Unix 操作系统中使用的掩码,用于设置新文件的权限。 它用于确定在创建新文件或目录时哪些权限位将被系统阻止。 换句话说,umask值指定了要从新文件或目录中删除的权限。
具体地,umask值是一个三位八进制数,用于屏蔽相应位置的权限位。 每一位代表不同的权限(读、写、执行),umask值中的每一位对应用户、所属组和其他用户的权限。 当系统根据umask值设置新文件或目录的权限时,会从完全权限(通常是777或666)中减去umask值对应的权限,得到最终的权限设置。
例如umask 027(对应目录权限750,文件权限640)表示屏蔽其他用户的所有权限(2表示写权限,7表示读、写、执行权限),同时也屏蔽该组的写权限它属于哪个。 因此,当创建新文件或目录时,将使用默认权限(通常为666或777)减去umask值来获取实际的权限设置。
umask 027 在 /etc/ 文件中设置并对所有用户生效。 它设置在 ~/. 文件并对独立用户生效(例如)。
有关 umask 027 的最佳实践通常适用于需要保证信息安全的环境,特别是涉及敏感数据的系统。 通过umask 027设置,保证其他用户对新创建的文件没有任何权限,并限制其所属组的写权限。 这有助于防止未经授权的访问和修改,提高系统中敏感数据的安全性。 但在具体应用中,umask值的设置需要根据实际需求和安全策略综合考虑。
在设计软件系统时,确保进程作为独立的非 root 用户(通常称为用户)启动是一项重要的安全实践。 这种做法有助于限制系统潜在的攻击面,提高系统的安全性。
以下是最佳实践示例,以虚构的 Web 服务器软件系统为例:
软件系统:
1.创建独立的非root用户
首先创建一个专门用于运行的非root用户,如“”:
sudo -r -s /sbin/
注意:这是一个非常重要的安全实践。 登录用户(如ops)和进程启动/维护用户(如svc、ruby,禁止交互登录)分离、独立。 权限最小化原则也是安全权限设计最重要的方面。 最佳实践。 这两个用户可以是一个用户组。 登录用户无权修改或移动进程目录。 这可以通过 sudo 或独立的命令行工具(例如证书替换工具)来实现。
2.文件和目录权限设置
二进制文件
使可执行文件可读且可执行,但不可写:
须藤 chown : /usr/local/bin/
须藤 chmod 550 /usr/local/bin/
配置文件
对于配置文件,请确保只允许用户读取,其他用户没有任何权限:
须藤 chown :/etc/.conf
须藤 chmod 400 /etc/.conf
日志档案
对于日志文件,允许用户写入,其他用户只能读取日志:
须藤 chown :/var/log/.log
须藤 chmod 640 /var/log/.log
3. 进程启动
使用或其他合适的服务管理工具,指定用户启动进程,如服务单元文件中所示:
[单元]
=
之后=。
[]
类型=
用户=
组=
=/usr/local/bin/
=开-
[]
=多用户。
4. 其他注意事项
配置ACL(访问控制列表)时,可以对特定目录或文件添加更细粒度的访问控制,以满足特定的安全需求。 同时,您可以考虑使用 或 等安全模块来增强进一步的保护。
通过以上最佳实践的实际例子,我们为软件系统建立了一个安全的运行环境,保证进程以独立的非root用户启动,并将其相关文件和目录的权限最小化。 这将有助于提高系统的安全性并降低未经授权访问系统的风险。
通过遵循和实践本文介绍的这些指导原则,我们可以实现Unix/Linux系统中文件和目录权限的最小化设计,从而提高系统的安全性和稳定性。
希望这篇文章能够对大家有所帮助,也欢迎大家在留言区分享自己的经验和想法。
图:穿过落基山脉,华盛顿州变成了亚马逊朋友的大平原
一元或者观看就是一个很大的鼓励,让我们一起成长。