Linux权限

文章目录

  • 一. Linux用户的身份切换
  • 二. Linux权限管理
    • 1. 文件访问者的分类(人)
    • 2. 文件类型和访问权限(事物属性)
      • 文件类型
      • 文件基本权限
    • 3. 文件权限值的表示方法
    • 4. 文件访问权限的相关设置方法
      • 设置文件的访问权限 chmod
      • 修改文件的拥有者 chown
      • 修改文件的所属组 chgrp
      • 查看或修改文件掩码 umask
  • 三. 常见权限三个问题
    • 1. 对于目录而言, 进入一个目录需要什么权限?
    • 2. 为什么创建的普通文件, 默认权限不是 777 ,而是 664
    • 3. 一个文件文件能否被删除, 并不取决于文件本身, 而取决于文件所属目录拥有者是否有写权限(w)

一. Linux用户的身份切换

Linux 下有两种用户: 超级用户和普通用户

  • 超级用户是 root, 是超级管理员, 用户目录是 /root/.
    在Linux系统下做任何事情, 不受限制. 相当于 windows 里面的 administrator
  • 普通用户则是非 root 用户, 用户目录是 /home/xxx, 以在Linux下做有限的事情

如何身份切换?

使用 su 指令进行身份切换

su - 以 root 重新登陆. 将当前工作目录改为 root 家目录
超级用户命令提示符是 #; 普通用户命令提示符则是 $

Linux权限_第1张图片

按住 Ctrl-D 可以退出当前用户的登陆.
每登陆一个用户就会创建一个相对应的 bash 进程, 退出实则是杀死 bash 进程.
本质上, 自己是可以登陆自己的, 两者对应的 bash 进程进程 id 肯定不一样
Linux权限_第2张图片

su 普通用户切换成 root
不同于 su - , su - 是直接将当前工作目录更改为 root 家目录
su 的当前工作目录仍然没有变化

Linux权限_第3张图片

总结
普通用户切换用户(包括 root 和 普通用户)都需要输入目标用户的密码(登陆到root需要root密码, 登录到普通用户需要普通用户密码).
root 切换成普通用户不用验证.


为什么要进行身份切换

普通用户想要进行只能 root 操作的命令, 只能切换为 root 进行操作.

但每次切换会很麻烦
sudo + 原本要输入的指令 , 可以以普通用户身份按 root 权限执行一条命令.
sudo 对当前的指令进行短暂提权, 需要输入当前用户密码.

Linux权限_第4张图片

但是上述操作仍然没有成功, 提示当前用户没有在sudoer file, 这是用户信息列表配置文件, 只有 root 才可以进行修改.

sudoer file 相当于白名单, 但是只能 root 进行修改
用户名在配置文件中, 允许用户使用 sudo
用户名不在配置文件中, 不允许用户使用 sudo

这也就是为什么 sudo 指令只需要输入当前用户密码, 普通用户只有经过 root 管理员现实中同意后, 管理员通过 root 将其添加到配置文件中, 才可以用 sudo

sudo 和 直接切换 root 账号是完全不一样的. root 的密码只能由管理员掌握, 不可能让所有人都能登陆 root, sudo 虽然让指令有 root 权限, 但实际操作的仍然是普通用户, 而非 root 用户.

/etc/sudoers 文件里添加一行将用户添加到root 用户组就可以使用 sudo

在这里插入图片描述

在这里插入图片描述

二. Linux权限管理

什么是权限呢?
权限一定是让不让做这件事.

  1. 权限限制的是身份, 正如在视频网站上面, 有VIP身份才可以看一些视频.
  2. 权限限制的是对应操作对象有没有满足需求的属性, 比如即使是视频网站的VIP身份, 也不可以在上面刷算法题, 敲代码.

在 Linux 下一切皆文件的理念下, 权限就是能不能对文件作出一些操作.即文件权限.

  1. 身份就是Linux群体, 限定的是具体角色.
  2. 属性就是Linux操作对象属性, 文件本身是否可读可写等.

Linux权限_第5张图片

1. 文件访问者的分类(人)

  • 文件和文件目录的所有者: u--User
  • 文件和文件目录所有者所在组的用户: g--Group
  • 其他用户: o--Other

在对应文件属性有所体现
在这里插入图片描述

文件可能属于某个人(拥有者), 也可能属于某个组(所属组).
在文件属性列表中, 没有 other, 因为除去 拥有者和所属组就是 other.

那么这个所属组究竟是什么呢?
所属组的存在方便了文件共享, 如果只有拥有者和other, 那么就只会有完全私有和完全公开两个选择. 如果只想文件多属于一个人, 可以直接将其拉入所属组, 这样可以做到部分公开, 组内共享.

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

Linux权限_第6张图片

文件类型

Linux 文件类型不通过后缀区分(不代表Linux不用后缀), 对于系统来说, 文件分为以下几种

Linux权限_第7张图片

  • 普通文件
    文本, 源代码, 图片, 视频, 库, 可执行文件等.
    在这里插入图片描述

  • 目录文件
    在这里插入图片描述

  • 块设备
    支持随机访问, 例如常见磁盘
    可以在/dev里看到磁盘文件
    在这里插入图片描述

  • 字符设备
    不支持随机访问, 例如键盘, 显示器
    服务器可以在/dev/pts 看到显示器文件
    Linux权限_第8张图片

  • 链接文件
    特别像快捷方式
    库文件有很多链接文件
    在这里插入图片描述

    也可以自己创建链接文件
    Linux权限_第9张图片

  • 管道文件
    可以自己创造管道文件
    Linux权限_第10张图片

    管道文件是 | 的亲兄弟, 终端与终端可以通过管道文件实现通信
    Linux权限_第11张图片


使用 file 命令, 可以查看文件类型

在这里插入图片描述

文件基本权限

  • 读(r/4): Read. 对文件而言, 具有读取文件内容的权限. 对目录而言, 具有浏览该目录的权限.
  • 写(w/2): Write. 对文件而言, 具有修改文件内容的权限. 对目录而言, 具有具有删除移动目录内文件的权限.
  • 执行(x/1): Execute. 对文件而言, 具有执行文件的权限. 对目录而言, 具有进入目录的权限.
  • "-"表示不具有该项权限.

3. 文件权限值的表示方法

Linux表示 说明 八进制表示
r– 只读 4
-w- 仅可写 2
–x 仅可执行 1
rw- 可读可写 6
r-x 可读可执行 5
-wx 可写可执行 3
rwx 可读可写可执行 7
无权限 0

注意

  • 权限表示只能按照 r w x 的顺序表示, 不可以修改顺序, 如果该权限没有, 用 - 代替.
  • r 对应 4; w 对应 2; x 对应 1.
  • 9位文件权限只能按照 拥有者 所属组 其他用户的顺序, 不可以修改顺序

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

注意: 只有文件拥有者和root才可以改变文件的权限

设置文件的访问权限 chmod

指令: chmod
格式: chmod [参数] 权限 文件名
常用选项:

R: 递归修改目录文件的权限

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

+ : 向权限范围增加权限代号所表示的权限
- : 向权限范围取消权限代号所表示的权限
= : 向权限范围赋予权限代号所表示的权限
u : 拥有者 user
g : 拥有者所属组 group
o : 其他用户
a : 所有用户

文件原来的权限属性:
在这里插入图片描述

chmod u-r test.c 减去拥有者读权限
在这里插入图片描述

chmod g-rw test.c 减去所属组读写权限
在这里插入图片描述

chmod u+r,g+rw test.c 加上拥有者读, 所属组读写权限

在这里插入图片描述

chmod a+rwx 所有人加上所有权限
在这里插入图片描述

(2). 三位8进制数字

最高位是拥有者权限
中间位是所属组权限
最低位是其他用户权限

chmod 000 test.c 所有用户无权限
在这里插入图片描述

chmod 421 test.c 拥有者有r, 所属组有w, 其他用户有x
在这里插入图片描述


验证有无权限的对比表现

这是实验文件本来的权限: 拥有者和所属组都可以读写, 其他用户可以读

在这里插入图片描述

首先减去了拥有者的读权限
Linux权限_第12张图片

但是观察文件属性, 此时所属组仍然有读权限, 本用户属于这个所属组, 却被提示权限不够.
原因是系统在判断当前用户属于哪个角色的时候只会匹配一次, 按照 拥有者 所属组 其他用户的顺序进行匹配.
当前用户 usr_1 第一次就匹配到了拥有者, 只要拥有者没有读权限, 那么 usr_1 就没有读权限.
在这里插入图片描述

修改一下该文件的拥有者, 该指令下一段会讲到, 这个时候系统会把 usr_1 匹配成所属组, 文件读取成功
Linux权限_第13张图片

继续操作, 此时显然 test.cpp 没有执行权限, 给拥有者加上 rx 权限

在这里插入图片描述

但是, 想要执行该文件, 却执行失败
Linux权限_第14张图片

一个文件可以被执行, 不仅需要用户有该文件的执行权限, 还需要文件本身可以执行.

Linux权限_第15张图片

修改文件的拥有者 chown

指令: chown
格式: chown [参数] 用户名 文件名

注意如果是普通用户操作, chown 需要有root权限以及验证自己用户的密码

这是文件原来的文件属性

在这里插入图片描述

chown usr_2 file.txt 将文件拥有者改为 usr_2
在这里插入图片描述

此时如果再想修改文件权限, 就不可以了, usr_1 不是该文件的拥有者.
在这里插入图片描述

可以用 chown root:root file.txt 的格式同时修改拥有者和所属组
在这里插入图片描述

修改文件的所属组 chgrp

指令: chgrp
格式: chgrp [参数] 所属组名 文件名

chgrp root file.txt 将文件所属组更改为 root 组

Linux权限_第16张图片

查看或修改文件掩码 umask

指令: umask
格式: umask 权限值
实例:

umask //查看
umask 044 //设置

有关 umask 细节在下面一段会详细讲解.

三. 常见权限三个问题

1. 对于目录而言, 进入一个目录需要什么权限?

可以做个实验, 以此将新创建目录的各权限关闭. 以下所有权限都是相对于拥有者而言的.
在这里插入图片描述

去掉目录的 r 权限, 目录可以进入, 但不可以看目录下文件的属性
Linux权限_第17张图片

去掉目录的 w 权限, 目录可以进入, 但不可以在目录下创建和删除文件
Linux权限_第18张图片

去掉目录的 x 权限, 目录不可以进入.
Linux权限_第19张图片

Linux 一切皆文件, 目录也是文件, 结合 文件=内容+属性 理解, 目录的内容就是该目录下的文件, 目录的属性就是该目录本身的属性.

总结

  1. 目录没有 r 权限, 不可以看目录下的文件属性
  2. 目录没有 w 权限, 不可以创建和删除目录下文件
  3. 目录没有 x 权限, 不可以进入目录

2. 为什么创建的普通文件, 默认权限不是 777 ,而是 664

新创造的普通文件和目录 有其默认权限
Linux权限_第20张图片

普通文件的起始权限是 666. (普通文件并不需要执行)
目录文件的起始权限是 775.

系统是通过权限掩码设置文件默认权限的.

可以通过 umask 查看权限掩码
普通用户是 002, root 用户是 022
在这里插入图片描述在这里插入图片描述

文件的默认权限 = 初始权限 &(~umask)

Linux权限_第21张图片

可以通过 umask 修改默认权限
umask 0421
Linux权限_第22张图片

Linux权限_第23张图片

3. 一个文件文件能否被删除, 并不取决于文件本身, 而取决于文件所属目录拥有者是否有写权限(w)

使用 root 用户在普通用户 usr_1 拥有的目录下创建了一个文件
Linux权限_第24张图片

将该文件的所有权限关闭

在这里插入图片描述

此时只有目录是属于 usr_1 的, 该用户不可查看, 修改该文件的内容
Linux权限_第25张图片

但是, usr_1 可以直接删除该文件
在这里插入图片描述

究其原因, 是因为目录拥有者是该用户, 且该用户有 w 权限

这个特点, 在实现文件共享的时候是致命的.
Linux 系统有一个 /tmp 目录可以进行文件共享, 拥有者和用户组都是 root

在这里插入图片描述

因为用户各自目录的权限都只对自己开放, 为了方便用户间共享文件, /tmp 目录对所有用户都开放权限.
先以 usr_1 的身份创建了一个文件, 将其权限放开给所有人

在这里插入图片描述

以 usr_2 的身份可以对该文件进行读写
在这里插入图片描述

那么这个时候 usr_2 可以删除该文件吗? 答案是不可以.

在这里插入图片描述

明明 usr_2 有该目录的 w 权限, 想对目录的文件进行删除, 却不被允许. 再仔细看一下 /tmp 目录的权限属性. 多的., 是粘滞位.
在这里插入图片描述

这里如果把 /tmp 的粘滞位去掉, usr_2 显然可以删除 usr_1 创建的文件


粘滞位就是为了解决目录的拥有者可以对目录下文件随意删除的致命缺点的.

添加粘滞位指令: 给目录的其他用户权限添加 t
chmod o+t 目录名

这样就能保证只有以下角色可以删除该目录下的文件

  • root 用户
  • 该目录下的文件的所有者

本章完.

你可能感兴趣的:(Linux系统编程及网络编程,linux,运维,服务器)