Linux权限的概念

目录

一.解释一行命令提示符

二.shell命令以及运行原理

三.Linux权限的概念

1.用户分类

2.Linux权限管理

1.文件访问者分类(角色)

2.文件访问权限(目标权限属性)

3.访问角色和目标权限属性的匹配规则

4.权限更改

5.目录文件文件权限认识

6.默认刚创建的权限属性

7.多用户协作


一.解释一行命令提示符

root@VM-0-7-ubuntu:/home#

  • root:当前登录用户 = 超级管理员 root 权限(最高权限,随便改系统文件)
  • @:分隔符,固定格式
  • VM-0-7-ubuntu:你的服务器主机名(买的轻量云默认名字)
  • /home:你现在所在的当前工作目录
  • #:root 用户的命令提示符(普通用户是 $

二.shell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

• 将使用者的命令翻译给核心(kernel)处理。

• 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果再通过内核运行出结果,通过shell解析给用户。

shell命令分为三种:

  1. 内置命令(Built-in)

Shell 自己自带的命令,不用找外部程序

特点:运行最快、不创建新进程

  1. 外部命令(External)

磁盘上真实的 二进制程序文件

特点:

在 /bin /usr/bin 里

运行时会 创建子进程

用 which 命令 能看到位置

3.别名(Alias)

三.Linux权限的概念

1.用户分类

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

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

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

用户切换命令:

1.普通用户切 root:

su # 或 su root

复制代码
lighthouse@VM-0-7-ubuntu:/home$ su
Password: 
root@VM-0-7-ubuntu:/home# whoami
root

2.root 切回普通用户(你的账号):

su lighthouse

3.暂时提权

sudo 要执行的命令

先整一个普通用户无权删除的文件(test1.txt,暂不解释)

普通用户删除权限不足

提升权限:

现在我们有一个问题:如果普通用户可以暂时提升权限,那么和超级用户有什么区别?还是有什么限制提升权限

我们先新建一个普通用户

复制代码
root@VM-0-7-ubuntu:/home# useradd -m ljj
root@VM-0-7-ubuntu:/home# passwd ljj
New password: 
Retype new password: 
passwd: password updated successfully

使用sudo提升权限

复制代码
$ sudo rm test2.txt
[sudo] password for ljj: 

需要创建这个用户时自己的密码,否则无法获得sudo提升权限

所以sudo对于普通用户,是需要root授权的。

2.Linux权限管理

讨论:权限是什么?

权限本质是:能或者不能做什么事情

为什么?

1.控制用户的行为,防止错误的发生

理解:

1.权限首先限制的是角色 (人)

2.权限要求目标必须具备对应的属性

所以:权限=访问角色+目标权限属性

1.文件访问者分类(角色)

1.拥有者:创建这个文件 / 目录的用户,是文件的「主人」

核心特点:默认只有拥有者(或 root)能修改文件的权限、归属,对文件有最高的自主控制权

2.所属组:文件归属的用户组,组内的所有用户,都共享这套组权限

核心特点:用于团队协作,给同组成员统一分配权限,不用逐个给用户单独设置

3.other:除了「拥有者」和「所属组用户」之外,系统里的所有其他用户

核心特点:是系统的「陌生人」权限,通常设置最严格,只给最小必要权限(比如只读)

2.文件访问权限(目标权限属性)

◦ 读(r/4):Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

◦ 写(w/2):Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

◦ 执行(x/1):execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限,不过还有个前提,这个文件还得是可执行文件(程序)

◦ "-" 表示不具有该项权限

还有一种表示方法:8进制表示,可以用1表示,不可以用0表示。

拿上图举个例子:拥有者:r=1,w=1,- =0,所以结果:110

所属组:r=1,- =0,- =0,所以结果:100

other:结果:100

后面有更多讲述相关知识。

3.访问角色和目标权限属性的匹配规则

1.访问角色匹配

过程:

第 1 步:

确定「发起访问的用户身份」

系统先拿到当前操作的用户 UID(用户 ID)和所属的所有组 GID(组 ID)

第 2 步:

第一步匹配:是不是「文件拥有者(u)」

系统拿用户的 UID,和文件的拥有者 UID做对比:

✅ 匹配成功:直接使用「拥有者权限(u 的 rwx)」校验操作,不再进行后续匹配

❌ 匹配失败:进入下一步匹配

第 3 步:

第二步匹配:是不是「文件所属组(g)」

系统拿用户的所有 GID(主组 + 附加组),和文件的所属组 GID做对比:

✅ 匹配成功:直接使用「所属组权限(g 的 rwx)」校验操作,不再进行后续匹配

❌ 匹配失败:进入最后一步

第 4 步:

第三步匹配:默认归为「其他用户(o)」

如果前两步都没匹配上,系统直接将用户归类为「其他用户(other)」,使用「其他用户权限(o 的 rwx)」校验操作。

规则:

1.匹配顺序不可逆:

先匹配拥有者 → 再匹配所属组 → 最后归为其他,一旦匹配成功就不再往下走

比如一个用户既是文件拥有者,又在文件所属组里,只会用拥有者权限,不会用组权限

举例:第一次就匹配到拥有者,但是没有任何权限,所以无法cat

2.组匹配是「或」关系:用户只要在文件所属组里(主组 / 附加组都算),就匹配组权限

拥有者只有一位,但是所属组包括主组和附属组(权限依赖被授予),拥有者可以对其他普通用户授予权限,使其可以有权限参与

创建root文件

复制代码
root@VM-0-7-ubuntu:/home/ljj/mydir# touch test2.txt
root@VM-0-7-ubuntu:/home/ljj/mydir# ll
total 8
drwxrwxr-x 2 ljj  ljj  4096 Apr  5 13:48 ./
drwxr-xr-x 3 ljj  ljj  4096 Apr  5 13:42 ../
-rw-rw-r-- 1 ljj  ljj     0 Apr  5 13:47 test1.txt
-rw-r--r-- 1 root root    0 Apr  5 13:48 test2.txt

创建附属组

复制代码
root@VM-0-7-ubuntu:/home/ljj/mydir# groupadd mygroup
root@VM-0-7-ubuntu:/home/ljj/mydir# usermod -aG mygroup ljj

添加进所属组并且授权

复制代码
root@VM-0-7-ubuntu:/home/ljj/mydir# chown root:mygroup test2.txt
root@VM-0-7-ubuntu:/home/ljj/mydir# chmod g+rw test2.txt

效果

复制代码
root@VM-0-7-ubuntu:/home/ljj/mydir# su ljj
ljj@VM-0-7-ubuntu:~/mydir$ echo "dddd">>test2.txt
ljj@VM-0-7-ubuntu:~/mydir$ cat test2.txt
dddd
ljj@VM-0-7-ubuntu:~/mydir$ ll
total 12
drwxrwxr-x 2 ljj  ljj     4096 Apr  5 13:48 ./
drwxr-xr-x 3 ljj  ljj     4096 Apr  5 13:42 ../
-rw-rw-r-- 1 ljj  ljj        0 Apr  5 13:47 test1.txt
-rw-rw-r-- 1 root mygroup    5 Apr  5 13:56 test2.txt

3.root 特权:UID=0 的 root 用户,完全跳过所有匹配和校验,任何操作都放行

4.权限更改

1.chown------改角色

只有root才能使用chown

1.1 核心定义

chown = 改文件 / 目录的【拥有者 (属主)】+【所属组】

1.2语法

1 只改拥有者 chown 用户名 文件

chown 用户名 文件

2 同时改 拥有者+所属组 chown 用户:组 文件

chown 用户:组 文件

3 只改所属组(等价 chgrp) chown :组 文件

chown :组 文件

举例:

例1.

原文件

复制代码
----rw-r-- 1 lighthouse lighthouse   25 Mar 31 13:05  f3333

修改:

复制代码
lighthouse@VM-0-7-ubuntu:~$ sudo chown ljj f3333

结果:

复制代码
----rw-r-- 1 ljj        lighthouse   25 Mar 31 13:05  f3333

例2:

复制代码
drwxrwxr-x 2 ljj  ljj     4096 Apr  5 13:48 ./
drwxr-xr-x 3 ljj  ljj     4096 Apr  5 13:42 ../
-rw-rw-r-- 1 ljj  ljj        0 Apr  5 13:47 test1.txt
-rw-rw-r-- 1 root mygroup    5 Apr  5 13:56 test2.txt
oot@VM-0-7-ubuntu:/home/ljj/mydir# groupadd myfile
root@VM-0-7-ubuntu:/home/ljj/mydir# usermod -aG myfile ljj
root@VM-0-7-ubuntu:/home/ljj/mydir# chown ljj:myfile test2.txt#更改
root@VM-0-7-ubuntu:/home/ljj/mydir# ll
total 12
drwxrwxr-x 2 ljj ljj    4096 Apr  5 13:48 ./
drwxr-xr-x 3 ljj ljj    4096 Apr  5 13:42 ../
-rw-rw-r-- 1 ljj ljj       0 Apr  5 13:47 test1.txt
-rw-rw-r-- 1 ljj myfile    5 Apr  5 13:56 test2.txt

2.chmod------只改 rwx 权限

1、核心定位

chmod = 改读 / 写 / 执行 (r/w/x) 权限

✅ 文件主人 + root 都能用

2.语法

2.1字母版:

u=属主 g=组 o=其他 a=所有人 chmod u+rwx 文件(加减就行)

chmod u+rwx# 给主人加读写执行 chmod g+rw 文件

chmod g+rw# 给同组加读写 chmod o-r 文件

chmod o-r# 删掉其他人读权限

2.2.数字版(很方便)

r=4 w=2 x=1

chmod 三数字 文件

常用固定搭配:

755:目录标配 → 所有者 7 (rwx),组 5 (r-x),其他 5 (r-x)

644:普通文件标配 → 所有者 6 (rw-),组 4 (r--), 其他 4 (r--)

700:私密专属 → 只有自己能看能用

600:私密文件 → 自己读写,别人碰不到

3.chgrp------只改文件 / 目录的所属组

感觉比不上chown

语法:

单次改单个文件 chgrp 组名 文件名

chgrp 组名 文件名

递归改整个文件夹(含内部所有文件) chgrp -R 组名 目录名

chgrp -R 组名 目录名

5.目录文件文件权限认识

1.角色上是没有什么区别的

2.属性区别

目录的 rwx 不看文件夹本身内容,控制三件事:

① 目录 r → 能不能列出里面的文件(ls)

有 r:可以 ls 目录,看到文件名

无 r:ls 报错 / 看不到文件名

② 目录 w → 能不能增删改里面的文件(关键!)

有 w:可以 新建、删除、重命名、移动目录里的文件

❌ 重点:删文件,看的是【父目录的 w 权限】,不看文件本身!

③ 目录 x → 能不能进入这个目录(cd)

有 x:可以 cd 目录、可以访问里面文件的完整路径

无 x:进不去,哪怕有 r/w 也白搭

root创建文件,删除所有other的操作权限

root的操作

other的操作

6.默认刚创建的权限属性

我们想文件刚创建时权限属性是什么样的?

答:新建文件 / 目录权限,由 默认基础权限 + umask 遮罩 决定

  1. Linux 原始出厂最大权限(硬规则)

普通文件(.txt/.sh 等):原始满权限 666(rw-rw-rw-)

目录:原始满权限 777(rwxrwxrwx)

2.umask

umask 作用:从原始满权限里 屏蔽 某些权限(取反+按位与&操作)

Ubuntu 默认普通用户 /root 常见:root:umask 👉 022

普通用户:umask 👉 022 或 002

先计算一下(以002为准):

普通文件:110 110 110

&~umask:&111 111 101

结果:110 110 100

验证:

我们也可以知道目录文件:

3.自己配置umask

3.1临时生效(当前终端马上用,关窗口就没)

umask 0002

3.2永久全局配置

当前用户

编辑自己的 bash 配置:vim ~/.bashrc

末尾加一行:umask 0002

保存退出,刷新生效:source ~/.bashrc

改系统全局(所有用户都生效,root 操作)

编辑全局配置:

vim /etc/profile

或 vim /etc/bash.bashrc

末尾加:

umask 0022 # root默认安全

或协作用 umask 0002

全局刷新:

source /etc/profile

7.多用户协作

多用户协作只能在根目录下就行,不能在任何一普通用户的家进行

原因:

1.其它普通用户根本进不去其它家目录(没有权限),除非放开权限,那么会带来更多问题

2.很多命令操作只有root权限才行

比如:

创建系统组 groupadd → 只能 root

把别人用户加到附加组 usermod -aG → 只能 root

修改目录 / 文件的所属组(chgrp /chown) 改成「不是自己当前拥有的组」→ 普通用户没权限

所以在普通用户下协作极其麻烦,我们选择在根目录下协作

方式1:把多个普通用户放进附加组

步骤:

  1. 在 / 目录创建共享文件夹

mkdir /share

  1. 创建协作组

groupadd devgroup

  1. 把用户加入协作组(附加组)

usermod -aG devgroup ljj

usermod -aG devgroup lighthouse

  1. 设置目录归属组 + 权限

chown :devgroup /share

chmod 775 /share

缺陷:

文件中,各个用户可以互相删除,万一误删就完了

方式2:全部为other+粘滞位 t

粘滞位 t作用:

只有文件的主人 或 root 才能删除自己的文件,别人不能删!

所以这样就不用担心自己的文件会被其他人删除了

怎么设置:

chmod +t 目录

或者chmod 1777 目录

结果:

drwxrwxrwt 5 root root 4096 ... /tmp

其实根目录下,系统已经提供了可以协作的目录文件,我们可以内部自己开发

相关推荐
炘爚3 小时前
深入解析printf缓冲区与fork进程复制机制
linux·运维·算法
小义_3 小时前
随笔 3(Linux)
linux·运维·服务器·云原生·红帽
cccccc语言我来了4 小时前
Linux(10)进程概念
linux·运维·服务器
伐尘4 小时前
【linux】查看空间(内存、磁盘、文件目录、分区)的几个命令
linux·运维·网络
Deitymoon4 小时前
linux——PV操作
linux
原来是猿5 小时前
Linux进程信号详解(二):信号产生
linux·运维·服务器
Bert.Cai5 小时前
Linux cd命令详解
linux·运维
扑火的小飞蛾6 小时前
Kali Linux 安装 OpenClaw 详细教程
linux·运维·服务器
王琦03186 小时前
第二次作业
linux·运维·服务器