【Linux】Linux权限

Linux权限

Linux下用户的分类

① root:超级用户

② 普通用户:我们新建的用户(adduser)

切换用户

语法:su [用户名]
**功能:**切换用户

例如,

①添加普通用户,使用adduser

②从root用户切换到普通用户user,使用 su user

③从普通用户切换root用户:su rootsu

(此时系统会提示输入root用户的口令。)

④删除普通用户(当前一定要root用户): userdel -r user

su 和 su - 的区别

  • su只是切换了root身份(获得root的执行权限),但Shell环境(环境变量)仍然是普通用户的Shell;
  • su -连用户和Shell环境一起切换成root身份了。(获得了root的环境变量及执行权限)

→只有切换了Shell环境才不会出现PATH环境变量错误。


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

⭐Linux 中的root权限比 Windows中root的权限高

对命令提权

语法:sudo < command >
**功能:**暂时的对一条命令进行提权

(目前我们用adduser新建的用户,没法执行这条指令,因为系统默认不信任(新建的用户不在/etc/sudoers里),除非未来将普通用户添加到系统的信任白名单(/etc/sudoers里)里)

权限的概念

什么叫做"权限"?一件事情是否允许被某个人做

①权限认证的是身份(权限和"人"有关)

②权限也和事物的属性有关(比如,我C盘里的某个.txt文件不能像面包一样被我吃了,因为它不具备这个属性)

超级用户:可以再linux系统下做任何事情,基本不受权限的约束
普通用户:受权限约束,可以在Linux下做有限的事情

Linux权限管理

任何一个人,不论是root还是普通用户,都有可能是拥有者、所属组、其他人

文件访问者的分类(人)

对于一个被创建出来的文件,总会有被访问的一天,在Linux下的访问者(身份)分为三类:拥有者、所属组、other

(注意Linux不会记录other是谁)

1️⃣拥有者u→user

文件和文件目录的所有者:这个文件/文件目录是拥有者的,

2️⃣其他人o→others

外界的访问者,除了拥有者和所属组,其余的都是"others"

3️⃣所属组group

文件和文件目录的所有者所在的组的用户

我们需要组内协同,又不想让other看到

如上图所示

第一个字符表示文件类型

其余的字符从左到右每三个一组,分别代表拥有者权限所属组权限other权限 ,且每个位置的含义是确定的,(r是读权限,w是写权限,x是可执行权限),如果没有对应权限,要将rwx替换成-

我们用来学习租的云服务器大部分都是自己在用,所以我们既是拥有者也是所属组, 当我们一某一个身份去访问某一个文件时, 会自动匹配是拥有者和所属组,若都不是那么就是other
注意❗:如果某个人同时是拥有者和所属组,则匹配拥有者的权限而不是所属组的权限,如下图

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

文件

文件 属性一定要包含:是否可读,是否可写,是否可执行

文件类型

Windows中,文件的类型是通过文件后缀来区分的(比如:.exe/ .mp4/ .txt等等)

而Linux系统中,不以文件名后缀区分文件类型,而是通过ll指令显示的第一个字符区分文件类型的,文件名后缀没有直接的意义(但是不代表它不用这个后缀)如何看待后缀?------看用户需求

-:普通文件(文本,源代码,可执行程序,库基本都属于普通文件)
d:目录文件(目录,directory → d)
b:块设备文件(块,block → b。一般的磁盘文件(例如硬盘、光驱等)都是块设备文件)
c:字符设备文件(字符,character → c。键盘,显示器文件等)
p:管道文件(管道,pipe → p。用来进行通信的文件)

(上面这些最为常见,当然还有其他类型的文件,如l:软链接(类似Windows的快捷方式)、s:套接口文件 等)

示例:

块设备文件

字符设备文件

管道文件

文件的基本权限属性

r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

' - ':对应权限位置,相当于占位符号,表示不具有该项权限

文件权限值的表示方法

字符表示方法

Linux表示 说明
r - - 只读
- w - 只写
- - x 仅可执行
r w - 可读可写
r - x 可读可执行
- w x 可写可执行
r w x 可读可写可执行
- - - 无权限

8进制数值表示方法

字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为对应权限,要么为-,我们把有对应权限的记作1,没有的记作0 → 因此我们可以将这三个字符换为三个二进制位,再换为八进制,如下:

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

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

能更改文件权限的人只能是:

①文件的拥有者

②root

chmod

语法:chmod [参数] 权限 文件名
**功能:**设置文件的访问权限

常用选项:

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

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

chmod命令权限值的格式

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

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限

用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

初始:

将u,g,o设置成无权限,-

给u可读可写可执行权限+

给g可读可写可执行权限+

让g只有可读可写权限=

给所有人的权限设置成可读可写可执行

②三位8进制数字

相当于直接给权限赋值

例如chmod 777 test.c,相当于chmod u=rwx,g=rwx,o=rwx test.c
chmod 664 test.c,相当于chmod u=rw-,g=rw-,o=r-- test.c
chmod 775 empty,相当于chmod u=rwx,g=rwx,o=r-x empty

chown

语法:chown [参数] 用户名 文件名
**功能:**修改文件的拥有者
注意: 给别人文件需要征得别人同意,但是root不需要征得别人同意
常用选项:
-R 递归修改文件或目录的所属组

chgrp

语法:chgrp [参数] 用户组名 文件名
**功能:**修改文件或目录的所属组

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

umask

权限掩码:凡是在umask中出现的权限,不会在最终的文件权限中出现!

语法:umask 权限值
**功能:**查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777

但实际上我们创建的文件和目录,看到的权限往往不是上面这个值:

问题1:起始权限问题

新建普通文件默认权限=0666
新建目录文件默认权限=0777

为什么我们创建文件的默认权限是我们上面看到的这样???

为什么普通文件 : 664

为什么目录文件 : 775

原因就是创建文件或目录的时候还要受到umask的影响

已知掩码=0002(对应二进制是10)

看上去好像是减法------默认权限 - 掩码 = 文件创建好后实际的默认权限

但是对于root:

root下普通文件:

实际644(如上图)对应二进制:110100100

初始: 110110110

umask:000100010

假设是减法

最终应该为110010100,显然与实际110100100不符

root下目录文件:

实际755(如上图)对应二进制:111101101

初始: 111111111

umask:000100010

假设是减法

最终应该为111011101,显然与实际111101101不符

显然,不是简单的减法

实际创建的文件权限 = 起始权限 &( ~umask)

(先把umask按位取反,再和起始权限按位与)

再对照一开始讲的权限掩码的定义,是不是就更好理解了?

问题2:目录权限

对于目录文件:

① 可读权限(r),不影响进入(cd)这个目录,影响的是→是否允许我们(用ls等命令)查看指定目录下的文件内容

②可写权限(w),是否允许我们在当前目录下进行创建,更改,删除

③可执行权限(x):是否允许用户进入(cd)该目录

  1. 普通用户自己的家目录权限是 700,我在我的家目录创建的文件,别人都看不到
  2. 有时候,我们多个用户想进行文件数据的共享,因此我们所建立的共享文件,不能在任何一个人的家目录下
  3. 一个文件能否被删除,并不由文件本身决定,而是由这个文件所处的目录决定
  4. 如果我们去掉了共享目录的w权限,同时我们也就无法创建文件了,那共享目录,"共享"体现在哪里呢?显然,共享目录的w权限不能没有

⭐为什么普通文件起始是666?(没有x权限)普通文件不需要可执行 ,给不能执行的文件 可执行权限没意义,需要的话可以手动给它加上这个权限,毕竟可执行的普通文件是少数

⭐为什么目录文件起始是777?所有的目录都要cd进去,没有可执行权限就进不去

粘滞位

t粘滞位是给目录设置的(一般是共享目录)大家可以在目录中进行各自文件的增删查改,只有文件拥有者和root能删除这个文件,其他人一概不允许,t是一种特殊的x权限!

如下图的tmp目录, 该目录的拥有者和所属组都是root,且other其它人的权限都是没有限制的,也就是说任何人都可以在里头读写文件。唯一与其他目录的不同在于,可执行权限在这里是t (t是一种特殊的x权限)

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

①超级管理员root删除

②该目录的所有者删除(所有者有w权限时)

③该文件的所有者删除

相关推荐
wdxylb4 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20075 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪6 小时前
关于Linux内核中头文件问题相关总结
linux
Lovyk8 小时前
Linux 正则表达式
linux·运维
Fireworkitte9 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil90010 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char10 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
淮北也生橘1211 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
华强笔记14 小时前
Linux内存管理系统性总结
linux·运维·网络
十五年专注C++开发15 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建