大连市网站建设_网站建设公司_自助建站_seo优化
2026/1/18 13:39:55 网站建设 项目流程

前言

在多用户操作系统中,用户管理和权限控制是保障系统安全的核心机制。Linux作为一个多用户、多任务的操作系统,拥有完善的用户权限管理体系。理解用户和组的概念,掌握权限设置方法,是每个Linux管理员必备的技能。本文将系统讲解Linux的用户管理机制、权限模型和提权方法,帮助你建立完整的安全管理知识体系。

文章目录

  • 前言
  • 一、Linux用户和组基础
    • 1.1 用户和组的概念
    • 1.2 查看用户信息
    • 1.3 查看登录用户
    • 1.4 查看用户进程
    • 1.5 用户切换
    • 1.6 用户间通信
  • 二、用户配置文件详解
    • 2.1 /etc/passwd - 用户信息文件
    • 2.2 /etc/shadow - 密码文件
    • 2.3 /etc/group - 组信息文件
  • 三、用户管理操作
    • 3.1 添加用户 - useradd命令
    • 3.2 设置用户密码 - passwd命令
    • 3.3 Shell类型的影响
    • 3.4 删除用户
  • 四、权限管理基础
    • 4.1 权限提升 - sudo命令
    • 4.2 配置sudo权限 - sudoers文件
    • 4.3 文件权限模型 - UGO
    • 4.4 修改权限 - chmod命令
    • 4.5 修改所有者 - chown命令
    • 4.6 修改属组 - chgrp命令
  • 五、权限管理实战案例
    • 5.1 创建共享目录
    • 5.2 保护敏感文件
    • 5.3 设置脚本可执行
    • 5.4 修复权限问题
  • 六、常见问题与解决方案
    • 6.1 sudo权限被拒绝
    • 6.2 权限不足无法操作文件
    • 6.3 SSH登录后Shell功能受限
    • 6.4 忘记root密码
  • 七、安全最佳实践
    • 7.1 用户管理安全建议
    • 7.2 权限管理安全建议
  • 总结
    • 核心知识点回顾
    • 学习建议
    • 下一步学习

一、Linux用户和组基础

1.1 用户和组的概念

用户(User):

  • Linux系统中的账户标识
  • 每个用户拥有唯一的用户ID(UID)
  • 用户信息存储在/etc/passwd文件中
  • 用户密码存储在/etc/shadow文件中(加密)

组(Group):

  • 用户的集合,用于批量管理权限
  • 每个组拥有唯一的组ID(GID)
  • 组信息存储在/etc/group文件中
  • 一个用户可以属于多个组

用户分类:

  1. root用户: 超级管理员,UID=0,拥有最高权限
  2. 系统用户: UID通常为1-999,运行系统服务
  3. 普通用户: UID通常从1000开始,日常使用的账户

1.2 查看用户信息

查看当前用户信息 - id命令

id

输出示例:

uid=1000(kali) gid=1000(kali) groups=1000(kali),27(sudo),118(docker)

输出解释:

  • uid=1000(kali): 用户ID为1000,用户名是kali
  • gid=1000(kali): 主组ID为1000,组名是kali
  • groups=...: 所属的所有组(主组+附加组)

查看指定用户信息:

idkali# 查看kali用户信息idroot# 查看root用户信息idusername# 查看任意用户信息

查看root用户信息示例:

idroot# uid=0(root) gid=0(root) groups=0(root)

可以看到root用户的UID和GID都是0,这是系统最高权限的标识。

1.3 查看登录用户

who命令 - 查看当前登录用户

who

输出示例:

kali tty1 2024-01-15 10:30 admin pts/0 2024-01-15 11:45 (192.168.1.100) user1 pts/1 2024-01-15 12:20 (10.0.0.50)

输出解释:

  • 第一列: 用户名
  • 第二列: 终端类型(tty是本地终端,pts是远程终端)
  • 第三列: 登录时间
  • 第四列: 登录来源IP(远程登录时显示)

其他查看登录的命令:

w# 显示谁登录了以及他们在做什么users# 显示当前登录的用户名列表last# 显示最近登录的用户历史lastlog# 显示所有用户最后登录时间

w命令示例(更详细):

w

输出:

14:30:25 up 3 days, 5:20, 3 users, load average: 0.15, 0.20, 0.18 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT kali tty1 - 10:30 3:59 0.50s 0.50s -bash admin pts/0 192.168.1.100 11:45 0.00s 0.30s 0.01s w

1.4 查看用户进程

查看所有进程 - ps命令

psaux|less

命令解析:

  • ps: 进程状态命令
  • a: 显示所有用户的进程
  • u: 以用户为主的格式显示
  • x: 显示没有控制终端的进程
  • | less: 分页查看

输出示例:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 169104 11492 ? Ss Jan10 0:05 /sbin/init kali 1234 0.5 2.3 456789 98765 pts/0 S+ 14:20 0:10 python3 script.py

查看特定用户的进程:

psaux|grepkali# 查看kali用户的进程psaux|greproot# 查看root用户的进程psaux|grep[用户名]# 查看指定用户的进程

查看SSH相关进程:

psaux|grepssh

输出示例:

root 1234 0.0 0.1 12345 6789 ? Ss 10:30 0:00 /usr/sbin/sshd -D kali 5678 0.0 0.2 23456 8901 ? S 11:45 0:00 sshd: kali@pts/0

这可以看到谁通过SSH登录了系统。

1.5 用户切换

切换用户 - su命令

suusername# 切换到指定用户(需要输入该用户密码)su- username# 切换用户并加载其环境变量su# 切换到root用户(需要root密码)su-# 切换到root并加载环境exit# 退出当前用户,返回之前的用户

实际操作示例:

# 当前是kali用户id# uid=1000(kali) gid=1000(kali)# 切换到root用户suroot# 输入root密码# 验证切换成功id# uid=0(root) gid=0(root)# 退出root,返回kaliexit# 再次验证id# uid=1000(kali) gid=1000(kali)

su vs su -的区别:

suusername# 只切换用户,保留当前环境变量su- username# 切换用户并加载目标用户的环境变量(推荐)

1.6 用户间通信

wall命令 - 向所有登录用户发送消息

wall'System will reboot in 5 minutes'wall'haha'

效果: 所有登录的用户终端都会收到这条消息。

其他通信命令:

writeusername# 向特定用户发送消息mesg n# 禁止接收消息mesg y# 允许接收消息

二、用户配置文件详解

2.1 /etc/passwd - 用户信息文件

这个文件存储所有用户的基本信息,每个用户占一行。

查看文件:

cat/etc/passwd

文件格式(冒号分隔):

username:x:UID:GID:comment:home_directory:shell

实际示例:

root:x:0:0:root:/root:/bin/bash kali:x:1000:1000:Kali User:/home/kali:/bin/bash nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

字段说明:

位置字段说明示例
1用户名登录系统的用户名root, kali
2密码占位符总是x,实际密码在/etc/shadowx
3UID用户ID0(root), 1000(普通用户)
4GID主组ID0, 1000
5注释用户描述信息Kali User
6家目录用户主目录/home/kali
7Shell登录后使用的Shell/bin/bash, /bin/sh

重要说明:

  • UID=0 表示root权限
  • /usr/sbin/nologin/bin/false表示禁止登录
  • 系统用户通常家目录为/nonexistent或特定服务目录

2.2 /etc/shadow - 密码文件

这个文件存储加密后的用户密码,只有root用户可以读取。

查看文件(需要root权限):

sudocat/etc/shadow

文件格式:

username:encrypted_password:last_change:min:max:warn:inactive:expire:reserved

实际示例:

root:$6$xyz...(加密密码):19000:0:99999:7::: kali:$6$abc...(加密密码):19010:0:99999:7::: user1:!:19020:0:99999:7:::

字段说明:

字段说明
用户名对应/etc/passwd中的用户
加密密码$6$开头表示SHA-512加密,!*表示账户被锁定
最后修改密码最后修改日期(从1970-01-01起的天数)
最小间隔两次密码修改之间的最小天数
最大间隔密码有效期(天)
警告期密码过期前警告天数
不活跃期密码过期后账户被禁用的天数
过期日期账户过期日期

2.3 /etc/group - 组信息文件

查看文件:

cat/etc/group

文件格式:

groupname:x:GID:user_list

实际示例:

root:x:0: sudo:x:27:kali,admin docker:x:118:kali,user1 kali:x:1000:

字段说明:

  • groupname: 组名
  • x: 组密码占位符
  • GID: 组ID
  • user_list: 该组的成员用户列表(逗号分隔)

三、用户管理操作

3.1 添加用户 - useradd命令

基本语法:

useradd[选项]用户名

常用选项:

选项功能示例
-u指定UID-u 1020
-g指定主组GID-g 1000
-G指定附加组-G sudo,docker
-c添加注释信息-c "Test User"
-d指定家目录-d /home/user1
-s指定登录Shell-s /bin/bash
-r创建系统用户-r
-m创建家目录-m

创建用户完整示例:

# 创建用户user1,指定各项参数sudouseradd-u1020-g1000-c"Test User Description"-d /home/user1 -s /bin/bash -Gsudo-m user1

命令解析:

  • -u 1020: UID设为1020
  • -g 1000: 主组GID为1000(kali组)
  • -c "Test User Description": 添加描述信息
  • -d /home/user1: 家目录为/home/user1
  • -s /bin/bash: 使用bash作为登录Shell
  • -G sudo: 将用户添加到sudo附加组
  • -m: 自动创建家目录
  • user1: 用户名

验证用户创建:

iduser1# uid=1020(user1) gid=1000(kali) groups=1000(kali),27(sudo)cat/etc/passwd|grepuser1# user1:x:1020:1000:Test User Description:/home/user1:/bin/bashls-ld /home/user1# drwxr-xr-x 2 user1 kali 4096 Jan 15 14:00 /home/user1

3.2 设置用户密码 - passwd命令

为新用户设置密码:

sudopasswduser1

系统会提示:

New password: (输入新密码,不显示) Retype new password: (再次输入) passwd: password updated successfully

passwd命令选项:

passwd# 修改当前用户密码sudopasswduser1# 修改user1的密码sudopasswd-l user1# 锁定用户账户sudopasswd-u user1# 解锁用户账户sudopasswd-d user1# 删除用户密码(危险)sudopasswd-e user1# 强制用户下次登录时修改密码

3.3 Shell类型的影响

常见Shell类型:

Shell路径特点
Bash/bin/bash功能强大,最常用
Sh/bin/sh基础Shell,功能有限
Zsh/bin/zsh现代Shell,功能丰富
Nologin/usr/sbin/nologin禁止登录

Shell差异示例:

使用SSH登录后,如果Shell是/bin/sh:

  • 无法使用命令历史(上下箭头)
  • 无法使用Tab补全
  • 提示符简陋:$而不是user@host:~$
  • 权限受限,某些命令不可用

修改用户Shell:

# 查看当前Shellecho$SHELL# 修改用户Shellsudousermod-s /bin/bash user1# 或直接编辑/etc/passwd文件(不推荐)sudovi/etc/passwd# 将user1行的最后字段从/bin/sh改为/bin/bash

3.4 删除用户

userdel命令:

sudouserdeluser1# 删除用户,保留家目录sudouserdel-r user1# 删除用户及其家目录sudouserdel-f user1# 强制删除(即使用户已登录)

注意事项:

  • 删除前确认用户没有重要数据
  • -r选项会删除家目录和邮件
  • 建议先备份重要文件

四、权限管理基础

4.1 权限提升 - sudo命令

sudo的概念:

  • sudo(Super User Do): 以超级用户权限执行命令
  • 允许普通用户临时获得root权限
  • 需要输入当前用户密码(不是root密码)
  • 更安全,有审计日志

基本用法:

sudocommand# 以root权限执行命令sudoaptupdate# 更新软件包sudovim/etc/hosts# 编辑系统文件sudo-i# 切换到root环境sudosu# 直接切换到root用户sudo-u usernamecommand# 以指定用户身份执行命令

查看sudo权限:

sudo-l

输出示例:

User kali may run the following commands on localhost: (ALL : ALL) ALL

输出解释:

  • (ALL : ALL): 可以以任何用户和组的身份执行
  • ALL: 可以执行所有命令

4.2 配置sudo权限 - sudoers文件

编辑sudoers文件(务必使用visudo):

sudovisudo

为什么用visudo:

  • 自动检查语法错误
  • 防止配置错误导致无法使用sudo
  • 使用锁机制防止多人同时编辑

sudoers文件格式:

用户名 主机=(运行用户) 命令

常见配置示例:

# root用户拥有所有权限rootALL=(ALL:ALL)ALL# sudo组成员拥有所有权限%sudoALL=(ALL:ALL)ALL# 允许kali用户无密码执行所有命令(不安全,不推荐)kaliALL=(ALL)NOPASSWD: ALL# 允许user1只能执行特定命令user1ALL=(ALL)/usr/bin/apt, /usr/bin/systemctl# 允许admin用户以任何用户身份执行命令adminALL=(ALL:ALL)ALL

配置说明:

  • %表示组名
  • NOPASSWD:表示不需要密码
  • 具体命令需要写完整路径

添加用户到sudo组:

sudousermod-aGsudouser1# 或sudogpasswd -a user1sudo

4.3 文件权限模型 - UGO

Linux使用UGO权限模型:

  • U (User): 文件属主(owner)
  • G (Group): 文件属组(group)
  • O (Others): 其他人

权限类型:

符号数字对文件的意义对目录的意义
r4读取文件内容列出目录内容(ls)
w2修改文件内容在目录中创建/删除文件
x1执行文件进入目录(cd)
-0无权限无权限

查看权限:

ls-l filename

输出示例:

-rw-r--r-- 1 kali kali 1234 Jan 15 14:00 test.txt

权限解析:

- rw- r-- r-- ^ ^ ^ ^ | | | | 类型 属主 属组 其他人 - : 普通文件 rw- : 属主可读可写(4+2=6) r-- : 属组只读(4) r-- : 其他人只读(4)

4.4 修改权限 - chmod命令

数字方式(推荐):

chmod755filenamechmod644filenamechmod777filename

数字计算:

  • 7 = 4+2+1 = rwx(读+写+执行)
  • 6 = 4+2 = rw-(读+写)
  • 5 = 4+1 = r-x(读+执行)
  • 4 = r--(只读)
  • 0 = ---(无权限)

常用权限组合:

权限数字说明适用
rwxr-xr-x755所有人可读可执行,只有属主可写可执行文件、目录
rw-r--r--644所有人可读,只有属主可写普通文件
rwx------700只有属主有全部权限私密文件
rw-------600只有属主可读写配置文件、密钥
rwxrwxrwx777所有人可读可写可执行危险,不推荐

符号方式:

chmodu+x filename# 给属主添加执行权限chmodg-w filename# 去除属组的写权限chmodo+r filename# 给其他人添加读权限chmoda+x filename# 给所有人添加执行权限(a=all)chmoda=rwx filename# 所有人设为可读可写可执行chmoda=- filename# 所有人无任何权限chmodu=rw,g=r,o=filename# 分别设置各项权限

符号说明:

  • u: user(属主)
  • g: group(属组)
  • o: others(其他人)
  • a: all(所有人)
  • +: 添加权限
  • -: 移除权限
  • =: 设置权限(覆盖)

递归修改权限:

chmod-R755directory/# 递归修改目录及其内容

4.5 修改所有者 - chown命令

修改属主:

sudochownusername filenamesudochownkali test.txt

修改属组:

sudochown:groupname filenamesudochown:sudo test.txt

同时修改属主和属组:

sudochownusername:groupname filenamesudochownkali:kali test.txt

递归修改:

sudochown-R username:groupname directory/sudochown-R kali:kali /home/kali/project/

实用示例:

# 将文件所有权转给user1sudochownuser1 file.txt# 将目录及其内容所有权转给user1sudochown-R user1:user1 /home/user1/# 只修改组sudochown:developers project.txt# 查看修改结果ls-l file.txt

4.6 修改属组 - chgrp命令

sudochgrpgroupname filenamesudochgrpsudotest.txtsudochgrp-R developers /var/www/

注意:chgrpchown :groupname效果相同,但chown更常用。


五、权限管理实战案例

5.1 创建共享目录

场景: 创建一个开发团队共享目录

# 1. 创建共享目录sudomkdir/opt/shared# 2. 创建开发组sudogroupadddevelopers# 3. 将团队成员添加到组sudousermod-aG developers user1sudousermod-aG developers user2# 4. 修改目录所有权sudochown:developers /opt/shared# 5. 设置权限(组成员可读写执行)sudochmod775/opt/shared# 6. 设置特殊权限(新文件自动继承组)sudochmodg+s /opt/shared# 7. 验证ls-ld /opt/shared# drwxrwsr-x 2 root developers 4096 Jan 15 15:00 /opt/shared

5.2 保护敏感文件

# 1. 创建SSH密钥(示例)ssh-keygen -t rsa# 2. 设置私钥权限(只有属主可读)chmod600~/.ssh/id_rsa# 3. 设置公钥权限chmod644~/.ssh/id_rsa.pub# 4. 设置.ssh目录权限chmod700~/.ssh# 5. 验证ls-la ~/.ssh/# drwx------ 2 kali kali 4096 Jan 15 15:10 .# -rw------- 1 kali kali 1234 Jan 15 15:10 id_rsa# -rw-r--r-- 1 kali kali 567 Jan 15 15:10 id_rsa.pub

5.3 设置脚本可执行

# 1. 创建脚本cat>backup.sh<<'EOF' #!/bin/bash echo "Running backup..." tar -czf backup.tar.gz /home/user/documents EOF# 2. 添加执行权限chmod+x backup.sh# 或chmod755backup.sh# 3. 验证ls-l backup.sh# -rwxr-xr-x 1 kali kali 123 Jan 15 15:20 backup.sh# 4. 执行./backup.sh

5.4 修复权限问题

# 场景:Apache无法读取网站文件# 1. 修改网站目录所有权sudochown-R www-data:www-data /var/www/html/# 2. 设置目录权限sudofind/var/www/html/ -type d -execchmod755{}\;# 3. 设置文件权限sudofind/var/www/html/ -type f -execchmod644{}\;# 4. 重启服务sudosystemctl restart apache2

六、常见问题与解决方案

6.1 sudo权限被拒绝

问题:

sudocommand# user is not in the sudoers file. This incident will be reported.

解决:

# 方法1: 将用户添加到sudo组surootusermod-aGsudousernameexit# 方法2: 直接编辑sudoers(需要root)suroot visudo# 添加: username ALL=(ALL:ALL) ALL

6.2 权限不足无法操作文件

问题:

echo"test">/etc/test.conf# bash: /etc/test.conf: Permission denied

解决:

# 使用sudosudobash-c'echo "test" > /etc/test.conf'# 或echo"test"|sudotee/etc/test.conf

6.3 SSH登录后Shell功能受限

问题: SSH登录后无法使用Tab补全、命令历史等

原因: 用户Shell设置为/bin/sh

解决:

# 修改用户Shell为bashsudousermod-s /bin/bash username# 或编辑/etc/passwdsudovi/etc/passwd# 将对应用户行的/bin/sh改为/bin/bash

6.4 忘记root密码

解决方法(需要物理访问或控制台):

  1. 重启进入单用户模式或恢复模式
  2. 挂载文件系统为可写
  3. 使用passwd命令重置密码

预防措施:

  • 至少保留一个有sudo权限的用户
  • 记录密码或使用密码管理器

七、安全最佳实践

7.1 用户管理安全建议

  1. 禁用root直接登录:
# 编辑SSH配置sudovi/etc/ssh/sshd_config# 设置: PermitRootLogin nosudosystemctl restart sshd
  1. 使用强密码策略:
# 安装密码质量检查库sudoaptinstalllibpam-pwquality# 配置密码策略sudovi/etc/security/pwquality.conf
  1. 定期审查用户:
# 查看所有用户cat/etc/passwd# 查看最近登录last# 查看失败的登录尝试sudolastb
  1. 删除不需要的用户:
sudouserdel-r unused_user

7.2 权限管理安全建议

  1. 最小权限原则: 只给必要的权限
  2. 避免777权限: 除非确实需要
  3. 保护敏感文件:
chmod600~/.ssh/id_rsachmod600~/.gnupg/*chmod400/etc/shadow# 系统自动设置
  1. 使用sudo而不是root: 有审计日志,更安全

  2. 定期审查权限:

# 查找777权限文件(危险)find/ -type f -perm 07772>/dev/null# 查找SUID文件find/ -perm -40002>/dev/null

总结

核心知识点回顾

  1. 用户和组概念:
    • 用户信息:/etc/passwd
    • 密码信息:/etc/shadow
    • 组信息:/etc/group
    • root用户UID=0,拥有最高权限
  2. 用户管理命令:
    • id: 查看用户信息
    • who: 查看登录用户
    • useradd: 添加用户
    • passwd: 设置密码
    • userdel: 删除用户
  3. 权限提升:
    • sudo: 临时提权
    • su: 切换用户
    • visudo: 配置sudo权限
  4. 权限模型UGO:
    • U(User): 属主
    • G(Group): 属组
    • O(Others): 其他人
    • 权限: r(4)、w(2)、x(1)
  5. 权限管理命令:
    • chmod: 修改权限
    • chown: 修改所有者
    • chgrp: 修改属组

学习建议

  1. 理解概念: 清楚理解用户、组、权限的关系
  2. 实践操作: 在虚拟机中创建用户,设置权限
  3. 安全意识: 遵循最小权限原则
  4. 熟记数字: 记住常用权限数字(755、644、600等)
  5. 查看帮助: 使用man useraddman chmod学习详细用法

下一步学习

掌握了用户和权限管理后,接下来将学习:

  • 用户和组的高级操作: 批量管理、密码策略
  • 进程管理: 进程查看、控制和调度
  • 链接文件: 硬链接和软链接的使用
  • 网络配置: SSH配置和远程管理

用户管理和权限控制是Linux系统安全的基石。通过本文的学习和实践,相信你已经建立了完整的权限管理知识体系。继续深入学习,打造安全可靠的Linux系统!


系列文章说明: 本文是"Linux零基础入门系列"的第五部分,专注于用户管理和权限控制。建议结合前面的文件系统、文件管理和文本编辑知识,系统掌握Linux系统管理技能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询