免责声明:本文内容仅限于网络安全教学与学习研究,严禁用于任何非法用途。任何利用本文内容从事违法犯罪活动的行为,均严重违背本文初衷,属于使用者个人行为,与作者无关。请知法、懂法、守法,做良好公民。

Linux操作系统基础——包管理、进程管理、用户管理与权限管理

一、简介

Linux作为多用户多任务的操作系统,其核心管理能力涵盖软件包管理、进程管理、用户管理和权限管理四大模块。掌握这些基础知识是Linux系统运维和安全管理的前提。本文将从实际操作角度,系统梳理各模块的核心命令与配置文件,帮助读者快速建立Linux操作系统管理的知识体系。

二、包管理

2.1 包管理概述

大多数现代类Unix操作系统都提供了中心化的机制来搜索和安装软件。软件通常以包的形式存放在存储库中,包管理系统除了安装软件外,还提供了工具来更新已安装的包,确保系统中使用的代码是经过审查的。

不同Linux发行版使用不同的包格式和工具:

操作系统格式工具
Debian / Ubuntu.debapt, apt-cache, apt-get, dpkg
CentOS.rpmyum

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命令
apt-get updateapt update
apt-get dist-upgradeapt full-upgrade
apt-cache search stringapt search string
apt-get install packageapt install package
apt-get remove packageapt remove package
apt-get purge packageapt 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进程优先级
NInice值(负值高优先级,正值低优先级)
VIRT虚拟内存总量(KB),VIRT=SWAP+RES
RES物理内存大小(KB),RES=CODE+DATA
SHR共享内存大小(KB)
S进程状态
%CPUCPU占用百分比
%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种关系:

  1. 一对一:一个用户存在一个组中,是组中唯一成员
  2. 一对多:一个用户存在多个用户组中,具有多个组的共同权限
  3. 多对一:多个用户存在一个组中,具有相同权限
  4. 多对多:多个用户存在多个组中

4.2 UID和GID

Linux系统不认识用户名,只认识ID号。每个用户的ID分为两种:

  • UID(User ID):用户ID
  • GID(Group ID):组ID

UID范围划分:

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特点:

  1. 只有可执行文件才能设定SUID,对目录无效
  2. 用户需对该文件有x权限
  3. 执行时以文件所有者身份运行
  4. 只在执行过程中有效,执行完毕身份恢复
SGID — SetGID

当s出现在所属组的x权限位时,即为SGID权限。

SGID特点:

  1. 只对可执行文件有效
  2. 用户需对该文件有x权限
  3. 执行时用户群组身份变为文件所属群组
  4. 只在运行过程中有效

与SUID的区别:SUID赋予文件所有者权限,SGID赋予文件所属组权限。

SBIT — Sticky BIT

当t出现在其他人的x权限位时,即为SBIT权限(粘滞位/防删除位)。

作用:仅对目录有效。设定SBIT后,用户只能删除自己创建的文件,不能删除他人文件。

经典案例:/tmp目录权限777,但具有SBIT权限,用户无法删除他人创建的文件。

设置特殊权限

数字法:在rwx数字值前加特殊权限数字

特殊权限数字
SUID4
SGID2
SBIT1
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

六、经验总结

  1. 包管理:apt适合交互使用,脚本中用apt-get更稳定;生产环境升级前先在测试环境验证
  2. 进程管理:ps aux和top是日常排查的利器;发现僵尸进程要追查父进程,kill -9是最后手段
  3. 用户管理:/etc/passwd和/etc/shadow是用户管理的核心文件;锁定用户比删除更安全;定期检查shadow文件权限变化
  4. 权限管理:最小权限原则——默认不给写权限和执行权限;ACL弥补了传统3种身份的不足;SUID/SGID权限要谨慎授予,是提权攻击的常见目标
  5. 运维安全:在生产环境中,绝对不能所有用户都用root登录;合理分配用户等级和权限等级,是服务器安全的基础
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐