当前位置: 首页 > news >正文

Linux权限详解

引言

        权限是什么???,你思考过吗。

一、什么是权限?

通俗来说权限是:访问资源时,你是能还是不能《即你有没有权限》

二、在Linux中为什么要有权限?

        因为:Linux是多用户操作系统,Linux同时会有多个人进行登录访问,也有普通用户和root用户之分。

        权限本质是为了更好的进行用户管理。

Eg:A用户不能随便修改其他用户的东西,A用户有修改其他用户东西的权限,A用户才能去修改,A用户没有权限,就不能修改。

三、权限 = 人 + 文件属性

权限是针对特定群体的(限定人的权限) --- 与人有关(普通用户 or root)

目标主题,必须天然具备对应的属性,才能访问(比如:你想在XX视频里写代码,你想在蛋糕店里吃臊子面,......等等,XX视频就是让看的,不能在里面写代码,蛋糕店里面没有卖的臊子面,所以刚刚的要求是不合理的,所有说:目标主题,必须天然具备对应的属性,才能访问),你想运行文本文件,显然是不可能的,文本文件是用来写东西用的,本身不具有运行属性。

        Linux下一切皆文件,所以文件有三大属性:可读(r),可写(w),可执行(x)。所以可以限定某人对特定文件的rwx属性,来限定某人的权限。

1.Linux用户问题

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

  • 超级用户(root):不受权限约束(在Linux下做任何事,百分之99不受限制)(但也不绝对)
  • 普通用户:在Linux下做事情有权限限制
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

命令:su [用户名]

功能:切换用户

        su - :以重新登陆的方式切换到root。

例如:要从root用户切换到普通用户user,则使用su  user(不需要输入密码)。 要从普通用户user切换到root用户则使用  su  root(root可以省略)(需要输入密码),此时系统会提示输入root用户的口令。从普通用户1切换到普通用户2,也需要输入密码,要输入用户2的密码。

# 从root到任意用户,不需要输入密码,直接su 用户名 就行
[root@hcss-ecs-f571 ~]# whoami
root
[root@hcss-ecs-f571 ~]# su zhangsan
[zhangsan@hcss-ecs-f571 root]$ whoami
zhangsan
[zhangsan@hcss-ecs-f571 root]$ 
# 普通用户到root,需要输入密码
[zhangsan@hcss-ecs-f571 root]$ whoami
zhangsan
[zhangsan@hcss-ecs-f571 root]$ su
Password: 
[root@hcss-ecs-f571 ~]# whoami
root# su - 以重新登陆的方式切换成root
[zhangsan@hcss-ecs-f571 ~]$ su -
Password: 
Last login: Thu Aug 21 20:45:19 CST 2025 on pts/5
[root@hcss-ecs-f571 ~]# pwd
/root
[root@hcss-ecs-f571 ~]# 
# 普通用户之间转换需要输入密码
[zhangsan@hcss-ecs-f571 ~]$ su lisi
Password: 
[lisi@hcss-ecs-f571 zhangsan]$ whoami 
lisi

2.普通用户如何做一次root权限的事

        比如:安装软件(拷贝到系统指定的目录下)---> OS不让普通账号进行拷贝,只能由root来操作,所有普通用户怎么安装软件呢?

普通用户可以短暂提高权限

命令:sudo(需要root在文件中配置一下)

功能:使普通用户短暂拥有root权限

使用:在任何命令前加sudo ,以root的权限来运行(需要输入普通用户的密码)。

配置:

[root@hcss-ecs-f571 ~]# ls /etc/sudoers
/etc/sudoers

在root的权限下在这个文件中改一个地方:

进入该文件

[root@hcss-ecs-f571 ~]# vim /etc/sudoers

给zhangsan增加sudo权限,找到root这一行,然后拷贝一下,名字改成zhangsan即可(建议先学一下vim的基本操作再来改)

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
zhangsan        ALL=(ALL)       ALL

在zhangsan账号下,以root身份创建test.txt:

[zhangsan@hcss-ecs-f571 ~]$ sudo touch test.txt
[sudo] password for zhangsan: 
[zhangsan@hcss-ecs-f571 ~]$ ls
test.txt
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw-r--r-- 1 root root 0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ 

疑问:为什么sudo是输入普通用户的密码,而不是root的密码??

答:1.可以使用sudo命令的用户,都配置在了白名单中(普通账号默认是执行不了sudo的),出了事,直接在白名单中找。

        2. 一但要输入root密码,那么sudo命令只能由root来做了,普通用户完全可以登陆root来操作,但是普通用户不应该知道root的密码。

3.Linux角色问题

        权限是依附于角色的!!!

Linux下有三个角色
1.拥有者角色(owner)

2.所属组角色(group)

3.other角色

当我们创建一个text.txt文件时,有下面信息,对应位置有对应的信息:

那么other角色在哪里呢?

        不是文件的拥有者,也不是文件的所属组,就是文件的other角色。

角色是需要有人来扮演的

1.拥有者角色   2.所属组角色   3.other角色,是需要人来扮演的

上面的text.txt的拥有者是root,所属组是root,那么other就是zhangsan或者lisi。

解释一下为什么需要一个所属组

        假设有A,B两个小组,在同一台Linux机器上操作,A和B是竞争关系(“赛马”机制),一天A,B的老板C  要分别看A的内容,那么C是什么角色呢?

        假如没有所属组,那C只能是other组的,一旦A给other组 r(读)的权限,那B也就可以直接看到A的内容了,非常不好。

        所以有了所属组,可以将老板C加入到所属组中来。

4.文件类型:

-:普通文件,源代码,文本,动静态库,可执行

d:目录

I:链接文件(类似于Windows中的快捷方式)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)、

b:块设备文件(例如硬盘,光驱等)

s:套接口文件

5.Linux权限问题

root是不受权限限制的,权限是给普通用户安排的。

Linux中有三个权限:r(只读),w(只写),x(可执行权限)

看下图中,权限与角色的对应关系(三三为一组,一一对应):

以第一组为例(其他类似):

 rw-   : 对应着是否可读,是否可写,是否可执行。三个位置固定。-表示没有该权限。

root可有读,可以写test.txt文件,不可以执行该文件。

四、权限的指令操作

权限 = 人 + 文件属性

可以改人,也可以改文件属性。

1.chmod

功能:设置文件的访问权限

格式:chmod  [参数]  权限文件名

常用选项:

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

• 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式:

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

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

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

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

        ◦ 用户符号:

                ◦ u:拥有者

                ◦ g:拥有者同组用

                 ◦ o:其它用户 

                ◦ a:所有用户 

实例:

[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw-rw-r-- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ chmod u-w test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-r--rw-r-- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod g-rw test1.txt
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-r-----r-- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod o+w test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-r-----rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod a+w test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw--w-rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod u+rwx,g-rwx test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rwx---rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ [zhangsan@hcss-ecs-f571 ~]$ chmod a-rwx test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
---------- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ 

• 三位8进制数字

        用每三位对应的二进制转换成8进制对应的数子来修改(三个bit位对应0-7,所以是8进制数字)

[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw-rw-r-- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod 000 test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
---------- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod 777 test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rwxrwxrwx 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod 666 test1.txt 
[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw-rw-rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ 

疑惑解答,看下面代码:

        zhangsan是所属组的,且所属组有w权限,为什么zhangsan不能写入内容呢?

[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
----rw---- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ echo "aaa" > test1.txt
bash: test1.txt: Permission denied
[zhangsan@hcss-ecs-f571 ~]$ 

因为:用户访问文件的时候,确定自己相对于文件的身份角色,只会验证一次。

        权限只会验证一次,从左往右来验证。zhangsan已经被验证为了拥有者,不会再是所属组了。

关于可执行权限

文件要被执行

2个条件:

1.文件本身就是一个可执行的文件

2.文件本身具有可执行权限 

有了这两个条件,文件才能被执行,否则文件不能被执行。

一个文件即使有可执行权限,但本身不可以被执行,那该文件还是不能被执行。

(给你机会,你不中用)

2.chown

功能:修改文件的拥有者

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

3.chgrp

功能:修改文件或目录的所属组

格式:chgrp  [参数]  用户组名文件名

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

实操:

[root@hcss-ecs-f571 zhangsan]# ll
total 0
-rw-rw-rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt[root@hcss-ecs-f571 zhangsan]# chown root test1.txt 
[root@hcss-ecs-f571 zhangsan]# ll
total 0
-rw-rw-rw- 1 root zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root root     0 Aug 21 21:13 test.txt[root@hcss-ecs-f571 zhangsan]# chgrp root test1.txt 
[root@hcss-ecs-f571 zhangsan]# ll
total 0
-rw-rw-rw- 1 root root 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root root 0 Aug 21 21:13 test.txt[root@hcss-ecs-f571 zhangsan]# chown zhangsan:zhangsan test1.txt 
[root@hcss-ecs-f571 zhangsan]# ll
total 0
-rw-rw-rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[root@hcss-ecs-f571 zhangsan]# 

拥有者 不能 改变拥有者和所属组,为什么???

[zhangsan@hcss-ecs-f571 ~]$ ll
total 0
-rw-rw-rw- 1 zhangsan zhangsan 0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root     0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ chown lisi test1.txt 
chown: changing ownership of ‘test1.txt’: Operation not permitted
[zhangsan@hcss-ecs-f571 ~]$ chgrp lisi test1.txt 
chgrp: changing group of ‘test1.txt’: Operation not permitted
[zhangsan@hcss-ecs-f571 ~]$ 

        这是很合理的,在现实生活中,你给别人东西是不是要征得别人的同意,不能直接给别人,万一是一口黑锅呢!!!

        在Linux中改变拥有者或者所属组,只能是root,或者通过sudo来修改。

五、关于权限的细节问题

1.目录权限问题:“我”进入一个目录需要什么权限?

r:用户是否有权力查看指定目录下的文件属性

w:决定了特定用户是否有权力在该目录下,能否新增,删除文件和修改文件名

x:有x权限可以进入该目录,没有x权限,就进不去。

[zhangsan@hcss-ecs-f571 ~]$ mkdir dir1
[zhangsan@hcss-ecs-f571 ~]$ ll
total 4
drwxrwxr-x 2 zhangsan zhangsan 4096 Aug 22 11:53 dir1
-rw-rw-rw- 1 zhangsan zhangsan    0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root        0 Aug 21 21:13 test.txt[zhangsan@hcss-ecs-f571 ~]$ chmod u-x dir1
[zhangsan@hcss-ecs-f571 ~]$ ll
total 4
drw-rwxr-x 2 zhangsan zhangsan 4096 Aug 22 11:53 dir1
-rw-rw-rw- 1 zhangsan zhangsan    0 Aug 21 23:08 test1.txt
-rw-r--r-- 1 root     root        0 Aug 21 21:13 test.txt
[zhangsan@hcss-ecs-f571 ~]$ cd dir1
-bash: cd: dir1: Permission denied

2.为什么我们新建的目录和普通文件的权限是我们所看到的样子

新建几个文件,会发现为什么权限是这个样子的呢?

[zhangsan@hcss-ecs-f571 dir1]$ touch test.txt
[zhangsan@hcss-ecs-f571 dir1]$ touch hello
[zhangsan@hcss-ecs-f571 dir1]$ mkdir dir01
[zhangsan@hcss-ecs-f571 dir1]$ ll
total 4
drwxrwxr-x 2 zhangsan zhangsan 4096 Aug 22 11:56 dir01
# 7  7  5
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 hello
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 test.txt
# 6  6  4
[zhangsan@hcss-ecs-f571 dir1]$ 

对于普通文件,起始权限是从666开始

对于目录文件,起始权限是从777开始

在Linux中为了对权限进行细粒度控制,Linux中:权限掩码

命令:umask

功能:查看/修改权限掩码

关注后3位即可。

[zhangsan@hcss-ecs-f571 dir1]$ umask
0002

凡是在权限掩码中的权限,最终都应该在起始权限中去掉:

“最终权限” = 起始权限 “去掉” umask

所有实际创建出来的文件权限是 =   起始权限 &  ~umask

[zhangsan@hcss-ecs-f571 dir1]$ umask 000
[zhangsan@hcss-ecs-f571 dir1]$ touch test2.txt
[zhangsan@hcss-ecs-f571 dir1]$ ll
total 4
drwxrwxr-x 2 zhangsan zhangsan 4096 Aug 22 11:56 dir01
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 hello
-rw-rw-rw- 1 zhangsan zhangsan    0 Aug 22 12:11 test2.txt
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 test.txt
[zhangsan@hcss-ecs-f571 dir1]$ 

这里将umask改成000,创建一个test2.txt,发现权限是666。

3.文件权限:---,可以被删吗?粘滞位问题

        在zhangsan的一个目录下,root创建了一个文件,权限是000,zhangsan可以直接把root的文件给删了,因为是在zhangsan的家里,zhangsan可以管理他的文件。

在Linux中一个普通用户不能进入另一个普通用户的家里面

        假如在root里面有个共享目录,zhangsan和lisi都需要管理,一天wangwu来了,把zhangsan和lisi的文件给删了,因为都是other权限,所有可以删除,那怎么解决这个问题呢?

粘滞位

当一个目录被设置为"粘滞位"(用 chmod+t),

则该目录下的文件只能由

1. 超级管理员删除

2. 该目录的拥有者者删除

3. 该文件的拥有者删除

[root@hcss-ecs-f571 dir1]# ll
total 4
drwxrwxr-x 2 zhangsan zhangsan 4096 Aug 22 11:56 dir01
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 hello
-rw-rw-rw- 1 zhangsan zhangsan    0 Aug 22 12:11 test2.txt
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 test.txt[root@hcss-ecs-f571 dir1]# chmod +t dir01
[root@hcss-ecs-f571 dir1]# ll
total 4
drwxrwxr-t 2 zhangsan zhangsan 4096 Aug 22 11:56 dir01
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 hello
-rw-rw-rw- 1 zhangsan zhangsan    0 Aug 22 12:11 test2.txt
-rw-rw-r-- 1 zhangsan zhangsan    0 Aug 22 11:56 test.txt
[root@hcss-ecs-f571 dir1]# 

http://www.dtcms.com/a/344496.html

相关文章:

  • 电子基石:硬件工程师的器件手册 (十三) - 电源管理IC:能量供给的艺术
  • 使用html+css+javascript练习项目布局--创建导航栏
  • 高并发场景数据与一致性的简单思考
  • 理解音频响度:LUFS 标准及其计算实现
  • 在灵码中配置MCP服务
  • Basic Threejs (2)
  • Unity中国小游戏行业沙龙:抖音小游戏平台分析与规划
  • Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy
  • AWS OpenSearch 是什么
  • 复合设计模式
  • 阿里云详解:与 AWS、GCP 的全方位比较
  • openEuler系统中home文件夹下huawei、HwHiAiUser、lost+found 文件夹的区别和作用
  • 农业-学习记录
  • vue中监听页面滚动位置
  • Playwright进阶指南 (5):拦截与模拟网络请求
  • 【LLMs篇】19:vLLM推理中的KV Cache技术全解析
  • SymPy 中抽象函数的推导与具体函数代入
  • 《器件在EMC中的应用》---磁珠在EMC中的应用
  • 一次性密码(OTP)原理及应用
  • 解决 PyTorch 导入错误:undefined symbol: iJIT_NotifyEvent
  • 数据结构之深入探索快速排序
  • Spring Start Here 读书笔记:第10章 Implementing REST services
  • vue vxe-gantt 甘特图自定义任务条样式模板 table 自定义插槽模板
  • 云手机是依靠哪些技术运行的?
  • Shell脚本源码安装Redis、MySQL、Mongodb、PostgreSQL(无报错版)
  • 遥感机器学习入门实战教程|Sklearn案例⑥:网格搜索与超参数优化
  • Logstash——性能、可靠性与扩展性架构
  • Python爬虫实战:构建古籍抄本数据采集分析系统
  • 实验二 Cisco IOS Site-to-Site Pre-share Key
  • LeetCode第55题 - 跳跃游戏