第5课:用户和权限管理

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

推广

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

用户和权限管理

用户账户基础

1. 用户类型

系统用户分类

# root用户 (UID = 0)
# 系统管理员,拥有最高权限

# 系统用户 (UID 1-999)
# 用于运行系统服务,如www-data、mysql等

# 普通用户 (UID >= 1000)
# 日常使用的用户账户

查看用户信息

id                            # 显示当前用户信息
id username                   # 显示指定用户信息
whoami                        # 显示当前用户名
who                           # 显示已登录用户
w                             # 显示用户活动信息
last                          # 显示用户登录历史

2. 用户配置文件

/etc/passwd - 用户账户信息

cat /etc/passwd               # 查看所有用户

# 格式:用户名:密码:UID:GID:描述:家目录:Shell
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:User Name:/home/user:/bin/bash

# 字段说明
# 1. 用户名
# 2. 密码占位符 (x表示密码在/etc/shadow中)
# 3. UID (用户ID)
# 4. GID (主组ID)
# 5. 用户描述信息
# 6. 家目录路径
# 7. 默认Shell

/etc/shadow - 密码信息

sudo cat /etc/shadow          # 查看密码文件 (需要root权限)

# 格式:用户名:加密密码:最后修改:最小间隔:最大间隔:警告期:非活动期:过期日期:保留
root:$6$salt$hash...:19000:0:99999:7:::

# 字段说明
# 1. 用户名
# 2. 加密后的密码
# 3. 密码最后修改日期 (从1970-01-01开始的天数)
# 4. 密码最小使用天数
# 5. 密码最大使用天数
# 6. 密码过期前警告天数
# 7. 密码过期后账户锁定天数
# 8. 账户过期日期
# 9. 保留字段

/etc/group - 组信息

cat /etc/group                # 查看所有组

# 格式:组名:密码:GID:成员列表
root:x:0:
users:x:100:user1,user2
sudo:x:27:user1

# 字段说明
# 1. 组名
# 2. 组密码占位符
# 3. GID (组ID)
# 4. 组成员列表 (逗号分隔)

用户管理命令

1. 添加用户

useradd - 添加用户

# 基本用法
sudo useradd username         # 创建用户 (使用默认设置)
sudo useradd -m username      # 创建用户并创建家目录

# 常用选项
sudo useradd -m -s /bin/bash -c "Full Name" username
sudo useradd -m -g users -G sudo,docker username
sudo useradd -m -d /custom/home username

# 选项说明
-m                           # 创建家目录
-s /bin/bash                 # 指定默认Shell
-c "Full Name"               # 用户描述信息
-g group                     # 指定主组
-G group1,group2             # 指定附加组
-d /path/to/home             # 指定家目录路径
-u 1001                      # 指定UID
-e 2024-12-31                # 设置账户过期日期

adduser - 交互式添加用户 (Debian/Ubuntu)

sudo adduser username        # 交互式创建用户
# 会提示输入密码、全名等信息
# 自动创建家目录和基本配置

2. 修改用户

usermod - 修改用户属性

# 修改用户信息
sudo usermod -c "New Full Name" username     # 修改描述
sudo usermod -s /bin/zsh username            # 修改Shell
sudo usermod -d /new/home username           # 修改家目录
sudo usermod -l newname oldname              # 修改用户名

# 修改组关系
sudo usermod -g newgroup username            # 修改主组
sudo usermod -G group1,group2 username       # 设置附加组
sudo usermod -a -G newgroup username         # 添加到附加组

# 锁定/解锁用户
sudo usermod -L username                     # 锁定用户
sudo usermod -U username                     # 解锁用户

# 设置过期时间
sudo usermod -e 2024-12-31 username          # 设置账户过期
sudo usermod -e "" username                  # 取消过期设置

passwd - 修改密码

passwd                        # 修改当前用户密码
sudo passwd username          # 修改指定用户密码
sudo passwd -l username       # 锁定用户密码
sudo passwd -u username       # 解锁用户密码
sudo passwd -d username       # 删除用户密码
sudo passwd -e username       # 强制用户下次登录时修改密码

# 密码策略
sudo passwd -n 7 username     # 设置密码最小使用天数
sudo passwd -x 90 username    # 设置密码最大使用天数
sudo passwd -w 7 username     # 设置密码过期警告天数

3. 删除用户

userdel - 删除用户

sudo userdel username         # 删除用户 (保留家目录)
sudo userdel -r username      # 删除用户和家目录
sudo userdel -f username      # 强制删除 (即使用户已登录)

# 删除前检查
ps -u username                # 检查用户进程
sudo pkill -u username        # 终止用户所有进程

deluser - 删除用户 (Debian/Ubuntu)

sudo deluser username         # 删除用户
sudo deluser --remove-home username  # 删除用户和家目录
sudo deluser --remove-all-files username  # 删除用户和所有文件

组管理

1. 组操作命令

groupadd - 添加组

sudo groupadd groupname       # 创建组
sudo groupadd -g 1001 groupname  # 指定GID创建组
sudo groupadd -r systemgroup  # 创建系统组

groupmod - 修改组

sudo groupmod -n newname oldname  # 修改组名
sudo groupmod -g 1002 groupname   # 修改GID

groupdel - 删除组

sudo groupdel groupname       # 删除组 (不能是用户的主组)

2. 组成员管理

gpasswd - 组密码和成员管理

sudo gpasswd -a username groupname    # 添加用户到组
sudo gpasswd -d username groupname    # 从组中删除用户
sudo gpasswd -A admin1,admin2 groupname  # 设置组管理员
sudo gpasswd -M user1,user2 groupname    # 设置组成员列表

groups - 查看用户所属组

groups                        # 查看当前用户所属组
groups username               # 查看指定用户所属组

newgrp - 切换主组

newgrp groupname              # 临时切换到指定组
exit                          # 退出组切换

sudo权限管理

1. sudo基础

sudo配置文件

sudo visudo                   # 编辑sudo配置文件 (/etc/sudoers)
# 使用visudo可以检查语法错误,避免配置错误导致系统无法使用sudo

/etc/sudoers文件格式

# 用户权限格式
username ALL=(ALL:ALL) ALL

# 组权限格式
%groupname ALL=(ALL:ALL) ALL

# 格式说明
# 用户/组 主机=(运行用户:运行组) 命令
# ALL表示所有

# 示例
root ALL=(ALL:ALL) ALL        # root用户可以执行所有命令
%sudo ALL=(ALL:ALL) ALL       # sudo组成员可以执行所有命令
user1 ALL=(ALL) NOPASSWD: ALL # user1执行sudo不需要密码
user2 ALL=(ALL) /bin/systemctl, /bin/mount  # user2只能执行特定命令

2. sudo使用

基本sudo命令

sudo command                  # 以root身份执行命令
sudo -u username command      # 以指定用户身份执行命令
sudo -g groupname command     # 以指定组身份执行命令
sudo -i                       # 切换到root用户环境
sudo -s                       # 启动root shell
sudo -l                       # 列出当前用户可执行的sudo命令

sudo配置示例

# 允许用户执行特定命令
user1 ALL=(ALL) /bin/systemctl restart nginx
user1 ALL=(ALL) /bin/systemctl reload nginx

# 允许组成员无密码执行特定命令
%developers ALL=(ALL) NOPASSWD: /bin/systemctl restart apache2

# 命令别名
Cmnd_Alias SERVICES = /bin/systemctl, /sbin/service
%operators ALL=(ALL) SERVICES

# 用户别名
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL) ALL

3. sudo安全配置

安全选项

# 在/etc/sudoers中添加安全选项
Defaults env_reset            # 重置环境变量
Defaults mail_badpass         # 密码错误时发送邮件
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults logfile="/var/log/sudo.log"  # 记录sudo日志
Defaults log_input,log_output # 记录输入输出
Defaults passwd_tries=3       # 密码尝试次数
Defaults passwd_timeout=5     # 密码输入超时时间

用户环境配置

1. Shell配置文件

系统级配置文件

/etc/profile                  # 所有用户登录时执行
/etc/bash.bashrc              # 所有bash用户执行
/etc/environment              # 环境变量配置

用户级配置文件

~/.profile                    # 用户登录时执行
~/.bashrc                     # bash启动时执行
~/.bash_profile               # bash登录时执行
~/.bash_logout                # bash退出时执行
~/.vimrc                      # vim配置
~/.ssh/                       # SSH配置目录

2. 环境变量

查看和设置环境变量

env                           # 显示所有环境变量
echo $PATH                    # 显示PATH变量
echo $HOME                    # 显示家目录
echo $USER                    # 显示用户名

# 临时设置环境变量
export MYVAR="value"          # 设置环境变量
unset MYVAR                   # 删除环境变量

# 永久设置环境变量
echo 'export MYVAR="value"' >> ~/.bashrc
source ~/.bashrc              # 重新加载配置

常用环境变量

PATH                          # 可执行文件搜索路径
HOME                          # 用户家目录
USER                          # 当前用户名
SHELL                         # 当前Shell
LANG                          # 语言设置
TZ                            # 时区设置
EDITOR                        # 默认编辑器

3. 用户配置模板

/etc/skel目录

ls -la /etc/skel              # 查看新用户模板目录
# 新用户创建时会复制此目录内容到用户家目录

# 自定义新用户模板
sudo cp custom_bashrc /etc/skel/.bashrc
sudo cp custom_vimrc /etc/skel/.vimrc

权限控制进阶

1. ACL (Access Control Lists)

查看ACL支持

mount | grep acl              # 查看文件系统是否支持ACL
getfacl file.txt              # 查看文件ACL权限

设置ACL权限

# 安装ACL工具 (如果未安装)
sudo apt install acl          # Ubuntu/Debian
sudo yum install acl          # CentOS/RHEL

# 设置ACL权限
setfacl -m u:username:rwx file.txt     # 给用户设置权限
setfacl -m g:groupname:rx file.txt     # 给组设置权限
setfacl -m o::r file.txt               # 给其他用户设置权限
setfacl -x u:username file.txt         # 删除用户权限
setfacl -b file.txt                    # 删除所有ACL权限

# 递归设置ACL
setfacl -R -m u:username:rwx directory/

2. 特殊权限应用

实际应用场景

# Web服务器权限设置
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
sudo find /var/www/html -type f -exec chmod 644 {} \;

# 共享目录权限设置
sudo mkdir /shared
sudo chgrp shared /shared
sudo chmod 2775 /shared       # 设置SGID,新文件继承组

用户监控和审计

1. 用户活动监控

登录监控

last                          # 查看用户登录历史
lastb                         # 查看失败登录尝试
who                           # 查看当前登录用户
w                             # 查看用户活动

进程监控

ps aux | grep username        # 查看用户进程
pstree -u username            # 查看用户进程树
lsof -u username              # 查看用户打开的文件

2. 日志审计

系统日志

# 查看认证日志
sudo tail -f /var/log/auth.log     # Ubuntu/Debian
sudo tail -f /var/log/secure       # CentOS/RHEL

# 查看sudo日志
sudo tail -f /var/log/sudo.log

# 使用journalctl查看日志
journalctl -u ssh                  # SSH服务日志
journalctl _COMM=sudo              # sudo命令日志

实用脚本和技巧

1. 批量用户管理

批量创建用户脚本

#!/bin/bash
# 批量创建用户脚本

users="user1 user2 user3"
for user in $users; do
    sudo useradd -m -s /bin/bash $user
    echo "$user:defaultpass" | sudo chpasswd
    sudo usermod -a -G users $user
    echo "Created user: $user"
done

用户信息统计

# 统计用户数量
wc -l /etc/passwd

# 查看普通用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

# 查看系统用户
awk -F: '$3 < 1000 {print $1}' /etc/passwd

# 查看有登录Shell的用户
grep -v '/nologin\|/false' /etc/passwd

2. 权限检查脚本

检查文件权限

#!/bin/bash
# 检查敏感文件权限

files="/etc/passwd /etc/shadow /etc/sudoers"
for file in $files; do
    if [ -f "$file" ]; then
        perms=$(stat -c "%a" "$file")
        echo "$file: $perms"
        if [ "$file" = "/etc/shadow" ] && [ "$perms" != "640" ]; then
            echo "Warning: $file has incorrect permissions!"
        fi
    fi
done

安全最佳实践

1. 用户安全

密码策略

# 安装密码质量检查工具
sudo apt install libpam-pwquality    # Ubuntu/Debian
sudo yum install libpwquality         # CentOS/RHEL

# 配置密码策略 (/etc/security/pwquality.conf)
minlen = 8                    # 最小长度
minclass = 3                  # 最少字符类型
maxrepeat = 2                 # 最大重复字符

账户安全

# 禁用不必要的用户
sudo usermod -s /sbin/nologin username
sudo usermod -L username      # 锁定账户

# 设置账户过期
sudo chage -E 2024-12-31 username

# 强制用户修改密码
sudo chage -d 0 username

2. sudo安全

sudo配置建议

# 限制sudo权限
user ALL=(ALL) /usr/bin/systemctl restart nginx
user ALL=(ALL) !/bin/su, !/usr/bin/passwd root

# 使用sudo组而不是直接配置用户
%sudo ALL=(ALL:ALL) ALL

# 记录sudo活动
Defaults logfile="/var/log/sudo.log"
Defaults log_input,log_output

总结

用户和权限管理要点:

  1. 用户管理:掌握用户的创建、修改、删除操作
  2. 组管理:理解组的概念和组成员管理
  3. sudo配置:合理配置sudo权限,遵循最小权限原则
  4. 环境配置:了解用户环境变量和配置文件
  5. 安全实践:实施密码策略、权限审计和监控

下一课预告

在下一课中,我们将学习进程和服务管理,包括:

  • 进程概念和状态
  • 进程控制命令
  • 系统服务管理
  • 定时任务配置

💡 小贴士:用户和权限管理是Linux安全的核心。建议遵循最小权限原则,定期审计用户权限,及时清理不必要的账户。

Vue3 + TypeScript 企业级项目实战

课程推荐

Vue3 + TypeScript 企业级项目实战
Python 全栈开发工程师培训

热门课程

Python 全栈开发工程师培训

📚 文章对你有帮助?请关注我的公众号,万分感谢!

获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号

关注公众号

第一时间获取最新技术文章

添加微信

添加微信

技术交流 · 问题答疑 · 学习指导

评论讨论

欢迎留下你的想法和建议