欢迎光临
我们一直在努力

Linux 打包压缩+剩余指令+shell外壳程序+用户切换

目录

一,打包压缩zip与tar两套经典方法

1.0前言

1.0.1打包压缩是什么

1.0.2. 为什么要打包压缩 (应用场景)

打包的目的:防止文件丢失

压缩的目的:效率至上

1.1zip打包压缩指令的使用

1.1.1指令详解:zip

1.1.3经典使用示例

1.2tar打包压缩指令使用

1.2.1指令详解:tar

1.2.2 常用选项说明

1.3不同操作系统之间的压缩包传输与解压操作

1.3.1先打包压缩两个文件

1.3.2传输Linux——>windows:sz

1.3.2Linux——>Linux:scp

1.3.3传输Windows——>Linux:物理拖拽/rz

1.3.4解压指令详解:unzip

二,剩余指令统讲

2.1 查找指令——find/which/whereis

2.1.1find指令

2.2.2which指令

2.2.3whereis指令

2.2 过滤器:grep

2.2.1指令介绍

2.2.2经典样例与实践操作

2.3 重命名:alias

2.3.1指令介绍

2.3.2经典样例

2.4 计算器:bc

2.4.1指令介绍

2.4.2使用样例

2.5 体系结构查看 uname

2.5.1什么是体系结构

2.5.2指令介绍

2.6 热键与关机

2.6.1 重要的几个热键

2.6.2 关机指令 shutdown

三,Linux  内核与 Shell 的关系

3.1什么是Shell?

3.2用一个例子来帮助更好的理解

3.3核心架构 拆解

四.用户切换指令

4.1.1指令介绍

4.1.2su的使用案例

4.1.3su – 的使用案例

4.2sudo提取权力与“白名单”

4.2.1sudo指令介绍

4.2.2sudo的使用案例

4.2.3“白名单”——/etc/sudoers的修改

4.2.4sudo提权窗口期


一,打包压缩zip与tar两套经典方法

1.0前言

1.0.1打包压缩是什么
  • 打包 (Archiving):
    • 定义:将多个文件或目录集合到一个文件中的过程。
    • 比喻:把散落在桌上的零食全部装进一个大纸箱,方便搬运。
    • 结果:文件总体积基本不变。
  • 压缩 (Compression):
    • 定义:通过压缩算法减少文件占用空间的过程。
    • 比喻:把纸箱里的海绵垫用力挤压,抽出空气,使体积变小。
    • 结果:显著减少存储空间。

1.0.2. 为什么要打包压缩 (应用场景)
打包的目的:防止文件丢失
  • 完整性:在传输包含成千上万个碎文件的目录(如代码工程)时,碎文件极易在拷贝过程中丢失或损坏。打包成一个文件可确保“一个都不能少”。
  • 管理便利:备份时,处理一个大文件比处理一堆小文件效率更高。
压缩的目的:效率至上
  • 节省空间:长期存放不常用的数据时,压缩可以腾出大量硬盘空间。
  • 网络加速:在网络传输(如 scp、rz/sz)前压缩,可以大幅缩短传输时间,节省带宽成本。

1.1zip打包压缩指令的使用

打包压缩出来的文件类型非常多,zip和tgz最常见。 压缩包也属于普通文件。

1.1.1指令详解:zip
  • 指令名称:zip
  • 指令作用:zip 是 Linux/Unix 系统中常用的压缩程序,用于将一个或多个文件压缩成扩展名为 .zip 的文件。它在保持文件结构的同时能有效减小文件体积,且生成的压缩包在 Windows 和 macOS 上具有极佳的兼容性。
  • 指令操作:zip [选项] [压缩包名.zip] [文件或目录…]

确定你的zip有没有安装,没有安装则安装

[root@VM-0-4-centos ~]# zip version

zip error: Nothing to do! (version.zip)
[root@VM-0-4-centos ~]# zip -version
zip warning: Unable to read number (must start with digit): ion

zip error: Invalid command arguments (bad split size: 'ion')

安装zip指令:

[root@VM-0-4-centos ~]# yum install -y zip unzip

1.1.2常用选项说明

选项说明
-r 递归处理。用于压缩目录,将指定目录下的所有文件和子目录一并处理。
-m 移入压缩包。文件压缩后,会自动删除原始文件。
-q 安静模式。不显示指令执行的过程信息。
-e 加密。执行指令后会提示输入密码。

1.1.3经典使用示例
  • 压缩单个文件: zip documents.zip file1.txt
  • 压缩整个目录: zip -r project_backup.zip ./my_project一定要加-r不然压缩的就是一个空目录
  • 创建一个带密码保护的压缩包: zip -re secret.zip private_folder

1.2tar打包压缩指令使用

1.2.1指令详解:tar
  • 指令名称:tar (Tape Archive)
  • 指令作用:Linux 中最常用的归档工具。它能将大量文件和目录打包成一个单独的 .tar 文件,或者进一步压缩为 .tar.gz (缩写:.tgz)等格式。tar不同于zip,它默认是递归的。
  • 指令操作:tar [选项] [归档文件名] [文件或目录…]
  • 常用组合(当然还有别的,但是只记住这两个就完全够用了)
  • tar -czf a.tgz files (打包并压缩为.tgz 格式)
  • tar -xzf a.tgz (解压 .tgz 格式的包)
  • tar -zxvf project.tar.gz -C /usr/local/src/(解压到指定目标路径)
  • tar -cvf project.tar ./my_project (仅打包不压缩生成.tar文件)

1.2.2 常用选项说明


1.3不同操作系统之间的压缩包传输与解压操作

1.3.1先打包压缩两个文件

    我们顺便把上面的两个指令练习一下: 初始文件结构如下,我们接下来要打包压缩mulu01和mulu66。

-bash-4.2# tree
.
|– mulu01
| `– mulu01
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
`– test.c
5 directories, 11 files
-bash-4.2#

压缩成功,形成压缩包mulu.zip。和mulu.tgz(压缩一个目录一定要记得-r递归)

-bash-4.2# zip mulu.zip mulu01
adding: mulu01/ (stored 0%)
-bash-4.2# tree
.
|– mulu01
| `– mulu01
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu.zip
`– test.c
5 directories, 12 files
-bash-4.2# tar czf mulu66.tgz mulu66
-bash-4.2# tree
.
|– mulu01
| `– mulu01
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66.tgz
|– mulu.zip
`– test.c
5 directories, 13 files
-bash-4.2#

1.3.2传输Linux——>windows:sz

安装sz:[root@bite-alicloud other]# yum install -y lrzsz

  • 指令名称:sz (Send Zmodem)
  • 指令作用:从 Linux 服务器发送文件到本地 Windows。执行后会自动弹出 Windows 的“另存为”窗口。
  • 指令操作:sz [选项] [文件名]

1.3.2Linux——>Linux:scp

检查你的scp是否存在(一般系统都是自带的)

-bash-4.2# scp –vision
unknown option — –
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 … [[user@]host2:]file2
-bash-4.2#


1.3.3传输Windows——>Linux:物理拖拽/rz

最省事儿的方法,拖拽:(先安装sz和rz)

更安全的方法:rz:

  • 指令名称:rz
  • 指令作用:利用 ZModem 协议将本地 Windows 的文件上传到 Linux 服务器。在 Xshell 等终端工具中,输入此命令会弹出 Windows 文件选择对话框。
  • 指令操作:rz [选项]

1.3.4解压指令详解:unzip
  • 指令名称:unzip
  • 指令作用:专门用于解压缩由 zip 指令生成的 .zip 压缩文件。它可以列出压缩包内容、测试压缩文件完整性以及将文件提取到指定目录。
  • 指令操作:unzip [选项] [压缩包名.zip]
  • 常用选项:
  • -l:查看压缩包内容,但不解压。
  • -d [目录]:指定解压到的目标目录。
  • -o:解压时不询问,直接覆盖同名文件。
  • -v:解压时显示详细的过程信息.

-bash-4.2# unzip -v mulu.zip #显示解压过程
Archive: mulu.zip
Length Method Size Cmpr Date Time CRC-32 Name
——– —— ——- —- ———- —– ——– —-
0 Stored 0 0% 04-15-2026 20:22 00000000 mulu01/
——– ——- — ——-
0 0 0% 1 file
-bash-4.2# unzip mulu.zip -d /root #定向解压

二,剩余指令统讲

2.1 查找指令——find/which/whereis

2.1.1find指令
  • 指令名称:find
  • 指令作用:在目录树中搜索文件,并执行指定的操作。它支持按文件名、大小、类型、权限、时间戳等多种条件进行查找,是 Linux 中功能最强大的搜索工具。
  • 指令操作:find [在哪里找] [匹配规则] [执行什么操作]

这个最常用

名称 -name -name "*.sh" 匹配文件名(区分大小写)

-bash-4.2# tree
.
|– mulu01
| `– mulu01
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66
| |– nihao01
| | `– test789.txt
| |– test01
| |– test02
| |– test03
| `– test23
|– mulu66.tgz
|– mulu.zip
`– test.c

5 directories, 13 files
-bash-4.2# find /root -name "test" -ls
-bash-4.2# find /root -name "test*" -ls
786483 4 -rw-r–r– 1 root root 297 Apr 15 20:22 /root/mulu01/mulu01/test03
786485 0 -rw-r–r– 1 root root 0 Apr 15 20:22 /root/mulu01/mulu01/nihao01/test789.txt
786486 8 -rw-r–r– 1 root root 4495 Apr 15 20:22 /root/mulu01/mulu01/test02
786487 4 -rw-r–r– 1 root root 28 Apr 15 20:22 /root/mulu01/mulu01/test01
786488 0 -rw-r–r– 1 root root 0 Apr 15 20:22 /root/mulu01/mulu01/test23
786468 4 -rw-r–r– 1 root root 905 Apr 16 10:59 /root/test.c
786440 4 -rw-r–r– 1 root root 297 Mar 31 20:24 /root/mulu66/test03
786445 0 -rw-r–r– 1 root root 0 Mar 30 17:31 /root/mulu66/nihao01/test789.txt
786451 8 -rw-r–r– 1 root root 4495 Mar 31 20:23 /root/mulu66/test02
786452 8 -rw-r–r– 1 root root 4900 Apr 16 09:06 /root/mulu66/test01
786480 0 -rw-r–r– 1 root root 0 Apr 15 20:18 /root/mulu66/test23
-bash-4.2#


2.2.2which指令
  • 指令名称:which
  • 指令作用:用于查找并显示给定命令的绝对路径。它通过在环境变量 PATH 指定的路径中搜索可执行文件,常用于确认某个指令是否存在以及它的具体安装位置。基本只用来查找指令而不是文件
  • 指令操作:which 指令名称

使用样例:     我们这里看到alias是取别名的意思,在下面有讲。

-bash-4.2# which man
/usr/bin/man
-bash-4.2# which ls
alias ls='ls –color=auto'
/usr/bin/ls
-bash-4.2# which ll
alias ll='ls -l –color=auto'
/usr/bin/ls
-bash-4.2#


2.2.3whereis指令
  • 指令名称:whereis
  • 指令作用:用于定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。相比 find,它的搜索速度更快,因为它直接查询数据库。
  • 指令操作:whereis 指令名称

-bash-4.2# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
-bash-4.2# whereis pwd
pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/mann/pwd.n.gz /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
-bash-4.2# whereis cd
cd: /usr/bin/cd /usr/share/man/mann/cd.n.gz /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
-bash-4.2#


2.2 过滤器:grep

2.2.1指令介绍
  • 指令名称:grep (Global Regular Expression Print)
  • 指令作用:强大的文本搜索工具,它能使用正则表达式搜索文本,并将匹配的行打印出来。常配合管道符 | 使用,用于过滤其他命令的输出结果。
  • 指令操作:grep [选项] [过滤什么] [在哪里过滤] (你要过滤的东西可以不用带“”但是如果你要过滤的东西有空格就必须带“”)

选项:

  • 不区分大小写 -i。
  • 显示行号 -n。
  • 反向过滤 -v。
2.2.2经典样例与实践操作

    我们用日志文件来演示grep的强大功能,如下,我们用cat拉出了一堆message,现在我们想要筛选出其中“有Removed关键字的最后十个文件”

  我们输入指令:

-bash-4.2# grep "Removed" /var/log/messages | tail -10
Apr 17 13:02:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:03:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:04:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:05:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:06:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:07:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:08:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:09:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:10:01 VM-0-9-centos systemd: Removed slice User Slice of root.
Apr 17 13:11:01 VM-0-9-centos systemd: Removed slice User Slice of root.
-bash-4.2#


2.3 重命名:alias

2.3.1指令介绍
  • 指令名称:alias
  • 指令作用:用于为较长或复杂的指令创建别名(简写)。通过设置别名,可以减少输入量并提高工作效率。如果不带参数执行,则显示当前系统中已定义的所有别名。
  • 指令操作:alias [别名]='实际指令'
2.3.2经典样例

    常用安全操作: 提供询问。

alias rm='rm -i' # 删除前询问
alias cp='cp -i' # 覆盖前询问
alias mv='mv -i' # 移动/重命名覆盖前询问

我们在上文看到的,which ll发现它实际上是ls -l的一个别名。

-bash-4.2# which ll
alias ll='ls -l –color=auto'
/usr/bin/ls


2.4 计算器:bc

2.4.1指令介绍
  • 指令名称:bc (Binary Calculator)
  • 指令作用:一个支持任意精度的交互式计算语言。它可以进行简单的算术运算,也可以进行逻辑运算和科学计算。在脚本中常用于处理浮点数运算。
  • 指令操作:bc [选项] (在终端输入 bc 进入交互模式,或使用 echo "计算表达式" | bc)
2.4.2使用样例
  • 基本运算:+ (加), – (减), * (乘), / (除), % (取模), ^ (指数)。
  • 自增自减:++, –(和 C 语言逻辑一致)。
  • 比较:==, <=, >=, !=, <, >。
  • 逻辑:&& (与), || (或), ! (非)。
  • s(x):正弦函数(x 是弧度)。
  • c(x):余弦函数。
  • a(x):反正切函数。
  • l(x):自然对数(ln)。

-bash-4.2# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
9+59+84+565+45
762
78645*45546
3581965170
7878787/76876
102
^C
(interrupt) Exiting bc.
-bash-4.2#


2.5 体系结构查看 uname

2.5.1什么是体系结构

什么是体系结构: 在 Linux 语境下,体系结构(Architecture)通常指硬件平台与操作系统的组合方式。它决定了计算机如何处理数据(如 32 位或 64 位)以及内核的版本信息。简单来说,就是告诉软件:“我这台机器的大脑是什么型号,沟通语言的版本是多少。”

2.5.2指令介绍
  • 指令名称:uname (Unix Name 的缩写)
  • 指令作用:用于显示当前操作系统的相关信息(如内核版本、硬件架构等)。
  • 指令操作:
    • uname -r:显示内核的发行版本号(Release)。
    • uname -m显示系统的硬件架构(如 x86_64)。
    • uname -a:显示所有系统信息(包括内核名、节点名、版本、编译时间等)。

2.6 热键与关机

  在 Linux 操作中,熟练使用热键可以极大提高工作效率,避免重复敲打冗长的路径或陷入失控的进程。

2.6.1 重要的几个热键
  • [Tab] 按键:
    • 核心功能:命令补全与档案补齐。
    • 操作技巧:敲出命令或文件的前几个字母,连按两次 Tab 键可以列出所有匹配项。
  • [Ctrl] + c 按键:
    • 核心功能:强行停止当前程序。
    • 应用场景:当你发现指令跑飞了、陷入死循环或者不想等结果时,直接按下它。
  • [Ctrl] + d 按键:
    • 核心功能:键盘输入结束(End Of File, EOF)。
    • 操作技巧:可以用来取代 exit 指令,快速退出当前的终端登录。

2.6.2 关机指令 shutdown

语法:shutdown [选项] [时间]

  • 常见选项说明:

    • -h:将系统的服务停掉后,立即关机。
    • -r:在将系统的服务停掉之后,重新启动(reboot)。
    • -t sec:-t 后面加秒数,表示“过几秒后关机”。

Linux云服务器永远不会关机,除非维护或者不用了。


三,Linux  内核与 Shell 的关系

3.1什么是Shell?

    Linux 严格意义上说是一个操作系统,我们称之为 “核心(kernel)”,但我们一般用户,不能直接使用 kernel。而是通过 kernel 的 “外壳” 程序,也就是所谓的 shell,来与 kernel 沟通。如何理解?为什么不能直接使用 kernel?

 从技术角度,Shell 的最简单定义:命令行解释器(command Interpreter) 主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

3.2用一个例子来帮助更好的理解

    以下内容纯属瞎编    村里有个程序员叫小王,不仅闷骚,还特别宅。他的生活里只有 0 和 1,让他去敲代码他在行,但要让他去面对村头那个美若天仙、却高冷的 小花,他瞬间就会因为“系统过载”而死机。

小王深知,小花就像家里最精密的保险箱,直接硬闯不仅会被当成流氓(非法指令),还可能被小花反手一个“防御性重置”。于是,小王找到了村里路子最广、嘴皮子最溜的王婆。


第一访:初试成功    小王对王婆说:“帮我问问小花,能不能给我一张她的近照(获取数据)。”    王婆扭着腰去了,她深谙小花的脾性,把小王的“宅男黑话”翻译 成了体贴的问候。小花点点头,把照片交给了王婆。王婆喜滋滋地跑回来,把照片递给小王,顺带还说了一句:“妥了,返回值:0(执行成功)!”

第二访:惨遭拒绝    过了一周,小王胆子大了,让王婆去问:“小花,能把你的存折密码告诉我吗?”    王婆这回刚开口,小花脸就绿了,直接把王婆轰了出来,并附赠了一个大大的白眼。王婆灰头土脸地跑回来对小王摊摊手:“别想了,权限拒绝,错误码:403(Permission Denied)。”

第三访:实习生顶包(关键一战)    第三次,小王心血来潮,非要王婆去问小花能不能一起去吃火锅。王婆刚走到小花家门口,扒着窗户一看,心凉了半截——小花正和隔壁帅气的小帅共进晚餐呢!    王婆心想:“坏了,这要是把这消息直接传回去,依小王那玻璃心,不得直接崩溃、当场撒手人寰(进程崩溃)啊?要是小王挂了,谁给我发佣金(系统停摆)?”    为了保住自己的名声和系统的稳定,王婆灵机一动,转头从兜里掏出一个分身符,变出了个实习生(子进程)。王婆叮嘱实习生:“你去,把这个‘修罗场’的情况确认一下。要是真成了,你回来报信;要是出事了,你被骂就被骂了,反正别连累老娘。”    结果,实习生果然被愤怒的小花一扫帚赶出了家门(子进程报错退出)。王婆站在远处安全区观察着,拍拍胸口,镇定地走回小王家,把实习生的遭遇润色了一下报给小王。王婆(父进程)依然稳如泰山,随时准备处理下一次请求。


3.3核心架构 拆解

   看完这个故事,你会发现 Linux 的设计逻辑简直神了。以下是角色与技术的真实对应关系


四.用户切换指令

  Linux下的用户有两类:root超级用户(命令提示符:#)与普通用户(命令提示符:$)。所谓权限,我必须先讲清楚——它是用来限制普通用户的。(这一点我们在接下来会慢慢渗透)

4.1.1指令介绍
  • 指令名称:su / su –
  • 指令重要性:★★★★☆
  • 说明:
    • su 是Linux中切换用户的核心命令, 尤其在权限管理中极其常用。
    • su 仅切换身份,环境变量仍保留原用户。
    • su – 则模拟完整登录,彻底切换用户和环境。
4.1.2su的使用案例

    普通用户到超级用户的切换必须输入超级用户密码,但是超级用户切换到普通用户不需要输入密码。

[root@VM-0-9-opencloudos ~]# clear
[root@VM-0-9-opencloudos ~]# whoami
root
[root@VM-0-9-opencloudos ~]# ls /home
lighthouse zbc
[root@VM-0-9-opencloudos ~]# su zbc
[zbc@VM-0-9-opencloudos root]$ whoami
zbc
[zbc@VM-0-9-opencloudos root]$ su root
Password:
[root@VM-0-9-opencloudos ~]# whoami
root

 su这个指令是将你whb这个用户的外面套上一层身份,但是我这个whb用户并没有退出。

4.1.3su – 的使用案例

    为了更加清晰的看出来su和su – 的区别,我们需要借助目录来帮助观察。

  • 如果是重新登录新用户(新建用户),一定会在他的家目录(/root/home/xxx)。
  • 如果只是暂时切换身份,目录不会改变。

哎,我找到了一个非常巧妙的案例,首先我们是root用户,在根目录下。对于根目录而言,其他用户是没有写和读权限的。(后面会讲)     所以,当我们用su切换成zbc用户,该用户任然在根目录,既不能执行创建文件夹,又不能读取目录信息。

 补充知识: 直接按ctrl+d可以”退出当前用户“,如下,我们退出了当前用户zbc回到了root,如果再次按一下ctrl+d,则就把root也退出了。这个快捷键和指令exit的效果一致。

[root@VM-0-9-opencloudos ~]# su zbc
[zbc@VM-0-9-opencloudos root]$ mkdir mulu01
mkdir: cannot create directory ‘mulu01’: Permission denied
[zbc@VM-0-9-opencloudos root]$ ls -al
ls: cannot open directory '.': Permission denied
[zbc@VM-0-9-opencloudos root]$
exit
[root@VM-0-9-opencloudos ~]# ls -al
total 36
dr-xr-x— 4 root root 202 Apr 25 12:37 .
dr-xr-xr-x 18 root root 256 Apr 25 18:33 ..
-rw——- 1 root root 209 Apr 25 18:33 .bash_history
-rw-r–r– 1 root root 18 Apr 23 2025 .bash_logout
-rw-r–r– 1 root root 141 Apr 23 2025 .bash_profile
[root@VM-0-9-opencloudos ~]#
[C:\\~]$

看,我按su – 不久可以回到zbc的家目录了?于是我可以读可以写。这就说明了su – 确实是模拟了一次重新登录。

[root@VM-0-9-opencloudos ~]# clear
[root@VM-0-9-opencloudos ~]# su – zbc
Last login: Sat Apr 25 18:32:25 CST 2026 on pts/0
[zbc@VM-0-9-opencloudos ~]$ pwd
/home/zbc
[zbc@VM-0-9-opencloudos ~]$ ls -l
total 1956
drwxr-xr-x 4 zbc zbc 40 Apr 23 15:43 gitcage
-rw-r–r– 1 zbc zbc 87 Apr 25 14:19 ma6174
-rw-r–r– 1 zbc zbc 149 Apr 25 14:21 makefile
-rw-r–r– 1 zbc zbc 0 Apr 25 12:57 PassWordForZbc
[zbc@VM-0-9-opencloudos ~]$

于是有小伙伴要问了:那么我这个时候按ctrl+d为什么还能够回到原来的root,这是什么原理?好问题!,但是这个问题得放到进程的时候讲,现在可以简单了解一下。

[zbc@VM-0-9-opencloudos ~]$
logout
[root@VM-0-9-opencloudos ~]#

4.2sudo提取权力与“白名单”

4.2.1sudo指令介绍
  • 指令名称:sudo
  • 说明:
  • sudo 是Linux中临时提权执行命令的核心工具,在权限管理中不可或缺。
  • 无需切换用户身份,仅在执行命令时以目标用户(默认root)的权限运行。
  • 通过 /etc/sudoers 文件精细控制哪些用户/组可以执行哪些命令,比 su 更安全、更可控。
  • 默认情况下,执行一次 sudo 后短时间内(通常5分钟)免密重复使用。
4.2.2sudo的使用案例

[djx@VM-0-9-opencloudos ~]$ ls /root
ls: cannot open directory '/root': Permission denied
[djx@VM-0-9-opencloudos ~]$ sudo ls /root
[sudo] password for zbc:
test
[djx@VM-0-9-opencloudos ~]$ sudo ls /root
test

案例二: 普通用户直接创建文件,其所有者和所属组均为该用户本身。通过 sudo 提权创建文件,本质是临时调用 root 身份操作,因此产生的文件归属于 root。

[djx@VM-0-9-opencloudos ~]$ touch test01.c
[djx@VM-0-9-opencloudos ~]$ sudo touch test02.c
[sudo] password for zbc:
[djx@VM-0-9-opencloudos ~]$ ls -l test01.c test02.c
-rw-r–r– 1 djx djx 0 Apr 26 10:12 test01.c
-rw-r–r– 1 root root 0 Apr 26 10:12 test02.c

 有些小伙伴看到上面的操作就纳闷了,为什么我不可以?其实,不是不可以,而是你没有被纳入root管理员的白名单。

4.2.3“白名单”——/etc/sudoers的修改

 /etc/sudoers 是 Linux 系统的“权力白名单”,通过 vim命令 编辑。它规定了哪些用户能以 root 身份执行特定指令。利用该文件可实现权限精细化管理,并支持 NOPASSWD 开启免密操作(后面会讲),是兼顾系统安全与操作便捷的核心配置文件。

打开[root@VM-0-9-opencloudos ~]# vim /etc/sudoers \\ #必须以root用户打开,其他用户打开什么都看不到

找到这句话:## Allow root to run any commands anywhere , 在下面的许可名单中添加,然后保存退出。

djx ALL=(ALL) ALL

 ok,现在djx用户可以使用sudo提权了。

4.2.4sudo提权窗口期

   sudo指令执行第一次时,需要输入密码,此后五分钟是一个窗口期,这个窗口期中,我可以执行sudo提权而不必输入密码。    我又找到一个很好的案例,test是我刚才编译生成的一个可执行程序。

 我们都知道,自己编译生成的可执行程序必须./test才能够执行,但是系统的命令则只需输入命令名称即可执行,根本原因是系统命令被放在了usr/bin目录中。 而cp文件到该目录必须拥有管理员权限(我们可以类比这种动作是安装软件)。 任何一个用户在同一台机器上安装的指令大家都可以用,除了一些特殊的指令只有root可以用。

赞(0)
未经允许不得转载:171主机测评 » Linux 打包压缩+剩余指令+shell外壳程序+用户切换
分享到: 更多 (0)

评论 抢沙发

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