免责声明:本文内容仅限于网络安全教学与学习研究,严禁用于任何非法用途。任何利用本文内容从事违法犯罪活动的行为,均严重违背本文初衷,属于使用者个人行为,与作者无关。请知法、懂法、守法,做良好公民。
Linux操作系统基础——包管理、进程管理、用户管理与权限管理
一、简介
Linux作为多用户多任务的操作系统,其核心管理能力涵盖软件包管理、进程管理、用户管理和权限管理四大模块。掌握这些基础知识是Linux系统运维和安全管理的前提。本文将从实际操作角度,系统梳理各模块的核心命令与配置文件,帮助读者快速建立Linux操作系统管理的知识体系。
二、包管理
2.1 包管理概述
大多数现代类Unix操作系统都提供了中心化的机制来搜索和安装软件。软件通常以包的形式存放在存储库中,包管理系统除了安装软件外,还提供了工具来更新已安装的包,确保系统中使用的代码是经过审查的。
不同Linux发行版使用不同的包格式和工具:
| Debian / Ubuntu | .deb | apt, apt-cache, apt-get, dpkg |
| CentOS | .rpm | yum |
2.2 常用包管理命令
更新包列表
# Debian/Ubuntu
sudo apt update
# CentOS
sudo yum check-update
更新已安装的包
# Debian/Ubuntu
sudo apt upgrade # 只更新已安装的包
sudo apt full-upgrade # 可能增加或删除包以满足新依赖
# CentOS
sudo yum update
搜索包
# Debian/Ubuntu
apt search 关键词
# CentOS
yum search 关键词
yum search all 关键词 # 搜索所有字段包括描述
查看包信息
# Debian/Ubuntu
apt show 包名
dpkg -s 包名 # 显示包的当前安装状态
# CentOS
yum info 包名
yum deplist 包名 # 列出包的依赖
安装包
# Debian/Ubuntu
sudo apt install 包名
sudo apt install 包1 包2 # 安装多个包
sudo apt install -y 包名 # 自动确认
# CentOS
sudo yum install 包名
sudo yum install -y 包名
从本地文件安装
# Debian/Ubuntu
sudo dpkg -i package.deb
# 使用gdebi处理缺失依赖
sudo apt install -y gdebi && sudo gdebi package.deb
# CentOS
sudo yum install package.rpm
删除包
# Debian/Ubuntu
sudo apt remove 包名
sudo apt autoremove # 删除不需要的依赖包
# CentOS
sudo yum remove 包名
2.3 apt与apt-get对照
| apt-get update | apt update |
| apt-get dist-upgrade | apt full-upgrade |
| apt-cache search string | apt search string |
| apt-get install package | apt install package |
| apt-get remove package | apt remove package |
| apt-get purge package | apt purge package |
提示:apt通常是为交互式使用设计的快捷方式,在脚本或shell管道中建议使用apt-get和apt-cache,接口更稳定。
三、进程管理
3.1 进程相关概念
- 程序:二进制文件,静态存在,如 /bin/date、/usr/sbin/sshd
- 进程:程序运行的过程,动态,有生命周期及运行状态
进程的生命周期:父进程通过fork创建子进程,每个新进程分配唯一的PID(进程ID)。
- CentOS 5/6 中PID为1的进程是:init
- CentOS 7+ 中PID为1的进程是:systemd

3.2 进程的类型
| 僵尸进程 | 子进程退出后父进程未调用wait/waitpid获取状态,进程描述符仍保留在系统中 |
| 交互进程 | 由Shell启动,可在前台或后台运行 |
| 批量处理进程 | 与终端无关的进程序列 |
| 守护进程 | 系统启动时启动并在后台运行的进程 |
| 超级守护进程 | 由xinetd统一管理,请求到来时才唤醒 |
3.3 进程的属性
- 进程ID(PID):唯一数值,区分进程
- 进程状态:运行R(running)、休眠S(sleep)、僵尸Z(zombie)
3.4 进程相关命令
ps — 查看进程
ps aux # 显示所有进程的详细信息
ps -ef # 简洁格式查看所有进程
ps aux输出各列含义:
| USER | 启动进程的用户 |
| PID | 进程ID |
| %CPU | 占用CPU百分比 |
| %MEM | 占用内存百分比 |
| VSZ | 虚拟内存大小(KB) |
| RSS | 物理内存大小(KB) |
| STAT | 进程状态 |
| START | 进程启动时间 |
| TIME | 实际使用CPU时间 |
| COMMAND | 进程命令 |
STAT状态字母含义:
| R | 正在运行或可被运行 |
| S | 睡眠中,可被信号唤醒 |
| T | 停止或被跟踪 |
| Z | 僵尸进程 |
| D | 不可中断状态 |
| < | 高优先级 |
| N | 低优先级 |
| s | 控制进程 |
| l | 多线程 |
| + | 前台运行 |
注意:[xxxx]方括号括起来的是内核态进程,没有括号的是用户态进程。
uptime — 查看系统负载
uptime
输出示例:05:41:34 up 6:11, 3 users, load average: 0.06, 0.02, 0.00
- 当前服务器时间
- 服务器运行时长
- 当前用户数
- 系统平均负载(1分钟、5分钟、15分钟均值)
判断标准:如果每个CPU内核的活动进程数不大于3,系统性能良好;大于5则有严重问题。双核CPU时Load Average为6说明已被充分使用。
top — 动态监控进程
top

top界面各行含义:
| 第1行 | 系统时间、运行时间、登录终端数、系统负载 |
| 第2行 | 进程总数、运行中、睡眠中、停止、僵死数 |
| 第3行 | CPU使用率(用户/系统/空闲等百分比) |
| 第4行 | 物理内存总量、使用量、空闲量、缓存量 |
| 第5行 | 虚拟内存总量、使用量、空闲量 |
top界面进程列表各列含义:
| PID | 进程ID |
| USER | 进程所有者 |
| PR | 进程优先级 |
| NI | nice值(负值高优先级,正值低优先级) |
| VIRT | 虚拟内存总量(KB),VIRT=SWAP+RES |
| RES | 物理内存大小(KB),RES=CODE+DATA |
| SHR | 共享内存大小(KB) |
| S | 进程状态 |
| %CPU | CPU占用百分比 |
| %MEM | 内存占用百分比 |
| TIME+ | CPU时间总计(1/100秒) |
| COMMAND | 进程名称 |
lsof — 查看进程打开的文件和端口
lsof -i :80 # 查看80端口占用
lsof -i @192.168.1.1 # 查看特定IP的连接
lsof -p PID # 查看指定进程打开的文件

pstree — 树状显示进程
pstree -apnh # 显示进程间关系
pstree -u # 显示用户名称
kill — 终止进程
kill PID # 正常终止进程
kill -9 PID # 强制终止进程
killall -9 进程名 # 强制杀死同名进程
pkill 进程名 # 按名称模式匹配杀死进程
注意:kill -9强制终止时进程没有时机清理现场,可能导致数据丢失,谨慎使用。
四、用户管理
4.1 用户与用户组
Linux是多用户多任务操作系统,支持多个用户同时登录,不同用户执行不同任务且互不影响。每个用户在权限允许的范围内完成任务,通过权限划分与管理实现多用户多任务运行机制。
用户与用户组的4种关系:
4.2 UID和GID
Linux系统不认识用户名,只认识ID号。每个用户的ID分为两种:
- UID(User ID):用户ID
- GID(Group ID):组ID


UID范围划分:
| 0 | 超级用户(root) |
| 1~499 | 系统用户(伪用户),199系统自行创建,100499分配给有系统账号需求的用户 |
| 500~65535 | 普通用户(2.6.x内核后可支持2^32个UID) |
4.3 用户配置文件
/etc/passwd — 用户基本信息

每行记录对应一个用户,以:分隔为7个字段:
用户名:密码:UID:GID:用户说明:主目录:默认Shell
各字段说明:
| 用户名 | 登录名 |
| 密码 | 通常为x或*,实际密码存储在/etc/shadow |
| UID | 用户唯一数字标识,0为root |
| GID | 初始组ID |
| 用户说明 | 描述性信息 |
| 主目录 | 登录后默认工作目录(root为/root,普通用户为/home/用户名) |
| 默认Shell | 命令解释器,/bin/bash为默认,/sbin/nologin禁止登录 |
关键点:将Shell改为/sbin/nologin可禁止用户登录;改为/usr/bin/passwd则用户登录后只能修改密码。
/etc/shadow — 用户密码信息

只有root用户有读权限,每行以:分隔为9个字段:
用户名:加密密码:最后修改时间:最小修改间隔:密码有效期:警告天数:宽限天数:账号失效时间:保留字段
| 加密密码 | SHA512散列加密,!!或*表示无密码不能登录,前加!使密码失效 |
| 最后修改时间 | 自1970年1月1日起的天数 |
| 最小修改间隔 | 0表示随时可修改,10表示修改后10天内不能再次修改 |
| 密码有效期 | 默认99999(永不过期),90表示90天后必须修改 |
| 警告天数 | 默认7,密码过期前7天开始警告 |
| 宽限天数 | 密码过期后的宽限期,0立即失效,-1永不过期 |
| 账号失效时间 | 超过此时间账号禁用 |
安全提示:如果此文件权限发生改变,需注意是否为恶意攻击。
/etc/group — 用户组信息

每行以:分隔为4个字段:
组名:密码:GID:组内用户列表
注意:该字段显示的用户都是附加用户,初始组用户不会出现在此字段中。
/etc/gshadow — 组密码信息

每行以:分隔为4个字段:
组名:加密密码:组管理员:组附加用户列表
4.4 用户管理命令
useradd — 创建用户
useradd [选项] 用户名
| -u UID | 手工指定UID |
| -d 主目录 | 手工指定主目录(绝对路径) |
| -c 用户说明 | 描述性内容 |
| -g 组名 | 指定初始组 |
| -G 组名 | 指定附加组 |
| -s shell | 指定登录Shell,默认/bin/bash |
| -e 日期 | 指定失效日期(YYYY-MM-DD) |
| -m | 强制建立家目录 |
| -r | 创建系统用户(UID 1~499) |

创建用户后,系统会自动在 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 中写入相关信息,并在 /home 目录下创建用户主目录。
passwd — 设置密码
passwd [选项] 用户名
| -S | 查询密码状态(仅root) |
| -l | 锁定用户(仅root) |
| -u | 解锁用户(仅root) |
| –stdin | 从管道读取密码(批量添加用户时使用) |
| -n 天数 | 修改后多少天内不能再次修改 |
| -x 天数 | 密码有效期 |
| -w 天数 | 过期前警告天数 |
| -i 日期 | 密码失效日期 |

usermod — 修改用户
usermod [选项] 用户名
| -c 说明 | 修改用户说明 |
| -d 主目录 | 修改主目录 |
| -e 日期 | 修改失效日期 |
| -g 组名 | 修改初始组 |
| -u UID | 修改UID |
| -G 组名 | 修改附加组 |
| -l 用户名 | 修改用户名 |
| -L | 锁定用户 |
| -U | 解锁用户 |
| -s shell | 修改登录Shell |
锁定用户就是在shadow文件密码字段前加入!。
userdel — 删除用户
userdel -r 用户名 # -r表示同时删除主目录和邮箱
id — 查询用户信息
id 用户名 # 查询UID、GID和附加组信息
su — 切换用户
su [选项] 用户名
| – | 切换身份同时切换工作环境(省略用户名默认切换为root) |
| -l | 同-,需指定用户名 |
| -p / -m | 切换身份但不改变工作环境 |
| -c 命令 | 仅切换用户执行一次命令,执行后自动切回 |
whoami — 查看当前用户
whoami # 打印当前执行操作的用户名
who am i # 打印登录系统的用户名(两者不同!)

4.5 用户组管理命令
groupadd — 创建组
groupadd [选项] 组名
| -g GID | 指定组ID |
| -r | 创建系统群组 |

groupmod — 修改组
groupmod [选项] 组名
| -g GID | 修改组ID |
| -n 新组名 | 修改组名 |

groupdel — 删除组
groupdel 组名

注意:只能删除“不是任何用户初始组”的群组。如果某群组仍是用户的初始组,则无法删除,需先修改用户GID或删除该用户。

gpasswd — 组管理员
gpasswd [选项] 组名
| (空) | 设置群组密码(仅root) |
| -A user1,… | 设置群组管理员(仅root) |
| -M user1,… | 将用户加入群组(仅root) |
| -r | 移除群组密码(仅root) |
| -R | 让群组密码失效(仅root) |
| -a user | 将用户加入群组 |
| -d user | 将用户从群组移除 |
五、权限管理
5.1 权限位详解

每行第一列表示文件权限,共11位(第1位为文件类型,最后1位为SELinux标记),核心权限为中间9位:

9位权限分为3组,分别对应:
| 文件所有者 | u (user) | 文件的创建者 |
| 所属组 | g (group) | 文件所属的群组 |
| 其他人 | o (other) | 不属于以上两类的用户 |
每组3个权限位:r(读)= 4,w(写)= 2,x(执行)= 1
5.2 chmod — 修改权限
数字法:
chmod 755 filename # rwxr-xr-x
chmod 644 filename # rw-r–r–
chmod -R 755 dirname # 递归修改目录及子文件
计算示例:rwxrw-r-x → 所有者(4+2+1=7) 所属组(4+2=6) 其他人(4+1=5) → 765

字母法:
chmod u+x filename # 所有者添加执行权限
chmod g-w filename # 所属组去掉写权限
chmod o=r filename # 其他人设为只读
chmod a+x filename # 所有人添加执行权限


5.3 chgrp — 修改所属组
chgrp [-R] 所属组 文件名
- -R:递归修改目录及其子文件的所属组
- 群组名必须真实存在,否则报错

5.4 chown — 修改所有者
# 仅修改所有者
chown [-R] 所有者 文件名
# 同时修改所有者和所属组(建议用冒号连接)
chown [-R] 所有者:所属组 文件名
# 仅修改所属组
chown :所属组 文件名


注意:建议用冒号:连接所有者和所属组,避免用点.(用户名含点时可能误判)。目标用户/组必须存在。
5.5 umask — 默认权限掩码
umask # 查看当前权限掩码

- root用户默认:0022
- 普通用户默认:0002
权限计算公式:
文件初始权限 = 666 – umask后三位
目录初始权限 = 777 – umask后三位
- 文件最大默认权限为666(rw-rw-rw-),新建文件不赋予执行权限
- 目录最大默认权限为777(rwxrwxrwx)
目录权限计算示例(umask=0022):

777 – 022 = 755(rwxr-xr-x)
文件权限计算示例(umask=0022):

666 – 022 = 644(rw-r–r–)
临时修改umask:
umask 0033 # 临时修改,重启后失效

永久修改umask:
修改 /etc/profile 文件中的umask设置。

5.6 ACL权限 — 访问控制列表
传统权限只有3种身份(所有者、所属组、其他人),无法对单个用户精确控制。ACL(Access Control List)可实现对单一用户设定访问权限。

典型场景:项目目录需要给试听学员r-x权限,但不能给w权限,传统3种身份无法满足。
获取ACL权限:
getfacl 文件名
设置ACL权限:
setfacl [选项] 文件名
| -m u:用户名:权限 | 设定用户ACL权限,如setfacl -m u:st:rx /project |
| -m g:组名:权限 | 设定组ACL权限,如setfacl -m g:tgroup:rx /project |
| -x u:用户名 | 删除指定用户的ACL权限 |
| -b | 删除所有ACL权限 |
| -d | 设定默认ACL权限(目录新建文件继承) |
| -R | 递归设定ACL权限 |
| -k | 删除默认ACL权限 |

5.7 特殊权限
SUID — SetUID

当s出现在文件所有者的x权限位时,即为SUID权限。
作用:用户执行该文件时,以文件所有者身份执行,执行完毕后身份恢复。
经典案例:/usr/bin/passwd命令具有SUID权限,普通用户执行passwd时以root身份运行,才能写入/etc/shadow文件。
SUID特点:
SGID — SetGID

当s出现在所属组的x权限位时,即为SGID权限。
SGID特点:
与SUID的区别:SUID赋予文件所有者权限,SGID赋予文件所属组权限。
SBIT — Sticky BIT

当t出现在其他人的x权限位时,即为SBIT权限(粘滞位/防删除位)。
作用:仅对目录有效。设定SBIT后,用户只能删除自己创建的文件,不能删除他人文件。
经典案例:/tmp目录权限777,但具有SBIT权限,用户无法删除他人创建的文件。

设置特殊权限
数字法:在rwx数字值前加特殊权限数字
| SUID | 4 |
| SGID | 2 |
| SBIT | 1 |
chmod 4755 filename # SUID + rwxr-xr-x
chmod 6755 filename # SUID+SGID + rwxr-xr-x
chmod 3755 dirname # SGID+SBIT + rwxr-xr-x



字母法:
chmod u+s filename # 添加SUID
chmod g+s filename # 添加SGID
chmod o+t dirname # 添加SBIT
chmod u-s filename # 移除SUID



