• Linux权限


    Linux权限的概念

    什么叫做权限呢?

    那么我们能不能从生活中找一些例子,一些熟悉的场景呢?比如说,你是一个腾讯视频网站所对应的一个普通用户,想看vip的电影,就是看不了,你要是vip,你就能看,你不是vip你就看不了。再比如说,你是个学生,在自习期间你不想在教室上晚自习,你想去老师办公室上晚自习,可不可以呢?这是不被允许的。所以权限,我们可以理解为:一件事情是否允许被你做。

    权限是跟我们对应人的角色有关。现实生活中我们所约束的是对应的角色,还有就是要有相对应得事务属性,比如校长办公室是给来办公的,而你想要去校长办公室去吃饭,那当然是不合理的,校长办公室不是餐厅,没有给其他角色吃饭这个事务属性。

    Linux下有两种用户:

    一种是root(超级管理员):可以在linux系统下做任何事情,不受任何权限限制。

    另一种是普通用户:受权限约束的一批用户。

    其实在windows系统里面我们也有这种类似的权限的概念,我们平常进行一些操作的时候,打开一些文件其实也是受权限约束的,当然我们也有提升权限的操作

    像这里就有一个以管理员身份运行,以此来提升权限。

    那么在我们的linux系统下是可以进行用户切换的。下面我们来看看这个操作是怎么做的。

    普通用户切root超管命令:

    su  

    Password: 这里输入root对应的密码

    如果我们当前用户是普通用户账号想要切换成root账号的话,我们可以通过使用su [root] (root可以省略)命令,然后回车,会让我们输入密码,密码是root账号的密码,当我们输入正确的时候他就会如上图所示。

    注意到一个细节会发现,原本普通用户的命令提示符是'$',切成root超级管理员之后,命令提示符变成了 '#'。

    还有一条命令也可以切换到root用户

    su -

    那么这里su 命令和su - 命令有什么区别呢?

    区别就是:su : 单纯的账号切换

                     su - : 让root账号重新登陆

    如果我们又想切回普通用户,那么我们需要输入命令 su user(这个是普通用户的用户名,因为我目前使用的是腾讯的云服务器,所以一台机器可能有多个普通用户的账号,所以需要确定切换成哪个普通用户)。

    root用户切普通用户命令:

    su user

    此时我们就切换到了普通用户

    当然,如果你一开始就是从普通用户切换到的超级管理员root账号,也可以通过ctrl +d直接退出就会直接回到普通账号了。

    有的时候呢,我们有可能仅仅只是想要借助一下权限对几条指令进行提权,并不需要切换账号这么麻烦,而且不可能一个root账号的密码人人都知道,谁能保证群众中没有坏人呢,对吧。所以我们就可以通过sudo命令对一些指令进行提权。

    下面我们对sudo进行一定的了解

    1.在linux中,sudo全称“super user do”,意思为“干超级用户才能干的事”,是一个系统权限管理命令,可以让非root的用户运行只有root才有权限执行的命令,语法“sudo [选项] [-u 新使用者账号] 要执行的命令”。

    2.相对于使用 su 命令还需要新切换用户的密码,sudo 命令的运行只需要知道自己的密码即可,甚至于,我们可以通过手动修改 sudo 的配置文件,使其无需任何密码即可运行。

    是不是每一个新创建的用户都可以使用sudo提升命令的权限呢?如果不是那么哪些用户可以使用此命令呢?

    1.要想使一个用户具有使用sudo的能力,需要让root用户将其名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息注册到/etc/sudoers文件中,即完成对该用户的授权(此时该用户称为“sudoer”)才可以。

    2.当一般用户执行特殊权限时,在命令前加上 sudo,此时系统会让你输入密码以确认终端机前操作的是你本人,确认后系统会将该命令的进程以超级用户的权限运行。

    3.在一定的时间段内,再次执行sudo的命令时不再询问密码,超出此时间段(一般为5分钟)后需要再次输入密码。

    Linux权限管理

    linux中的权限是伴生文件的!我们上面举的例子说到了跟权限有关的是角色和属性,linux的文件也有相对于的角色和文件属性。文件属性有r(读),w(写),x(可执行)。角色所对应的有:拥有者,所属组,other。

    上面我们介绍的普通用户和root用户都是用来承担这三种角色的,每个用户对所对应的一个文件,有一个自己对应的角色。

    这里所谓的所属组是什么意思呢?

    其实就像我们平常在学校里面有一些课程需要我们分组进行完成,学习小组啊这些,都会选一个组长出来进行管理,这是我们生活中的例子。

    特殊情况:一个组可以只有一个人;

                    一个组内可以有很多人,用组长的名字来对组进行命名;

    为什么要有所属组?

    文件的所有者可以拥有文件的完全控制权限,但是有时候我们需要将文件的某些权限授予其他用户,而不需要授予文件所有者。这时候,我们可以将文件的所有者设置为某个组,然后将该组的成员添加到该组中,这样该组的成员就可以拥有该文件的某些权限。

    例如,假设我们有一个名为"mygroup"的组,我们需要将一个文件的某些权限授予该组的成员。我们可以将该文件的所属组设置为"mygroup",然后将该组的成员添加到该组中,这样该组的成员就可以访问该文件,并且拥有与文件所有者相同的权限。

    这种机制可以让我们在不授予文件所有者权限的情况下,授予其他用户一些权限,同时保持文件的安全性和稳定性。 

    前面我们都说了有这三种角色,拥有者和所属组都有了,那么为什么我们没有看到other呢?

    其实,没必要在文件中去显示other,因为我们的文件除了拥有者和所属组以外的其他人就是other.

    这里的第一列的第一个字符是表示什么意思呢?

    第一列第一个字符表示的是文件类型,是用来区分文件类型的。

    -:源代码,可执行程序,库等。

    d:目录文件

    c:字符设备文件

    b:块设备文件

    l:链接文件

    p:管道文件

    在我们的windows中,区分文件是通过文件的后缀来区分的,而linux区分文件类型与文件后缀无关

    ,与文件后缀无关并不代表我们不用文件后缀。

    linux区分文件类型与后缀无关,那和什么有关呢?

    与文件是否具有可执行权限有关。

    既然文件后缀与文件类型无关,那文件后缀有什么意义呢?

    那么如果我们要修改权限该如何修改呢?

    i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
    ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
    iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
    iv.“—”表示不具有该项权限

    假设我想给一个test.txt文件的other加上w权限

    通过使用命令

    chmod o+w test.txt

    我们发现test.txt文件的other权限变成了rw-
    文件权限值的表示方法

     

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

    a)chmod
    
功能:设置文件的访问权限
    格式:chmod [参数] 权限 文件名
    常用选项:
    R -> 递归修改目录文件的权限
    说明:只有文件的拥有者和root才可以改变文件的权限
    chmod命令权限值的格式
    ① 用户表示符+/-=权限字符
    +:向权限范围增加权限代号所表示的权限
    -:向权限范围取消权限代号所表示的权限
    =:向权限范围赋予权限代号所表示的权限
    用户符号: 
    u:拥有者
    g:拥有者同组用
    o:其它用户
    a:所有用户

    实例:

    # chmod u+w test.txt
    # chmod o-x test.txt

    ②三位8进制数字

    实例:

    # chmod 660 test.txt
    # chmod 520 test.txt

    b)chown

    功能:修改文件的拥有者
    格式:chown [参数] 用户名 文件名
    实例:

    # chown user1 f1
    # chown -R user1 filegroup1


    c)chgrp
    
功能:修改文件或目录的所属组
    格式:chgrp [参数] 用户组名 文件名
    常用选项:-R 递归修改文件或目录的所属组
    实例:

    chgrp users /abc/f2

    d)umask
    
功能:
    查看或修改文件掩码
    新建文件夹默认权限=0666
    新建目录默认权限=0777
    但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
    格式:umask 权限值
    说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用
    户默认为0002。

    实例:

    # umask 755
    # umask //查看
    # umask 044//设置

    file指令:
    功能说明:辨识文件类型。
    语法:file [选项] 文件或目录...
    常用选项:
    -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
    -z 尝试去解读压缩文件的内容。

    目录的权限

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

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

    于是, 问题来了~~
    换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
    这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 

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

    粘滞位

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


    一、超级管理员删除
    二、该目录的所有者删除
    三、该文件的所有者删除

    Linux权限总结

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

  • 相关阅读:
    通过篡改cred结构体实现提权利用
    推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现
    软件测试,作为职场新鸟?我该怎么办?看看资深5年测试的见解......
    uniapp微信小程序的代码加固
    使用CEF(六)— 解读CEF的cmake工程配置
    在使用nohup命令后台训练pytorch模型时,关闭ssh窗口导致的训练任务失败解决方法
    物联网概述
    【pyspider】爬取ajax请求数据(post),如何处理python2字典的unicode编码字段?
    【java学习—十五】线程的通信(6)
    【基于stm32f407应用】中断模式串口通讯-USART1
  • 原文地址:https://blog.csdn.net/weixin_63181097/article/details/133321506