目录
[一 Linux权限的概念](#一 Linux权限的概念)
[二 Linux权限管理](#二 Linux权限管理)
[1 分类](#1 分类)
[2 权限位](#2 权限位)
[3 文件访问权限的相关设置方法](#3 文件访问权限的相关设置方法)
[4 chown和chgrp](#4 chown和chgrp)
[5 权限值二进制表示方案举例](#5 权限值二进制表示方案举例)
[6 目录权限和缺省权限](#6 目录权限和缺省权限)
[7 如何让两个用户之间进行文件级别的协作呢?(不在同一个私人账号里)](#7 如何让两个用户之间进行文件级别的协作呢?(不在同一个私人账号里))
一 Linux权限的概念
1 linux下有两种用户:超级用户(root)和普通用户
- 超级用户:可以在linux系统下做任何操作,不受任何限制。
- 普通用户:在linux下做有限的事情
- 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。
普通用户和超级用户切换使用su命令
- 超级用户到普通用户:su+用户名,不需要输入密码
- 普通用户到超级用户:方法一:su;方法二:su -,使用su -切换到超级用户会影响当前所在目录,是以超级用户重新登陆一次,su不会影响当前所在目录。
2 sudo指令:是用来进行短暂提权的。比如安装软件到操作系统中,需要管理员root权限,就要使用sudo指令,然后输入当前用户的密码。
常见疑问:用 sudo 指令,然后输入用户自己的密码,岂不是人人都是 root?
答案是否定的,sudo是让信任的人,在特定的范围内,执行特定的管理员任务。
核心区别在于:
- 谁可以用sudo:不是所有人,只有被授权的用户能使用
- 能执行什么命令:不是所有命令,只有被允许的
- 需要什么密码:是自己的密码,但这只是身份验证,不代表拥有 root 权限
linux系统会提供一个类似白名单的东西,在/etc/sudoers中,在这个配置文件中可以看到哪些用户可以在root下修改这个配置文件,添加用户,使其可以使用sudo命令。
3 权限是什么?
权限的本质是:能或不能做某件事情
4 为什么要有权限?
一方面是为了控制用户的行为,防止错误的发生;另一方面要理解:(1)权限首先限制的是"人",你是谁不重要,你扮演了什么角色最重要。我是一个视频软件的观看用户,我不能为这个软件写代码,因为我是用户,没有写代码的权限。(2)我不能在视频软件上写代码,所以权限要求目标必须具备对应的属性。我要访问一个文件,文件天然没有写入属性,所以这种权限可能性就不存在。所以,权限=角色+目标权限属性。
二 Linux权限管理
1 分类
Linux下一切皆文件,正因为面对的都是文件,所以与权限相关的,要么是读(r),要么是写(w),要么是可执行(x)。

文件访问者的分类:拥有者、所属组、other。一个文件的拥有者和所属组通常是有对应的角色的,而这样的角色是由人来扮演的。两者不冲突,是互相补充的。
问题一:怎么不见other呢?
答:other不需要记录。只要匹配时不是拥有者和所属组,就是other。
问题二:什么是所属组?为什么要有所属组?
答:**所属组是一个文件或目录所属的"用户组",组内的所有成员共享对该文件的访问权限。**所属组可以是很多用户组成的一个组,也可以自己成一组,在公司一般都自成一组。为什么要有所属组?举一个场景的例子:假设一家公司有A组和B组同时做一个项目,只有一台机器。A组的张三创建了一个文件code.c,假设A组组长要看张三的代码,如果没有所属组的概念,只能放开other权限,那么B组的李四就也会看到,所以这就无法区分组长和李四的关系。有了所属组,同组成员可以方便的协作,也避免其他组成员访问自己的文件。所以为什么要有所属组的根本原因是为了更精细化的权限管理,首先要有更精细化的身份角色。
文件类型分类:
- d:文件夹
- -:普通文件
- l:软连接
- b:块设备文件(硬盘,光驱)
- p:管道文件
- c:字符设备文件
- s:套接口文件
2 权限位
一个文件的权限往往会说这个文件的拥有者或所属组具备读具备写具备可执行,要将角色和目标属性结合起来才能表达清楚一个完整的权限概念。

-为没有权限,三个位置分别为允许读r/-、允许写w/-、允许执行x/-。顺序不可颠倒!
练习-rw-rw-r-- 1 as as 0 Feb 28 12:00 test.txt 描述这个文件的权限信息是什么?
答:该文件的拥有者为as,拥有者具备读文件写文件但不能执行。该文件的所属组是as,具备读文件写文件但不能执行,other能读不能写不能执行。(通过权限=角色+目标属性来描述)
3 文件访问权限的相关设置方法
使用chmod命令来设置文件的访问权限。
格式:chmod [参数] 权限 文件名
常用选项:R:递归修改目录文件的权限。只有文件的拥有者和root才可以改变文件的权限。
chmod命令权限值的格式:
-
+:向权限范围增加权限代号所表示的权限
-
-:向权限范围取消权限代号所表示的权限
-
=:向权限范围赋予权限代号所表示的权限
-
u:拥有者
-
g:所属组
-
o:其他用户
-
a:所有用户
[as@VM-0-2-centos 2.linux-permission]$ ll
total 0
-rw-rw-r-- 1 as as 0 Mar 5 16:40 test.c//拥有者去掉r权限
[as@VM-0-2-centos 2.linux-permission] sudo chmod u-r test.c [sudo] password for as: [as@VM-0-2-centos 2.linux-permission] ll
total 0
--w-rw-r-- 1 as as 0 Mar 5 16:40 test.c//拥有者增加r权限
[as@VM-0-2-centos 2.linux-permission] chmod u+r test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-rw-rw-r-- 1 as as 0 Mar 5 16:40 test.c//拥有者增加所有权限
[as@VM-0-2-centos 2.linux-permission] chmod u+rwx test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-rwxrw-r-- 1 as as 0 Mar 5 16:40 test.c//所属组增加写权限可执行权限
[as@VM-0-2-centos 2.linux-permission] chmod g+wx test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-rwxrwxr-- 1 as as 0 Mar 5 16:40 test.c//所属组去掉读和可执行权限
[as@VM-0-2-centos 2.linux-permission] chmod g-rx test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-rwx-w-r-- 1 as as 0 Mar 5 16:40 test.c给other增加写权限
[as@VM-0-2-centos 2.linux-permission] chmod o+w test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-rwx-w-rw- 1 as as 0 Mar 5 16:40 test.c//给拥有者减少读权限写权限,所属组增加读权限写权限,other增加读权限
[as@VM-0-2-centos 2.linux-permission] chmod u-rw,g+rw,o+r test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
---xrw-rw- 1 as as 0 Mar 5 16:40 test.c//给所有人增加读权限
[as@VM-0-2-centos 2.linux-permission] chmod a+r test.c [as@VM-0-2-centos 2.linux-permission] ll
total 0
-r-xrw-rw- 1 as as 0 Mar 5 16:40 test.c
几个重点:
(1)能改任何人的文件权限吗?用户只能更改自己的文件权限
(2)没有权限会怎么办?系统会拒绝让我们访问
(3)确定权限信息时,系统会先确定用户是谁,拥有者,所属组,还是other?在centos下,用户角色确定,只确定一次,顺序是:拥有者,所属组,other。
(4)root用户的权限?root不受权限约束
(5)如何理解可执行?可执行权限不等于文件可以执行。可执行权限只是允许你尝试执行这个文件的门票,至于这个文件能不能真的被执行起来,是文件本身的内容决定的。
4 chown和chgrp
chown命令用来修改文件的拥有者,chgrp用来修改文件或目录的所属组
格式:chown [参数] 用户名 文件名;chgrp [参数] 用户组名 文件名
系统默认不允许我们把文件给别人,这是合理的,想要给别人,必须要高权限。所以要加上sudo。
chown user1 f1
chown -R user1 filegroup1
chgrp users /abc/f2
5 权限值二进制表示方案举例
权限可以用三位二进制数字表示,从高到低分别对应rwx。使用chmod 后接8进制,举一个例子就懂了。假设110 110 100,表明要给这个文件拥有者读权限写权限,所属组读权限写权限,other读权限。那么110 110 100对应八进制就是664:
[as@VM-0-2-centos 2.linux-permission]$ chmod 664 test.c
[as@VM-0-2-centos 2.linux-permission]$ ll
total 0
-rw-rw-r-- 1 as as 0 Mar 5 16:40 test.c
其他例子:chmod 444 cmd,给所有人r权限;chmod 777 cmd,给所有人rwx权限;chmod 666 cmd,所有人有w;chmod 000 cmd,所有人权限全没。
6 目录权限和缺省权限
如果我想进入一个目录,需要什么权限?答案是需要x权限!如果对目录没有r,就无法查看(ls)目录里的文件,如果对目录没有w,就无法在指定目录内部新建文件。所以默认新建一个目录,rwx都要有。
理解Linux多用户之间是怎么互相"隔离的":

清晰可见,任何用户(非root),无法进入其他用户的家目录。
如果我们新建一个文件test.c,查看它的权限:

为什么默认权限是这个样子的?事实上对于普通文件来说,起始权限是666,默认不带可执行;对于目录文件来讲,起始权限777,默认带可执行。但是实际上发现不是这个样子,图中是664.因为系统默认会存在一个权限掩码的概念,叫做umask 。这里权限掩码默认是0002,第一位不看,转换为八进制再转换为二进制对应000000010,最终权限=起始权限&(~umask),通过计算转换为权限就是664.。
那么这样就产生了一个问题,umask的存在目的是什么?为什么要有umask?
默认权限由OS自主决定,无法在创建前进行修改,系统可配置,是可以满足灵活需要的一种表现。特殊情况下配置umask,可以控制文件的默认权限,让我们的代码可控。如果没有umask,默认文件权限是666,所有人可读可写,这是个危险的事情,同时有了umask,也不用每次手动chmod了。修改umask用umask+新的权限掩码值就可。这是临时修改,重启就失效了。
7 如何让两个用户之间进行文件级别的协作呢?(不在同一个私人账号里)
[as@VM-0-2-centos ~]$ ls -l /
total 72
lrwxrwxrwx. 1 root root 7 Mar 7 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 8 2024 boot
drwxr-xr-x 2 root root 4096 Nov 5 2019 data
drwxr-xr-x 19 root root 3020 Jan 14 21:36 dev
drwxr-xr-x. 95 root root 12288 Jan 20 21:46 etc
drwxr-xr-x. 5 root root 4096 Jan 18 21:03 home
lrwxrwxrwx. 1 root root 7 Mar 7 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Mar 7 2019 lib64 -> usr/lib64
drwx------. 2 root root 16384 Mar 7 2019 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 4 root root 4096 Nov 11 21:59 opt
dr-xr-xr-x 101 root root 0 Jan 14 21:35 proc
dr-xr-x---. 8 root root 4096 Jan 20 21:46 root
drwxr-xr-x 25 root root 900 Jan 23 17:32 run
lrwxrwxrwx. 1 root root 8 Mar 7 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Jan 18 21:12 sys
drwxrwxrwt. 8 root root 4096 Mar 6 03:27 tmp
drwxr-xr-x. 14 root root 4096 Jan 8 2021 usr
drwxr-xr-x. 20 root root 4096 Jan 8 2021 var
这里说几个重要的,在linux根目录下,
- usr/bin放指令
- boot放与启动相关的配置文件
- dev放设备文件,键盘,显示器
- etc放系统启动后的配置文件
- home是普通用户的家目录
- usr/lib动静态库
- media:媒体设备
- proc:查进程信息
- tmp:放的是系统当中的临时文件
- var:日志
共享类文件放根目录里,创建个目录,不想让非文件的拥有者删对应的文件,那么共享就要为w权限,让任何人都能新建,但是不能让非拥有者删除,所以就推出了权限标志位:t(粘滞位),在root下用chmod o+t 目录 /,这样别人就删不掉你的文件了。注意只能给需要共享的目录添加粘滞位。在根目录中就有tmp路径,就带粘滞位,可以把临时文件放tmp下。
| 问题 | 答案 |
|---|---|
| 共享目录需要什么权限? | 777(所有人可读写执行) |
| 怎么防止别人删我的文件? | 加粘滞位:chmod +t 目录 |
| 怎么看有没有粘滞位? | ls -ld 看最后一位是不是 t |
| 经典案例 | /tmp 目录 |
以上就是有关linux权限的内容了,如果这篇文章对你有用,可以点点赞哦,你的支持就是我写下去的动力,后续会不断更新其他知识。