一给 发表于 2024-7-15 02:29:10

Linux - Shell 以及 权限问题

目录
Shell的运行原理
Linux权限问题
  Linux权限的概念
        怎样实现用户账号之间的切换
        怎样仅提升当前指令的权限
        怎样将普通用户添加到信任列表
  Linux权限管理
        文件访问者的分类(人)
        文件类型和访问权限(事物属性)
        文件权限值的表示方法
        文件访问权限的相干设置方法
          怎样改变文件的访问权限
          怎样改变文件的拥有者
          怎样改变文件的所属组
          怎样修改文件的掩码
  目录的权限
  粘滞位
Shell的运行原理

        无论是Windows的图形化界面还是Linux的命令行界面,它们本质上都是利用体系提供给用户的交互方式,通常被称为“外壳程序”大概“壳层(shell)”。
https://i-blog.csdnimg.cn/direct/70a6ac6ce50f4a369fff9666cacadda4.png
        图形化界面(GUI)通过图标、菜单和窗口等可视化元素来让用户举行利用,这种方式直观、易用,特殊适合那些不熟悉命令行利用的用户。
        而命令行界面(CLI)则是通过命令输入和文本界面来完成利用,它可以提供更为精确和灵活的控制,尤其对于需要自动化任务大概长途管理体系的利用来说尤为重要。
Linux严格来说是一个利用体系的核心,也就是kernel,而不是整个利用体系。用户无法直接与kernel交互,而是通过Shell这样的外壳程序来与kernel举行通讯和利用。
   Shell被称为命令行解释器,其重要功能包罗:

[*] 解释和实行命令: 用户输入的命令通过Shell解释器被翻译成kernel可以理解的形式,并且传递给kernel实行。
[*] 返回效果给用户: Shell将kernel实行命令的效果再翻译成用户可以理解的形式,然后输出给用户。
        Shell不仅限于命令行界面,还包罗图形界面下的命令解释器。它提供了用户与Linux利用体系交互的重要方式,使用户能够通过命令和脚本完成各种利用,从简朴的文件管理到复杂的体系设置和管理工作。
   在Linux体系中,Shell的运行原理可以概括为以下几个关键步骤:

[*] 创建子历程: 当用户在Shell中输入命令时,Shell首先会创建一个子历程。这个子历程负责实行用户输入的命令。
[*] 命令行解释: 子历程会将用户输入的命令举行解释和实行。这个过程包罗剖析命令的语法和语义,确定命令需要实行的利用,以及调用体系调用与内核交互来实现具体功能。
[*] 实行命令: 子历程根据解释后的命令,实行相应的利用。这可以包罗文件利用、历程管理、体系设置等多种任务,具体利用由命令的内容和参数决定。
[*] 错误处理: 假如子历程在实行过程中出现问题(如命令不存在、权限不足等),它会返回相应的错误码大概错误信息。这些错误不会影响父历程(即Shell本身)的正常运行。
[*] 效果返回给用户: 子历程实行完命令后,将效果输出到尺度输出(stdout)。Shell会吸取并处理这些输出,最终将效果体现给用户。
[*] 等候命令输入: 子历程完成命令实行后,会停止并退出,回到Shell的环境中等候下一个用户命令的输入。Shell本身则持续运行,等候用户的下一个利用。
        用户在Windows中运行的应用程序,如QQ、微信等,都是通过创建单独的历程来实现的。假如一个程序出现问题,如卡死或崩溃,其他程序仍然可以正常运行,保证了体系的稳固性和用户体验。 
https://i-blog.csdnimg.cn/direct/a4e82e783fe043cda47db60743df021e.png
Linux权限问题

  Linux权限的概念

        在Linux体系中,权限管理是非常重要的安全步伐,通过权限可以控制用户对体系资源的访问和利用。


[*]       超级用户(root)权限:

[*]完全访问权: 超级用户(root)在Linux体系中拥有完全的访问权力。这意味着root用户可以实行任何利用,包罗创建、修改、删除体系文件和目录,安装软件包,设置体系设置等等,险些没有任何限制。
[*]风险和审慎: 因为root用户的权限如此广泛,以是使用root权限时需要特殊警惕,确保不会意外或不正确地更改体系设置或文件,从而导致体系不稳固或不安全。
[*]超级用户的命令提示符是“#”。https://i-blog.csdnimg.cn/direct/a8bcae40e61149fb9b13da369ea1fe9d.png
   
[*]       普通用户权限:

[*]有限的权限: 普通用户在Linux体系中的权限相对受到限制。普通用户一般只能在自己的主目录(通常是/home/username)中举行利用,包罗创建、修改、删除自己的文件和目录。
[*]体系范围内的限制: 普通用户通常不能修改体系级别的设置文件或实行体系管理任务,如安装软件到体系级别、修改体系广域网设置等。这种限制可以有效地防止用户误利用大概恶意利用对体系造成侵害。
[*]普通用户的命令提示符是“$”。https://i-blog.csdnimg.cn/direct/231af32f8fa44fa89fee99b454bb8ea1.png
   
        怎样实现用户账号之间的切换

        可能有时你的权限不够,需要从普通用户切换到超级用户,进而完成某些利用。
   语法: su 用户名
功能: 用户切换。
从普通账号切换为root账号。
        从普通账号切换为root账号。
https://i-blog.csdnimg.cn/direct/95d345fd4dee4ee58b64ab954c14dde2.png
        从root账号切换为普通账号。
https://i-blog.csdnimg.cn/direct/0627f2cb983d4be1aa9eaa6af6246f52.png
注意:
        1)从普通账号切换为root账号时,指令当中的root可省略,因为root账号只有一个。
        2)该指令也可以从一个普通用户切换为另一个普通用户,输入待切换用户的账号密码即可。
        3)切换用户后,若想切回前次的用户,可通过Ctrl+D实现。 
        怎样仅提升当前指令的权限

        但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。   
   语法: sudo 指令
功能: 提升当前指令的权限。      
        怎样将普通用户添加到信任列表

   登录超级用户(root)
        首先,确保你已经登录为拥有管理员权限的超级用户(root账户),大概具有可以使用sudo的账户。
修改sudo设置
        在终端中,编辑sudo设置文件,通常是/etc/sudoers文件。不要直接编辑此文件,而是使用visudo命令,这个命令会在保存时查抄语法错误,确保文件不会损坏。
sudo visudo
添加用户到sudo组
        在sudoers文件中,找到如下行:
## Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
        下面添加一行,将普通用户加入到sudo用户组:
bobmy current through only from such If
  Linux权限管理

        文件访问者的分类(人)

        文件访问权限通常分为三个类别,用于确定哪些用户可以访问文件以及怎样访问。
   这些类别如下:

[*] 文件所有者(Owner):

[*]文件所有者是创建文件或目录的用户。对于每个文件或目录,只有一个用户可以是所有者。
[*]所有者可以通过设置权限来控制文件的读取、写入和实行权限,以及文件的组分配。

[*] 文件所属组(Group):

[*]每个文件或目录都关联一个所属组,该组是文件所有者地点的用户组。多个用户可以属于同一个组。
[*]文件所属组可以通过设置权限来控制该组内的用户对文件或目录的读取、写入和实行权限。

[*] 其他用户(Others):

[*]其他用户是所有不是文件所有者,也不属于文件所属组的用户。
[*]其他用户可以通过设置权限来控制所有其他用户对文件或目录的读取、写入和实行权限。

注意:
        1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所饰演。
        2)在Linux当中,所有用户都要从属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。 
        那么为什么会有所属组这个概念呢? 下面举个例子。
        在某个公司当中有两个小组团队(A组、B组)在同一个Linux服务器上举行着同一款项目的开发(赛马模式),而你就是A组当中的一员。
https://i-blog.csdnimg.cn/direct/de1bd74155724b48bece3ace940de6d7.png
        所属组的存在使得文件创建者可以灵活地设置权限,使自己和团队成员能够访问文件,同时限制其他人的访问权限。 
        我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组。https://i-blog.csdnimg.cn/direct/d00a1b6de3e94ae9bf8a5d821a538fce.png
        文件类型和访问权限(事物属性)

        权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性。对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可实行的属性。
        使用指令ll,我们可以看到前面有一串字符,这串字符现实上就代表着该文件的类型和属性。https://i-blog.csdnimg.cn/direct/52f3b12346584a55a5ac9e82967d1f79.png 
        这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。 https://i-blog.csdnimg.cn/direct/626627e2da164876b1e22dca8a73cbaa.png
   差别的字符代表差别的文件类型。
        1)-:代表普通文件。
        2)d:代表目录。
        3)l:代表链接文件(类似于Windows当中的快捷方式)。
        4)b:代表块设备文件(例如硬盘、光驱等)。
        5)p:管道文件。
        6)c:字符设备文件。
        7)s:套接口文件。 
注意:在Linux中,文件类型是由文件体系和文件的属性来决定的,而不是由文件名或文件扩展名(后缀)来决定的。这与Windows等利用体系有所差别,因为Windows通常根据文件扩展名来确定文件类型。但是我们仍然保举使用后缀,方便我们人区分以及一些工具需要。 
        剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性。https://i-blog.csdnimg.cn/direct/8bfbdda8df494aa093d522dad85f995e.png
        每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可实行属性。https://i-blog.csdnimg.cn/direct/ddf8bae363d7405cb88bb757de72c15e.png
        若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可实行属性,则第三个位置的字符为x。若某一位置为字符 - ,则阐明不具有对应位置的属性。
        文件权限值的表示方法

        在Linux中,文件权限可以使用两种重要的表示方法:字符表示法和八进制数值表示法。
 1)字符表示方法
        ll指令打印文件权限值时的表示方法就是字符表示法。
字符表示法阐明r - -仅可读- w -仅可写- - x仅可实行r w -可读可写r - x可读可实行- w x可写可实行r w x可读可写可实行- - -无权限 2)八进制数值表示法
        字符表示法中的每一个字符地点位置所表示的效果只有两种可能,要么为真,要么为假,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位举行表示。 
字符表示法二进制八进制数值表示法阐明r - -1004仅可读- w -0102仅可写- - x0011仅可实行r w -1106可读可写r - x1015可读可实行- w x0113可写可实行r w x1117可读可写可实行- - -0000无权限         文件访问权限的相干设置方法

          怎样改变文件的访问权限

        要改变文件的访问权限,你可以使用 chmod 命令,并根据你的需求选择符合的权限设置方式:符号表示法或八进制数字表示法。
   使用符号表示法设置权限
        符号表示法允许你根据用户、所属组和其他用户分别设置权限,并可以一次性设置多个权限。 
语法:
chmod [选项] 拥有者符号权限,所属组符号权限,其他用户符号权限 文件名或目录名
常用选项:
        -R:递归修改目录及其子目录下所有文件的权限。
符号寄义:
        +:添加权限。
        -:移除权限。
        =:设置精确权限。
用户符号:
        u:文件拥有者(用户)。
        g:文件所属组。
        o:其他用户。
        a:所有用户(等同于 u,g,o 的组合)。
权限字符:
        r:读取权限。
        w:写入权限。
        x:实行权限。
# 设置文件拥有者具有读写权限,所属组具有读权限,其他用户无权限
chmod u=rw,g=r,o= file.txt

# 添加文件拥有者的执行权限
chmod u+x file.sh

# 移除其他用户的写入权限
chmod o-w file.txt

# 递归设置目录及其下所有文件为所有用户只读权限
chmod -R a=r directory/   使用八进制数字表示法设置权限
        八进制数字表示法将权限转换为一个三位数的八进制数,每个位上的数字对应于 rwx 的权限组合。
语法:
chmod [选项] 八进制权限值 文件名或目录名
八进制数值:
        r:读取权限对应值为 4。
        w:写入权限对应值为 2。
        x:实行权限对应值为 1。
# 设置文件拥有者读写执行权限,所属组读执行权限,其他用户只读权限
chmod 751 file.sh

# 递归设置目录及其下所有文件为所有用户读写执行权限
chmod -R 777 directory/
   注意事项:


[*]使用 chmod 命令需要有充足的权限来修改文件或目录的权限。
[*]使用 -R 选项要警惕,确保只在需要递归设置权限时使用,以免意外修改到不须要的文件和目录。
[*]使用符号表示法和八进制数字表示法,根据具体的需求和习惯选择符合的方式来设置文件的访问权限。
          怎样改变文件的拥有者

        要改变文件或目录的拥有者,你可以使用 chown 命令。这个命令允许你指定新的用户或用户组作为文件或目录的拥有者。
   语法:
chown [选项] 用户名:组名 文件名或目录名
常用选项:
        -R:递归地修改目录及其子目录下所有文件的拥有者。
阐明:
        用户名:新的文件或目录拥有者的用户名。
        组名:新的文件或目录所属组的组名(可选)。
示例:
1、修改文件的拥有者:
chown bob file.txt
        这个命令将 file.txt 文件的拥有者修改为 bob 用户。
2、修改目录的拥有者及其子目录下所有文件的拥有者(递归修改):
chown -R alice:users directory/         这个命令将 directory/ 目录及其所有子目录和文件的拥有者修改为 alice 用户,并将它们所属的组设置为 users 组。
    注意事项:


[*]使用 chown 命令需要有充足的权限来修改文件或目录的拥有者。
[*]使用 -R 选项要警惕,确保只在需要递归修改拥有者时使用,以免意外修改到不须要的文件和目录。
          怎样改变文件的所属组

        要改变文件或目录的所属组,你可以使用 chgrp 命令。这个命令允许你指定新的用户组作为文件或目录的所属组。
   语法:
chgrp [选项] 组名 文件名或目录名
常用选项:
        -R:递归地修改目录及其子目录下所有文件的所属组。
阐明:
        组名:新的文件或目录所属的组名。
 示例:
1、修改文件的所属组:
chgrp users file.txt
        这个命令将 file.txt 文件的所属组修改为 users 组。
2、修改目录的所属组及其子目录下所有文件的所属组(递归修改):
chgrp -R developers directory/
        这个命令将 directory/ 目录及其所有子目录和文件的所属组修改为 developers 组。
   注意事项:


[*]使用 chgrp 命令需要有充足的权限来修改文件或目录的所属组。
[*]使用 -R 选项要警惕,确保只在需要递归修改所属组时使用,以免意外修改到不须要的文件和目录。
          怎样修改文件的掩码

        我们查看新建的文件和目录,它们都有自己默认的权限。https://i-blog.csdnimg.cn/direct/1f8364707dd84c188144747fb96ecc4e.png
        现实上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必穷究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。https://i-blog.csdnimg.cn/direct/72fd20f9f2a242b2b56a1907e385e241.png
        但现实上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,缘故原由就是创建文件和目录的时间还要受到umask的影响,假设默认权限是mask,则现实创建出来的文件权限是:mask&(~umask) 
语法: umask 权限值
功能: 查看或修改文件掩码。
        我们可以通过指令umask查看文件默认掩码。
https://i-blog.csdnimg.cn/direct/d5a1d92b80844c0ab17438fdfc652112.png
        因此我们现实创建出来的文件和目录的权限值还需要举行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其举行按位取反。https://i-blog.csdnimg.cn/direct/4661a09a547544f8bd50e88fcfcef097.png
        然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其举行按位与利用,得到的就是我们创建出来的文件和目录的权限值。https://i-blog.csdnimg.cn/direct/747904ad93f54a1ba77c4514dbb40986.png

         也可以理解为凡是在umask中出现的权限位,都不能在最终权限中出现。https://i-blog.csdnimg.cn/direct/2dffc53660bc48999f40d97802d2bee1.png
        我们也可以通过修改umask来设置文件的访问权限。
   注意: 超级用户的默认掩码为0022,普通用户的默认掩码为0002。 
  目录的权限

        对于目录来说,与文件差别,其权限具有特定的寄义和影响:

[*] 可读权限 (r):

[*]假如用户对目录具有可读权限,那么用户可以通过 ls 命令列出该目录中的文件和子目录名字。
[*]可读权限也允许用户使用 stat 命令查看目录的具体属性信息。

[*] 可写权限 (w):

[*]假如用户对目录具有可写权限,那么用户可以在该目录中创建新文件、删除已存在的文件或目录,以及对已有文件或目录举行重定名。
[*]可写权限还允许用户修改目录下文件和子目录的内容,包罗修改文件的内容或属性。

[*] 可实行权限 (x):

[*]假如用户对目录具有可实行权限,那么用户可以通过 cd 命令进入该目录。
[*]可实行权限还允许用户使用目录下文件的绝对路径,例如实行脚本文件或读取文件的内容,但仅限于有权限的文件。

   总结:


[*]可读权限 (r): 允许列出目录中的内容和查看目录的属性。
[*]可写权限 (w): 允许在目录中创建、删除和修改文件或目录。
[*]可实行权限 (x): 允许用户进入目录并实行目录下文件的利用,例如读取文件内容或实行文件。
那么这就会出现一个问题:
        只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不公道的。 https://i-blog.csdnimg.cn/direct/c84f1be43dc5446489b0d59a7709044b.png
        为相识决这个不公道的问题,Linux引入了粘滞位的概念。
  粘滞位

语法: chmod +t 目录名
功能: 给目录加上粘滞位。
        当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。https://i-blog.csdnimg.cn/direct/769873288330453ea4513481896e3625.png
        此时另一个用户就算有该目录的所有权限,也无法删除该目录下的文件。https://i-blog.csdnimg.cn/direct/12f9b06e3b264a31b6278a2599206d31.png
        粘滞位应用于目录时,其重要作用是限制文件的删除权限。具体来说,假如一个目录被设置了粘滞位,则只有以下用户可以删除该目录中的文件:

[*] 超级用户:即root用户,始终具有最高权限,可以删除目录中的任何文件。
[*] 目录的拥有者:拥有该目录的用户,可以删除该目录中的任何文件,无论文件的权限设置怎样。
[*] 文件的拥有者:即文件创建者,可以删除自己创建的文件,即使其他用户有写入权限。
   注意事项:


[*]设置粘滞位只影响目录中的文件删除利用,不影响文件的创建或修改。
[*]粘滞位不会影响目录拥有者或文件拥有者的写入权限。
[*]粘滞位通常用于公共目录大概共享目录,以防止用户意外或恶意删除其他用户的文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux - Shell 以及 权限问题