欢迎光临
我们一直在努力

Linux操作系统基础

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

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命令
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范围划分:

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

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

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

    SGID特点:

  • 只对可执行文件有效
  • 用户需对该文件有x权限
  • 执行时用户群组身份变为文件所属群组
  • 只在运行过程中有效
  • 与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

    六、经验总结

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

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址