2021-09-29 10:20:13
Linux管理多用户环境的核心在于通过精细的权限管理和资源控制实现用户隔离与系统安全,主要依赖以下机制和策略:
一、用户与组权限管理UID/GID与主组机制
每个用户有唯一UID,每个组有唯一GID。文件/目录权限基于UID/GID判断访问权限。
创建用户时自动生成同名主组,用户创建的文件默认归属主组,并继承父目录权限。
关键命令:
useradd <用户名>:创建用户及主组。
passwd <用户名>:设置密码。
usermod -aG <组名> <用户名>:将用户加入附加组。
groupadd <组名>:创建新组。
文件权限控制
chmod:修改文件/目录的读(r)、写(w)、执行(x)权限。
示例:chmod 750 /home/user_data 表示所有者全权限,同组用户可读/执行,其他用户无权限。
chown/chgrp:更改文件所有者或所属组。
最小权限原则
用户家目录默认权限设为700(仅所有者可读写执行),防止其他用户访问。
共享文件时,将相关用户加入特定组(如devs组),并设置组权限为770(组内成员全权限)。
cgroups(控制组)
核心功能:限制进程组的CPU、内存、磁盘I/O等资源,防止单个用户耗尽系统资源。
关键控制器:
cpu:通过cpu.shares分配CPU时间份额,或通过cpu.cfs_quota_us限制绝对CPU时间。
memory:设置memory.limit_in_bytes限制内存使用量。
blkio:控制磁盘I/O带宽,避免I/O瓶颈。
与systemd集成:现代Linux系统通过systemd的切片(slices)自动管理cgroups,例如为特定用户创建user-*.slice并配置资源限制。
ulimit命令
限制单个进程的资源使用(如文件描述符数量、内存大小、CPU时间)。
通过编辑/etc/security/limits.conf设置永久性限制,防止用户进程耗尽资源。
SUID/SGID位
SUID:可执行文件设置SUID位后,执行者临时获得文件所有者权限(如passwd命令需修改/etc/shadow文件)。
SGID:可执行文件设置SGID位后,执行者临时获得文件所属组权限;对目录设置SGID位时,新创建的文件自动继承父目录的组。
风险:仅对可信程序设置SUID/SGID,避免权限滥用。
粘滞位(Sticky Bit)
用于共享目录(如/tmp),设置后仅文件所有者或root可删除/重命名文件。
命令:chmod +t /path/to/dir。
sudo机制
允许普通用户以超级用户身份执行特定命令,通过/etc/sudoers文件(使用visudo编辑)精细控制权限。
最佳实践:避免宽泛配置(如ALL=(ALL) ALL),仅授予必要命令权限。
PAM(可插拔认证模块)
提供灵活的认证框架,支持本地密码、LDAP、Kerberos等多种认证方式。
日志审计
记录关键安全事件(如/var/log/auth.log、/var/log/syslog),定期审查日志以发现异常行为。
可使用日志管理工具(如ELK Stack)自动化分析。
安全漏洞
弱密码或共享密码。
权限配置不当(如chmod 777)。
SUID/SGID滥用或配置错误。
未及时更新系统和软件。
用户家目录权限问题(如设置为777)。
最佳实践
强制强密码策略:使用PAM模块检查密码复杂度,定期更换密码。
最小权限原则:仅授予用户完成工作所需的最低权限。
定期更新系统:修补已知漏洞。
禁用不必要服务:减少攻击面。
用户安全培训:提高安全意识,防范钓鱼和恶意软件。
定期备份:快速恢复数据,应对勒索软件等威胁。
通过以上策略,Linux可构建一个既安全又高效的多用户环境,满足企业级应用需求。