Linux权限


img

Linux权限

这里插入一个知识点:

  • Shell外壳:从原理上来说,Shell是Linux操作系统中的外壳程序,它扮演着“用户和Linux内核之间的桥梁”的角色。具体而言,Shell将用户输入的命令解析并传递给Linux内核处理,同时将Linux内核的处理结果翻译并返回给用户。因此,通过Shell,用户能够更加高效、安全、低成本地使用Linux内核。(我的理解是相当于操作系统的系统调用的功能)

  • Shell本质是一个执行起来的一个程序(进程),系统启动期间,一直存在

    • 查看该进程指令:ps jax | grep bash

  • 对于Shell来说,低风险、容易的指令可以自己执行,高风险、复杂的会创建一个子进程,交给子进程去执行。为什么要创建子进程去执行高风险指令?因为该指令可能会导致进程关闭(比如除0的指令),如果交给Shell主进程来执行,那么异常关闭的将会是Shell主进程,这将影响其他指令的执行。

  • 这里我们来试验一下Shell创建子进程执行命令。

    执行这段代码:先vim proc.c,再gcc proc.c,再./a.out

    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
                    
    int main(){
      printf("我的pid:%d\n",getpid());
      printf("我的父进程pid:%d\n",getppid());
      return 0;
    }
    

    执行结果:我们发现当前进程id21932,父进程id8231

    我们再来查看Shell主进程id,指令为:ps ajx | head -a && ps ajx | grep 8231

    我们看到确实是Shell主进程id为8231,也就是id21932进程的父进程,即Shell确实是创建了子进程来运行某些指令


1、Linux用户

  • Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

  • 命令:su [用户名]

  • 功能:切换用户

  • 举例su xp。其中,如果普通用户想切换为root用户,直接使用指令su就行了,不用加root用户名,或者使用指令su -,需要注意的是这个指令执行之后需要输入root用户的密码。但是如果是root用户切换为普通用户,直接输入su [用户名],不用输入密码。普通用户切换为普通用户也需要密码。

普通用户不切换用户但是想用root权限则使用sudo命令:

  • 格式:在命令前面加上sudo

  • 举例sudo cd dirb

    这里我们发现:xp2不在sudoers文件中。说明我们想要sudo提权需要在sudoers中添加这个xp2用户,这个只能root用户才能操作(后面会讲)


2、文件访问者的分类(人)

  • 文件和文件目录的所有者:u — User
  • 文件和文件目录的所有者所在的组的用户:g — Group
  • 其它用户:o — Others

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

  • 文件类型

    • d:文件夹

    • -:普通文件

    • l:软链接(类似Windows的快捷方式)

    • b:块设备文件(例如硬盘、光驱等)

    • p:管道文件

    • c:字符设备文件(例如屏幕等串口设备)

    • s:套接口文件

  • 基本权限

    • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
    • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
    • 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
    • “-”:表示不具有该项权限
  • 权限是约束人的,对应的操作对象,一定要有对应的满足人的需求的属性。如:我们只能在leetcode写算法题,不能在leetcode刷短视频;我们只能在抖音刷短视频,不能在抖音写算法题


4、文件权限值的表示方法

  • 字符表示方法

    Linux表示说明Linux表示说明
    r–仅可读-w-仅可写
    –x仅可执行rw-仅可读写
    -wx仅可写和执行r-x仅可读和执行
    rwx可读可写可执行不可读不可写不可执行
  • 8进制数值表示方法

    权限符号(读写执行)八进制二进制
    r4100
    w2010
    x1001
    rw6110
    rx5101
    wx3011
    rwx7111
    0000

5、文件访问权限的相关设置方法

5.1、chmod

  • 格式:chmod [选项] 权限 文件名

  • 功能:设置文件的访问权限

  • 选项

    • R -> 递归修改目录文件的权限
    • 说明:只有文件的拥有者和root才可以改变文件的权限
  • chmod命令权限值的格式

    1. 用户表示符+/-=权限字符

      • +:向权限范围增加权限代号所表示的权限
      • -:向权限范围取消权限代号所表示的权限
      • =:向权限范围赋予权限代号所表示的权限
      • 用户符号:
      • u:拥有者
      • g:拥有者同组用
      • o:其它用户
      • a:所有用户
      • 举例chmod -R u+rwx,g+rwx,o+rwx dirb

    2. 三位8进制数字

      每个用户权限表示范围:000~111 即0~7

      所以总的范围为:000~777

      可以看上述8进制数值表示方法。

      • 举例:chmod -R 750 dirb

5.2、chown

  • 功能:修改文件的拥有者

  • 格式:chown [选项] 用户名 文件名

  • 常用选项:-R — 递归修改此目录下所有文件的拥有者

  • 举例sudo chown -R xp test_dir,非root用户需要sudo提升权限操作。

5.3、chgrp

  • 功能:修改文件或目录的所属组

  • 格式:chgrp [选项] 用户组名 文件名

  • 常用选项:-R 递归修改文件或目录的所属组

  • 举例sudo chgrp -R xp test_dir

5.4、umask

  • 功能:查看或修改文件掩码。

    • 新建文件默认权限 = 0666
    • 新建目录默认权限 = 0777
    • 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
  • 格式

    • umask:查看当前用户的权限掩码
    • umask 权限码:设置当前用户的权限掩码
  • 说明:将现有的存取权限减去这里不是单纯的减法,而是对应权限位去除1。如原权限是0666,每个位转换为三位的二进制即为000110110110,若权限掩码为0002,那么权限掩码转换为000000000010,所以就是把原权限位的倒数第二个二进制位置为0,即y原权限变为000110110100,每三位转换为8进制即0664。注意,如果原权限对应的权限掩码的二进制位为0,则不进行去除,保持为0,即不是单纯的减法。)权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。所以普通用户默认新建文件后的权限码为0664,新建目录后的权限码为0775

  • 举例umaskumask 003umask 004


6、file指令

  • 功能:辨识文件类型

  • 格式:file [选项] 文件或目录

  • 常用选项

    • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
    • -z 尝试去解读压缩文件的内容。
  • 举例file a.out


7、目录的权限

这里修改权限可以用之前的chmod,修改所有者使用chown,修改所属组使用chgrp

  • 可执行权限:如果目录没有可执行权限, 则无法cd到目录中。

  • 可读权限:如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。

  • 可写权限:如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。

换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写
权限。比如,属于xp的目录文件,如果xp2有w的权限,就可以把这个目录里面的文件删除!

那么问题来了,怎么解决这个问题?有人会说,把这个other的权限设置为没有w权限。但是有些情况是有些文件需要团队共同编写的,那么其他人都创建不了文件。这样治标不治本。所以引入了粘滞位


8、粘滞位

  • 功能:防止其他用户删除自己的文件

  • 格式:chmod +t 或者 chmod o+t

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

    • 一、超级管理员删除

    • 二、该目录的所有者删除

    • 三、该文件的所有者删除

  • 举例


9、sudo提权

Linux普通用户提权(sudo)


那么好,Linux权限就到这里,如果你对Linux和C++也感兴趣的话,可以看看我的主页哦。下面是我的github主页,里面记录了我的学习代码和leetcode的一些题的题解,有兴趣的可以看看。

Xpccccc的github主页

评论 206
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xpccccc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值