免责声明:本文内容仅限于网络安全教学与学习研究,严禁用于任何非法用途。任何利用本文内容从事违法犯罪活动的行为,均严重违背本文初衷,属于使用者个人行为,与作者无关。请知法、懂法、守法,做良好公民。
Linux操作系统基础——包管理、进程管理、用户管理与权限管理
一、简介
Linux作为多用户多任务的操作系统,其核心管理能力涵盖软件包管理、进程管理、用户管理和权限管理四大模块。掌握这些基础知识是Linux系统运维和安全管理的前提。本文将从实际操作角度,系统梳理各模块的核心命令与配置文件,帮助读者快速建立Linux操作系统管理的知识体系。
二、包管理
2.1 包管理概述
大多数现代类Unix操作系统都提供了中心化的机制来搜索和安装软件。软件通常以包的形式存放在存储库中,包管理系统除了安装软件外,还提供了工具来更新已安装的包,确保系统中使用的代码是经过审查的。
不同Linux发行版使用不同的包格式和工具:
| | |
|---|
| | apt, apt-cache, apt-get, dpkg |
| | |
2.2 常用包管理命令
更新包列表
# Debian/Ubuntusudo apt update# CentOSsudo yum check-update
更新已安装的包
# Debian/Ubuntusudo apt upgrade # 只更新已安装的包sudo apt full-upgrade # 可能增加或删除包以满足新依赖# CentOSsudo yum update
搜索包
# Debian/Ubuntuapt search 关键词# CentOSyum search 关键词yum search all 关键词 # 搜索所有字段包括描述
查看包信息
# Debian/Ubuntuapt show 包名dpkg -s 包名 # 显示包的当前安装状态# CentOSyum info 包名yum deplist 包名 # 列出包的依赖
安装包
# Debian/Ubuntusudo apt install 包名sudo apt install 包1 包2 # 安装多个包sudo apt install -y 包名 # 自动确认# CentOSsudo yum install 包名sudo yum install -y 包名
从本地文件安装
# Debian/Ubuntusudo dpkg -i package.deb# 使用gdebi处理缺失依赖sudo apt install -y gdebi && sudo gdebi package.deb# CentOSsudo yum install package.rpm
删除包
# Debian/Ubuntusudo apt remove 包名sudo apt autoremove # 删除不需要的依赖包# CentOSsudo yum remove 包名
2.3 apt与apt-get对照
提示: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获取状态,进程描述符仍保留在系统中 |
| |
| |
| |
| |
3.3 进程的属性
- 进程ID(PID)
- 进程状态:运行R(running)、休眠S(sleep)、僵尸Z(zombie)
3.4 进程相关命令
ps — 查看进程
ps aux # 显示所有进程的详细信息ps -ef # 简洁格式查看所有进程
ps aux输出各列含义:
STAT状态字母含义:
注意:[xxxx]方括号括起来的是内核态进程,没有括号的是用户态进程。
uptime — 查看系统负载
输出示例:05:41:34 up 6:11, 3 users, load average: 0.06, 0.02, 0.00
判断标准:如果每个CPU内核的活动进程数不大于3,系统性能良好;大于5则有严重问题。双核CPU时Load Average为6说明已被充分使用。
top — 动态监控进程
top界面各行含义:
top界面进程列表各列含义:
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)
- GID(Group ID)
UID范围划分:
| |
|---|
| |
| 系统用户(伪用户),199系统自行创建,100499分配给有系统账号需求的用户 |
| 普通用户(2.6.x内核后可支持2^32个UID) |
4.3 用户配置文件
/etc/passwd — 用户基本信息
每行记录对应一个用户,以:分隔为7个字段:
用户名:密码:UID:GID:用户说明:主目录:默认Shell
各字段说明:
| |
|---|
| |
| 通常为x或*,实际密码存储在/etc/shadow |
| |
| |
| |
| 登录后默认工作目录(root为/root,普通用户为/home/用户名) |
| 命令解释器,/bin/bash为默认,/sbin/nologin禁止登录 |
关键点:将Shell改为/sbin/nologin可禁止用户登录;改为/usr/bin/passwd则用户登录后只能修改密码。
/etc/shadow — 用户密码信息
只有root用户有读权限,每行以:分隔为9个字段:
用户名:加密密码:最后修改时间:最小修改间隔:密码有效期:警告天数:宽限天数:账号失效时间:保留字段
| |
|---|
| SHA512散列加密,!!或*表示无密码不能登录,前加!使密码失效 |
| |
| 0表示随时可修改,10表示修改后10天内不能再次修改 |
| 默认99999(永不过期),90表示90天后必须修改 |
| |
| |
| |
安全提示:如果此文件权限发生改变,需注意是否为恶意攻击。
/etc/group — 用户组信息
每行以:分隔为4个字段:
注意:该字段显示的用户都是附加用户,初始组用户不会出现在此字段中。
/etc/gshadow — 组密码信息
每行以:分隔为4个字段:
4.4 用户管理命令
useradd — 创建用户
创建用户后,系统会自动在 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 中写入相关信息,并在 /home 目录下创建用户主目录。
passwd — 设置密码
usermod — 修改用户
锁定用户就是在shadow文件密码字段前加入!。
userdel — 删除用户
userdel -r 用户名 # -r表示同时删除主目录和邮箱
id — 查询用户信息
su — 切换用户
| |
|---|
| 切换身份同时切换工作环境(省略用户名默认切换为root) |
| |
| |
| |
whoami — 查看当前用户
whoami # 打印当前执行操作的用户名who am i # 打印登录系统的用户名(两者不同!)
4.5 用户组管理命令
groupadd — 创建组
groupmod — 修改组
groupdel — 删除组
注意:只能删除“不是任何用户初始组”的群组。如果某群组仍是用户的初始组,则无法删除,需先修改用户GID或删除该用户。
gpasswd — 组管理员
五、权限管理
5.1 权限位详解
每行第一列表示文件权限,共11位(第1位为文件类型,最后1位为SELinux标记),核心权限为中间9位:
9位权限分为3组,分别对应:
每组3个权限位:r(读)= 4,w(写)= 2,x(执行)= 1
5.2 chmod — 修改权限
数字法:
chmod 755 filename # rwxr-xr-xchmod 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 — 修改所属组
5.4 chown — 修改所有者
# 仅修改所有者chown [-R] 所有者 文件名# 同时修改所有者和所属组(建议用冒号连接)chown [-R] 所有者:所属组 文件名# 仅修改所属组chown :所属组 文件名
注意:建议用冒号:连接所有者和所属组,避免用点.(用户名含点时可能误判)。目标用户/组必须存在。
5.5 umask — 默认权限掩码
权限计算公式:
文件初始权限 = 666 - umask后三位目录初始权限 = 777 - umask后三位
- 文件最大默认权限为666(rw-rw-rw-),新建文件不赋予执行权限
目录权限计算示例(umask=0022):
777 - 022 = 755(rwxr-xr-x)
文件权限计算示例(umask=0022):
666 - 022 = 644(rw-r–r–)
临时修改umask:
永久修改umask:
修改 /etc/profile 文件中的umask设置。
5.6 ACL权限 — 访问控制列表
传统权限只有3种身份(所有者、所属组、其他人),无法对单个用户精确控制。ACL(Access Control List)可实现对单一用户设定访问权限。
典型场景:项目目录需要给试听学员r-x权限,但不能给w权限,传统3种身份无法满足。
获取ACL权限:
设置ACL权限:
| |
|---|
| 设定用户ACL权限,如setfacl -m u:st:rx /project |
| 设定组ACL权限,如setfacl -m g:tgroup:rx /project |
| |
| |
| |
| |
| |
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数字值前加特殊权限数字
chmod 4755 filename # SUID + rwxr-xr-xchmod 6755 filename # SUID+SGID + rwxr-xr-xchmod 3755 dirname # SGID+SBIT + rwxr-xr-x
字母法:
chmod u+s filename # 添加SUIDchmod g+s filename # 添加SGIDchmod o+t dirname # 添加SBITchmod u-s filename # 移除SUID
六、经验总结
- 包管理:
apt适合交互使用,脚本中用apt-get更稳定;生产环境升级前先在测试环境验证 - 进程管理:
ps aux和top是日常排查的利器;发现僵尸进程要追查父进程,kill -9是最后手段 - 用户管理:
/etc/passwd和/etc/shadow是用户管理的核心文件;锁定用户比删除更安全;定期检查shadow文件权限变化 - 权限管理:最小权限原则——默认不给写权限和执行权限;ACL弥补了传统3种身份的不足;SUID/SGID权限要谨慎授予,是提权攻击的常见目标
- 运维安全:在生产环境中,绝对不能所有用户都用root登录;合理分配用户等级和权限等级,是服务器安全的基础