1. Linux账号管理基础
在Linux系统中,账号管理是系统管理员最基础也是最重要的日常工作之一。与Windows系统不同,Linux采用更加严格的权限分离机制,每个用户和进程都只能访问被明确授权的资源。
1.1 用户账号类型
Linux系统中有三种主要的账号类型:
-
超级用户(root):UID为0,拥有系统最高权限,可以执行任何操作。生产环境中应避免直接使用root账号,而是通过sudo机制进行特权操作。
-
系统用户:UID范围通常为1-999(不同发行版可能略有差异),这些用户用于运行系统服务而非人类用户登录。例如mysql、nginx等。
-
普通用户:UID从1000开始分配,是实际使用系统的个人账号。管理员可以通过配置限制这些用户的权限范围。
提示:使用
id命令可以查看当前用户的UID、GID和所属组信息。
1.2 用户账号配置文件
Linux用户信息主要存储在以下配置文件中:
-
/etc/passwd:存储用户基本信息code复制username:x:UID:GID:comment:homedir:shell其中x表示密码已移至/etc/shadow文件
-
/etc/shadow:存储加密后的密码及密码策略code复制username:encryptedpassword:lastchange:min:max:warn:inactive:expire -
/etc/group:存储组信息code复制groupname:x:GID:members
1.3 常用账号管理命令
-
创建用户:
bash复制useradd -m -s /bin/bash -c "User Comment" username参数说明:
-m:创建家目录-s:指定默认shell-c:用户备注信息
-
设置密码:
bash复制
passwd username -
修改用户属性:
bash复制usermod -aG supplementary_group username # 添加附加组 usermod -s /sbin/nologin username # 禁止登录 -
删除用户:
bash复制userdel -r username # -r同时删除家目录和邮件池
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux权限模型详解
Linux采用经典的Unix权限模型,通过用户(user)、组(group)和其他人(other)三个维度控制文件访问权限。
2.1 权限表示法
使用ls -l命令可以看到如下权限表示:
code复制-rwxr-xr-- 1 user group 4096 Jan 1 10:00 file
权限分为四部分:
- 第一个字符表示文件类型(-普通文件,d目录,l链接等)
- 接下来三组rwx分别表示所有者、所属组和其他用户的权限
- r:读权限
- w:写权限
- x:执行权限(对目录表示可进入)
2.2 权限修改命令
-
使用chmod修改权限:
bash复制chmod u=rwx,g=rx,o=r file # 符号模式 chmod 754 file # 数字模式数字模式计算:
- r=4, w=2, x=1
- 所有者7(4+2+1),组5(4+1),其他4(4)
-
使用chown修改所有者:
bash复制chown user:group file # 修改所有者和组 chown :group file # 仅修改组
2.3 特殊权限位
除了基本的rwx权限外,Linux还有三个特殊权限位:
-
SUID(Set User ID):以文件所有者身份执行
bash复制chmod u+s file典型应用:/usr/bin/passwd允许普通用户修改自己的密码
-
SGID(Set Group ID):以文件所属组身份执行
bash复制chmod g+s file对目录设置时,新建文件将继承目录的组
-
Sticky Bit:限制目录内文件删除
bash复制chmod +t directory典型应用:/tmp目录允许用户创建文件但只能删除自己的文件
3. 高级权限管理技术
3.1 ACL访问控制列表
基本权限系统有时不够灵活,ACL提供了更细粒度的控制:
-
查看ACL:
bash复制
getfacl file -
设置ACL:
bash复制setfacl -m u:username:rwx file # 为用户添加权限 setfacl -m g:groupname:rx file # 为组添加权限 setfacl -x u:username file # 删除用户ACL条目 -
默认ACL(对目录设置后,新建文件将继承):
bash复制setfacl -d -m u:username:rwx dir
3.2 能力(Capabilities)机制
传统root权限过于宽泛,能力机制将超级用户权限分解为多个独立的能力:
bash复制# 查看命令所需能力
getcap /usr/bin/command
# 设置能力
setcap cap_net_raw+ep /usr/bin/ping
常见能力包括:
- CAP_NET_ADMIN:网络管理
- CAP_SYS_ADMIN:系统管理
- CAP_DAC_OVERRIDE:绕过文件权限检查
3.3 SELinux与AppArmor
这些强制访问控制(MAC)系统提供了比传统DAC更严格的安全模型:
-
SELinux:
bash复制# 查看上下文 ls -Z ps -Z # 修改上下文 chcon -t httpd_sys_content_t /var/www/html -
AppArmor:
bash复制# 查看状态 aa-status # 强制模式 aa-enforce /etc/apparmor.d/profile
4. 安全最佳实践
4.1 账号安全策略
-
密码策略配置(/etc/login.defs):
code复制PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14 -
使用pam_cracklib强化密码复杂度:
bash复制# /etc/pam.d/common-password password requisite pam_cracklib.so retry=3 minlen=12 difok=3 -
限制su命令使用:
bash复制# /etc/pam.d/su auth required pam_wheel.so use_uid
4.2 权限最小化原则
-
使用sudo代替直接root登录:
bash复制# /etc/sudoers username ALL=(ALL) /usr/bin/apt update, /usr/bin/apt upgrade %admin ALL=(ALL) NOPASSWD: ALL -
遵循最小特权原则:
- 服务账号使用专用用户
- 限制家目录权限(700)
- 定期审计/etc/sudoers和SUID/SGID文件
4.3 审计与监控
-
使用last命令查看登录历史:
bash复制
last -i -a -
监控特权操作:
bash复制# /etc/audit/audit.rules -a always,exit -F arch=b64 -S execve -k exec -
检查异常账号:
bash复制# 检查空密码账号 awk -F: '($2 == "") {print}' /etc/shadow # 检查UID为0的非root账号 awk -F: '($3 == 0 && $1 != "root") {print}' /etc/passwd
5. 实战案例解析
5.1 Web服务器权限配置
典型LAMP环境权限设置:
bash复制# 创建专用用户和组
groupadd webadmin
useradd -G webadmin www-data
# 设置网站目录权限
chown -R root:webadmin /var/www
chmod -R 750 /var/www
find /var/www -type d -exec chmod 2750 {} \;
setfacl -R -d -m g:webadmin:rwx /var/www
5.2 共享目录配置
多团队协作目录设置:
bash复制# 创建共享组和目录
groupadd project-team
mkdir /shared/projectX
chown root:project-team /shared/projectX
chmod 2770 /shared/projectX
# 设置ACL允许特定用户访问
setfacl -m u:contractor1:rx /shared/projectX
5.3 容器环境权限控制
Docker容器安全实践:
bash复制# 使用非root用户运行容器
docker run -u 1001:1001 myimage
# 限制能力
docker run --cap-drop=all --cap-add=NET_BIND_SERVICE nginx
# 使用用户命名空间
dockerd --userns-remap=default
6. 常见问题排查
6.1 权限拒绝问题诊断流程
-
确认当前用户和组:
bash复制id -
检查文件权限和所有者:
bash复制ls -l /path/to/file -
检查父目录权限(需要x权限才能访问):
bash复制
namei -l /path/to/file -
检查SELinux/AppArmor限制:
bash复制
ausearch -m avc -ts recent dmesg | grep apparmor
6.2 账号锁定问题
-
检查密码过期:
bash复制
chage -l username -
检查失败登录尝试:
bash复制
faillock --user username -
检查PAM模块限制:
bash复制
grep pam_tally2 /etc/pam.d/*
6.3 SUID/SGID安全问题
-
查找所有SUID/SGID文件:
bash复制find / -perm /6000 -type f -exec ls -ld {} \; 2>/dev/null -
评估是否需要这些权限:
- 不必要的SUID/SGID文件应该移除特殊权限位
- 考虑使用能力机制替代
-
监控SUID/SGID文件变更:
bash复制# /etc/aide.conf /bin PERMS /usr/bin PERMS
7. 自动化管理工具
7.1 批量用户管理
-
使用newusers批量创建:
bash复制# users.txt user1:x:1001:1001:User One:/home/user1:/bin/bash user2:x:1002:1002:User Two:/home/user2:/bin/bash newusers users.txt -
使用chpasswd批量设置密码:
bash复制echo "user1:password1" | chpasswd
7.2 Ansible自动化
用户管理playbook示例:
yaml复制- hosts: all
become: yes
tasks:
- name: Ensure developers group exists
group:
name: developers
state: present
gid: 2001
- name: Add users to developers group
user:
name: "{{ item }}"
groups: developers
append: yes
loop:
- alice
- bob
7.3 LDAP集成
配置Linux客户端使用LDAP认证:
bash复制# 安装必要软件
apt install libnss-ldap libpam-ldap nscd
# /etc/nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap
# /etc/pam.d/common-session
session required pam_mkhomedir.so skel=/etc/skel umask=0022
