Linux权限

文章目录

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

    c 复制代码
    #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进制数值表示方法

    权限符号(读写执行) 八进制 二进制
    r 4 100
    w 2 010
    x 1 001
    rw 6 110
    rx 5 101
    wx 3 011
    rwx 7 111
    --- 0 000

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),则该目录下的文件只能由

    • 一、超级管理员删除

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

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

  • 举例


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

Xpccccc的github主页

相关推荐
码农小韩17 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog17 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did18 小时前
wsl安装完无法进入wsl
linux
石头53019 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣19 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介19 小时前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan19 小时前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器
春日见20 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
HABuo20 小时前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos