【Linux】Shell命令与权限管理

一、Shell命令及运行原理

(一)Shell的角色

Linux 严格意义上的操作系统核心是 kernel(内核),但普通用户无法直接与 kernel 交互。这是因为 kernel 负责管理系统的硬件资源、进程调度等底层核心工作,直接操作 kernel 风险极高,可能会因误操作导致系统崩溃等严重问题。而 Shell 就像 kernel 的 “外壳” 程序,充当着用户与 kernel 之间的中间桥梁。

(二)Shell的定义与功能

从技术角度,Shell 最简单的定义是 命令行解释器(command interpreter),主要有两大功能:

  • 翻译指令:将用户输入的命令翻译给 kernel 处理。
  • 反馈结果:把 kernel 处理后的结果翻译回给用户。

(三)类比理解

对比 Windows 系统,我们操作 Windows 并非直接操作其内核,而是通过图形界面(GUI),比如双击 D 盘盘符进入 D 盘、点击运行应用程序等。

Shell 对于 Linux,就如同 Windows 的图形界面,对用户指令进行解析,传递给 Linux 内核,再将内核运行结果解析后反馈给用户。

可以用一个更形象的比喻:如果把操作系统内核比作你心仪的姑娘,你(用户)比较害羞不好意思直接交流,Shell 就像媒婆(比如常用的 bash),你通过媒婆和姑娘沟通,媒婆负责传达你的心意并带回姑娘的回应。


二、Linux权限的概念

(一)用户分类

Linux 下有两种用户:

  • 超级用户(root):拥有最高权限,可在 Linux 系统下做任何事情,不受限制。超级用户的命令提示符是 “#”。
  • 普通用户:权限有限,只能在 Linux 下做特定范围内的事情。普通用户的命令提示符是 “$”。

(二)useradd / userdel(创建用户/删除用户)

在 Linux 系统中,强烈不建议直接使用 root 账户进行日常操作,而要创建普通用户并按需获取权限直接用 root 就像 “拿着一把能打开所有门的钥匙满街走”—— 既容易丢(被攻击),也容易自己不小心把重要的门拆了(误操作)。而普通用户 + sudo 是 “平时用普通钥匙,需要时找管理员拿 master 钥匙开特定的门”,安全且可控。

那我们该如何创建一个用户呢?可以用到指令 useradd + 用户名,具体如下:

添加用户后,可以对新添加的账户设置密码,指令 passwd + 用户名,具体如下:

当我们要删除用户时,不能只是 userdel 用户名,这样是删除不掉的,具体如下:

我们可以看出zhangsan用户并没有被删除。应该用到的指令是:userdel  -r   用户名, -r是必不可少的,如果我们不添加 -r 选项,发现用户是已经被删除了,但是用户的文件仍然在。

因此要想直接用户及其文件直接删除,建议直接用userdel  -r   用户名。

(三)用户切换命令:su 和 su -

1、功能:切换用户
2、格式:su  [用户名] 或 su - [用户名]
  • su:仅仅是切换到目标用户身份,部分环境变量仍保留当前用户的设置比如当前用户是普通用户yql,执行su root切换到root用户后,像HOME环境变量(表示用户家目录),此时还是yql的家目录(/home/yql),而不是root的家目录(/root)。此外,一些自定义的环境变量、工作目录等也可能维持切换前的状态。属于非登录式切换,只是简单地获取目标用户的权限,并没有完整模拟目标用户的登录过程。
  • su -:完全切换到目标用户的环境,目标用户的所有环境变量都会生效。例如,从普通用户yql执行su - root,切换成功后,HOME环境变量会变为root用户的家目录(/root),同时会加载root用户的.bash_profile.bashrc等配置文件中定义的环境变量和别名等设置,工作目录也会切换到目标用户的家目录。更接近目标用户的完整登录过程,系统会认为是目标用户进行了一次登录操作,会执行一些登录相关的初始化工作,如加载用户的配置文件等,这也是它能完全切换到目标用户环境的原因。

总的来说,su -能更全面地模拟目标用户的登录状态和环境,在需要完整切换用户环境时更常用;而su则相对灵活,在仅需临时获取权限执行单个命令时使用起来更便捷。


(三)Linux权限管理

(一)文件访问者分类

Linux 中,文件和文件目录的访问者分为三类:

  • 所有者(u - User):文件或目录的拥有者,可类比为 “中国平民”,对自己的文件 / 目录有基础的权限管理能力。
  • 所属组用户(g - Group):所有者所在组的用户,这部分用户对文件 / 目录也有一定权限。
  • 其他用户(o - Others):除所有者和所属组用户外的其他用户,可类比为 “外国人”,权限通常更受限制。

(二)文件类型和访问权限(事物属性)

1、文件类型
   Linux 下文件类型多样:
  • d:文件夹。
  • -:普通文件。
  • l:软链接(类似 Windows 的快捷方式)。
  • b:块设备文件(例如硬盘、光驱等)。
  • p:管道文件。
  • c:字符设备文件(例如屏幕等串口设备)。
  • s:套接字文件。
2、基本权限

权限分为读(r)、写(w)、执行(x),不同权限对文件和目录的作用不同:

  • 读(r/4):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
  • 写(w/2):对文件而言,具有修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • 执行(x/1):对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
  • -”  表示不具有该项权限。

(三)文件权限值的表示方法

  • 字符表示方法:通过 rwx 和 - 的组合来表示权限,比如 rwxr - xr - x 表示所有者有读、写、执行权限,所属组用户有读、执行权限,其他用户有读、执行权限。

  • 8 进制数值表示方法:因为 rwx 分别对应 4、2、1 的数值,所以可以将权限转换为 8 进制数,例如 rwx 对应 7(4 + 2 + 1),r - x 对应 5(4 + 0 + 1)等。

(四)文件访问权限的相关设置方法

1、chmod

(1)功能:设置文件的访问权限。

(2)格式chmod [参数] 权限 文件名

(3)常用选项

  • -R:递归修改目录文件的权限(即连同目录下的子文件和子目录一起修改权限)。说明:只有文件的拥有者和 root 才可以改变文件的权限。

(4)chmod 命令权限值的格式

  • 用户表示符 + / - / = 权限字符
    • +:向权限范围增加权限代号所表示的权限。
    • -:向权限范围取消权限代号所表示的权限。
    • =:向权限范围赋予权限代号所表示的权限。
    • 用户符号:
      • u:拥有者。
      • g:拥有者同组用户。
      • o:其他用户。
      • a:所有用户。
    • 实例
      • chmod u+w abc.txt:给 abc.txt 文件的所有者增加写权限。
      • chmod g-w abc.txt:取消 abc.txt 文件所属组用户的写权限。
      • chmod a = x abc.txt:将 abc.txt 文件所有用户的权限设置为仅执行权限。
2、chown

(1)功能:修改文件的拥有者。

(2)格式chown [参数] 用户名 文件名

(3)说明:在 Linux 系统中,只有 root 用户(超级用户)或者对该文件拥有足够权限的用户,才能修改文件的所有者。如果要成功修改文件所有者,需要使用 root 用户来执行 chown 命令。可以通过 su - root(然后输入 root 密码)或者 sudo chown user temp.txt来切换到 root 身份后再进行操作。

(4)实例:

  • 将temp.txt的拥有者修改为 qly
  • 递归将 testdir 目录及其下内容的拥有者修改为 qly
3、chgrp

(1)功能:修改文件或目录的所属组。

(2)格式chgrp [参数] 用户名 文件名

(3)常用选项-R 递归修改文件或目录的所属组。

(4)实例chgrp users /abc/f2:将 /abc/f2 文件的所属组修改为 users 组。

4、umask

(1)功能:

  • 查看或修改文件掩码。
  • 新建文件默认权限 0666所有用户都有读、写权限,文件默认没有执行权限,因为执行权限对普通文件风险较高新建目录默认权限 0777(所有用户都有读、写、执行权限) 但实际创建的文件和目录权限会受 umask 影响,实际权限 = 默认最大权限 & (~umask)~ 表示对 umask 取反,即把每一位的二进制位翻转)。

(2)格式:umask 权限值

(3)说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为 0002

(4)实例:

  • umask 022:设置 umask 值为 022
  • umask:查看当前 umask 值。
5、file指令

(1)功能说明:辨识文件类型。

(2)语法file [选项] 文件或目录...

(3)常用选项

  • -c:详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z:尝试去解读压缩文件的内容。
6、使用sudo分配权限

sudo(Superuser Do)是 Unix/Linux 系统中用于让普通用户以其他用户(通常是超级用户 root)身份执行命令的工具,通过配置 /etc/sudoers 文件来分配权限,能在保障系统安全的同时,灵活地为不同用户授权特定操作。

(1)修改 /etc/sudoers 文件分配文件

        格式接受权限的用户登陆的主机 = (执行命令的用户) 命令

(2)使用 sudo 调用授权的命令

        格式$ sudo - u 用户名 命令

        实例$ sudo - u root /usr/sbin/useradd u2:以 root 用户身份执行添加用户 u2 的命令。

sudo userdel -r testuser 
//这里 sudo 会以 root 身份执行 userdel -r testuser,完成用户的删除。
sudo yum install nginx
//这里 sudo 会以 root 身份执行, 完成安装包的下载和安装。

(五)目录的权限

  • 执行权限:如果目录没有可执行权限,则无法 cd 到目录中。
  • 可读权限:如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容。
  • 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。

这里有个特殊情况:只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的写权限。这看似不科学,比如张三创建的文件,李四只要有目录写权限就能删除。我们可以通过以下操作验证:

为了解决这个问题,Linux引入了粘滞位的概念。

设置粘滞位后(用 chmod + t),当一个目录被设置为 “粘滞位”,则该目录下的文件只能由:

  • 超级管理员删除;
  • 该目录的所有者删除;
  • 该文件的所有者删除。

我们再来看设置粘滞位后的情况:

(六)权限总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有 x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录有 r 读权限(这里容易犯错,认为有读权限就可以进入目录读取目录下的文件)。
  • 如果目录有 x 权限,但没有 r 权限,则用户可以执行命令,可以 cd 进入目录,但由于没有读权限,所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值