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

初始Linux (2) : 权限

1. su  [用户名]及权限概念

Linux中有两种用户:普通用户、超级用户

超级用户可以再 linux 系统下做任何事情,不受限制;而普通用户只能做有限的事情。

可以使用指令:su -快速进入root账户,但需要输入相关密码。 

      

超级用户可以直接切换到任意普通用户,不需要输入密码:

                                

普通用户的命令行提示是$ 

超级用户的命令行提示是#


如果不想变成root,但是想用root的权限做事(sudo):

                           

sudo指令在配置进配置文件之前是不能被执行的:

必须将用户lsnm添加到配置文件中,lsnm才能使用sudo命令。(此处重点是观察现象)

配置文件属于root


2. 访问者权限

我们将文件访问者称为:“人”

人有三类:拥有者,所属组,other

                                                           

拥有者和所属组的信息都能在文件信息中查看。不是拥有者也不是所属组,即为other

            

           

如上,第一个root是拥有者,第二个root是所属组。

拥有者(u)和所属组(g)区别如下:

在Linux系统中,文件的权限和所有权是通过文件系统来管理的。每个文件和目录都有两个重要的属性:拥有者(Owner)和所属组(Group)。这两个属性对于文件的访问控制至关重要。

1. **拥有者(Owner)**:
   - 文件的拥有者是创建该文件的用户。拥有者对文件有完全的控制权,可以读取、写入和执行文件,也可以更改文件的权限和所有权。
   - 拥有者可以是任何有效的用户账户。

2. **所属组(Group)**:
   - 每个用户都属于一个或多个组。当一个文件被创建时,它会被赋予一个默认的组,通常是创建它的用户的主组。
   - 属于文件所属组的用户可以按照该组的权限来访问文件。例如,如果一个文件的组权限设置为可读,那么所有属于该组的用户都可以读取该文件,但不一定能够写入或执行。


文件的权限要考虑谁在用(人)、以及文件拥有什么属性(文件属性)。

                                         

r-读(文件具有读权限)

w-写(文件具有写权限)

x-执行(文件具有执行权限)

                   

一共十个位置来表示权限,抛开第一个位置表示“文件类型”

其他的三三为一组,第一个为拥有者权限、第二个是所属组权限,第三个是other

有权限就有对应的字母,没权限就是-

                                     

拥有者、所属组、other是一种角色

每一个用户是一个人,角色需要人来扮演,人一定会成为一个角色。


3. 权限的改变

chmod : changemode,用changemode来改变“人”的权限。但是此时我不是文件拥有者,所以"operation not permitted"

                              

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

更改权限的操作:

对拥有者的修改,拥有者名字为u(user),所属组名字为g(group),other名字为o(other)

格式为: chmod  (人)(+或-)(权限) 要改权限的文件名

如:chmod o+rwx file_lsnm    chmod u-x,g+w test.cpp

                           

对g的操作:

                        

也可以使用a(all)直接对所有人操作:

                  

                          


除了以上方法,还有一种八进制改权限的方法:

因为u/g/o的权限由三个位置组成,并且顺序固定,都是rwx,我们使用1代表有权限,0代表无权限。即110  326  777等。

                             

110:001 001 000 , 也就是u、g有x权限,o没有任何权限。

326:011 010 110 , 也就是u有w和x权限,g有w权限,o有r和w权限

777:和 chmod a+rwx filename是一个意思。


 注意有可执行权限文件可以被执行,是两件事情:

                                     

所以就算给了x权限,文件本身不是可执行文件,依然执行不了。

比如一个.txt的文件,不管怎么给x权限,也是无法执行的。

 注意:确定身份的过程只进行一次,并且有序:

                                   

如果你是拥有者并且也是所属组,因为先确定了你是拥有者,所以就不会再往下确定了(最终你是否有访问、阅读或执行的权限就取决于拥有者的权限)。确定身份的顺序是:拥有者、所属组、other


注意:root无视权限:


除了改文件属性,还能改文件的拥有者、所属组(chown chgrp)

chown(依然是只有root或者文件拥有者可以改权限):

                         

chgrp(依然是只有root或者文件拥有者可以改权限):

                                                 

其实只使用一个chown可以同时改拥有者和所属组:

                                            

使用冒号隔开拥有者和所属组。


刚才都是使用root更改每一个文件的权限。但假如我以普通用户的身份,将一份文件的所属权给另一个用户,就会:operation not permitted

普通人“给”不能直接给,给东西应当征求被给东西的人的意见

        

因此,一般要给别人都必须使用sudo指令短暂提升权限。


4. 目录的权限

            

 创建一个文件权限默认是664

 文件夹权限默认是775

先讨论目录的rwx权限:

没有r权限:

                                     

对于目录来讲,没有r权限,依然可以进入该文件夹。

但是会影响我们查看该目录里面的文件列表:

                                      


没有w权限:

                               

不能在文件夹中touch(新建文件)、不能rm文件夹中的东西。具体能否对该文件夹中的文件进行操作,取决于文件的性质。

但是可以进入文件夹,然后操作一个已经存在的文件


没有x权限:

无法进入目录。

总结:

可执行权限 : 如果目录没有可执行权限 , 则无法 cd 到目录中
可读权限 : 如果目录没有可读权限 , 则无法用 ls 等命令查看目录中的文件内容 .
可写权限 : 如果目录没有可写权限 , 则无法在目录中创建文件 , 也无法在目录中删除文件

因此,进入一个目录不需要r或者w的权限

能否进入目录,取决于用户对于该目录是否有x,也就是是否有可执行权限


至于为什么文件夹和文件的权限是775和664:

文件和文件夹的最终权限由起始权限和权限掩码一起组成。

权限掩码:更便于控制文件的起始权限。可以用umask指令来看权限掩码。

                              

目录文件的初始是777,普通文件的初始是666。先按位取反再按位与即可得到最终权限。

指令umask: 

umask
功能
查看或修改文件掩码
新建文件夹默认权限 =0666
新建目录默认权限 =0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask,则实际创建的出来的文件权限是: mask & ~umask
         
                                                      

特殊问题:

1 、就算root在一个用户的文件夹里,比如:/home/lsnm  新建了一个文件。依然可以被lsnm直接删除。

2、除了root,任何人的文件夹都不允许其他人进入,可观察到权限都是700

                          

新建、删除文件,不属于文件自己的权限,而属于文件所在目录的w权限


如果两个账号AB想交互文件:

那么需要找一个既不属于A的目录,也不属于B的目录下才能交互文件。

那么这个文件夹一般会设计成和home在同一个文件夹下,由root新建,然后对other的权限是rwx。那么此时除了A和B,C作为不想参与交互的破坏者能否直接删除该文件夹呢?

[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld 
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit 
logout
为了解决这个不科学的问题 , Linux 引入了粘滞位的概念

5. 粘滞位

假设有一个和home在同一目录下的文件夹叫share_112用于完成文件交互。

         

我们希望大家都能进来使用、交互文件,但是不希望有人恶意破坏。因此对Other的权限要放开,并且+t,让other中的人不能破坏。

                    

粘滞位的本质就是对“删除”进行单独处理

当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

权限是理解Linux操作系统中重要的一环,以后但凡遇到Permission denied,都可以回到此文

http://www.lryc.cn/news/473624.html

相关文章:

  • 在Mac下安装时间序列软件Hector
  • JVM1.8内存模型
  • windows C#-类型系统(上)
  • 【酷狗音乐】逆向登录参数分析
  • Jenkins面试整理-Jenkins Pipeline 是什么?
  • RHCE第三次实验
  • 基于LORA的一主多从监测系统_4G模块上巴法云
  • pip使用
  • Django ORM详解:外键使用(外键逻辑关联)与查询优化
  • 【Python】实战:使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False
  • 【YApi】接口管理平台
  • QNAP威联通NAS忘记密码怎么办?
  • MySQL FIND_IN_SET 函数详解
  • 【零售和消费品&厨房】厨房食材检测图像分割系统源码&数据集全套:改进yolo11-goldyolo
  • 自制田字格word
  • 微软官方 .NET 混淆软件 Dotfuscator
  • 19 Docker容器集群网络架构:二、etcd 集群部署
  • React + SpreadJS 开发时常见问题
  • docker 调用宿主机实现关机
  • 51单片机--- 16*32点阵滚动显示
  • 渗透测试-百日筑基—文件上传篇特征截断渲染%00绕过——下篇
  • 深度学习基础—循环神经网络(RNN)
  • 一二三应用开发平台自定义查询设计与实现系列2——查询方案功能实现
  • Redis 集群 问题
  • PyQt入门指南二十九 QListView列表视图组件
  • cisco网络安全技术第4章测试及考试
  • vue下载安装
  • C++ | Leetcode C++题解之第516题最长回文子序列
  • Python中的`update`方法详解及示例
  • Docker本地安装Minio对象存储