当前位置: 首页 > 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,都可以回到此文

相关文章:

初始Linux (2) : 权限

1. su [用户名]及权限概念 Linux中有两种用户:普通用户、超级用户 超级用户可以再 linux 系统下做任何事情,不受限制;而普通用户只能做有限的事情。 可以使用指令:su -快速进入root账户,但需要输入相关密码。 超级用…...

在Mac下安装时间序列软件Hector

1.软件介绍 Hector 是一款开源软件,专用于 GNSS 时间序列数据的处理与分析,广泛应用于地球科学研究。它帮助研究人员从 GNSS 数据中提取长期趋势、周期性成分,并建模噪声特性,用于地壳形变、地震影响和气候变化等方面的研究。Hec…...

JVM1.8内存模型

一、内存模型概览 本文介绍的是JDK1.8的内存模型。1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本质和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是…...

windows C#-类型系统(上)

C# 是一种强类型语言。 每个变量和常量都有一个类型,每个求值的表达式也是如此。 每个方法声明都为每个输入参数和返回值指定名称、类型和种类(值、引用或输出)。 .NET 类库定义了内置数值类型和表示各种构造的复杂类型。 其中包括文件系统、网络连接、对象的集合和…...

【酷狗音乐】逆向登录参数分析

mid、uuid参数 从cookie里面取值kg_mid,没有就生成 dfid也是从cookie里面取的kg_dfid 清空cookie dfid "-"也是可以的 md5加密了一个随机uuid import uuid import hashlibuuid1 str(uuid.uuid4())def md5_encrypt(text):return hashlib.md5(text.enco…...

Jenkins面试整理-Jenkins Pipeline 是什么?

Jenkins Pipeline 是一种将 Jenkins 中的持续集成和持续交付(CI/CD)流程定义为代码的方式。Pipeline 提供了一种灵活、可维护的方式,通过脚本来描述构建、测试、部署等流程。Jenkins Pipeline 使用 Groovy 作为脚本语言,并可以通过 Jenkinsfile 来定义和管理流水线。 Jenki…...

RHCE第三次实验

要求 (1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。 ​ (2)访问缴费网站实现数据加密基于https访问。 架设一台NFS服务器,并按照以下要求配置 1、开放/nfs/shared目录,供所…...

基于LORA的一主多从监测系统_4G模块上巴法云

临时添加一个更新,更换云平台为巴法云,事情的起因是因为阿里云这个老六,早上睡了一觉起来发短信告诉我云平台给我停了,得交钱,好嘛,不过也没办法现在这基本都收费,当然还有onenet可以用&#xf…...

pip使用

pip全称pip install package,是python第三方包sitepackage管理的工具,安装,卸载第三方包。安装python时可以选择安装pip,或自己安装pip 查看pip是否安装:pip --version 安装pip :pip python -m pip install --upgrade…...

Django ORM详解:外键使用(外键逻辑关联)与查询优化

Django数据库迁移 # 创建迁移 python manage.py makemigrations your_app_name # 应用迁移 python manage.py migrate # 查看迁移状态 python manage.py showmigrations # 回滚迁移 python manage.py migrate your_app_name 0001 # 修改表后,删除迁移记录和表删除迁移记录后重…...

【Python】实战:使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False

使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False def exists_in_list(input_string, str_list):# 遍历列表中的每个元素for item in str_list:if item input_string: # 如果当前元素等于输…...

【YApi】接口管理平台

一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台,帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能: API 设计和管理:提供 API 设计和文档生成工具,使开发者能够轻松创建、…...

QNAP威联通NAS忘记密码怎么办?

创作立场:原创不易,拒绝搬运~ hello 大家好,我是你们的老伙伴,稳重的大王~ 如题:在使用QNAP 威联通NAS期间,如果忘记密码,怎么去找回密码呢? 每台QNAP 威联通NAS,在机器…...

MySQL FIND_IN_SET 函数详解

文章目录 1. 基本语法2. 使用场景3. 实战示例3.1 基础查询示例3.2 与其他函数结合使用3.3 动态条件查询 4. 性能考虑5. 常见问题和解决方案5.1 大小写敏感问题5.2 空值处理5.3 模糊匹配 6. 总结 1. 基本语法 FIND_IN_SET 函数的基本语法如下: FIND_IN_SET(str, st…...

【零售和消费品&厨房】厨房食材检测图像分割系统源码&数据集全套:改进yolo11-goldyolo

改进yolo11-RepNCSPELAN等200全套创新点大全:厨房食材检测图像分割系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.30 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系…...

自制田字格word

背景 孩子上小学要开始学认字了,每周有好多字要打印,要是直接拿一张A4纸去打印,字的排版就显得尤为重要,排过来排过去,总感觉不够正式。就想去网上搜一个可以下载的田字格模板。某度搜了半天,倒是搜到一堆…...

微软官方 .NET 混淆软件 Dotfuscator

微软官方 .NET 混淆软件 Dotfuscator 1、前言2、Dotfuscator 特色2.1、强大的保护2.2、不需要顾问2.3、世界一流的支持2.4、广泛的平台支持 3、Dotfuscator 功能介绍3.1、.NET Obfuscator3.2、篡改防御和提示3.3、监控性能和使用情况3.4、Silverpght XAML Obfuscatio3.5、WPF B…...

19 Docker容器集群网络架构:二、etcd 集群部署

文章目录 Docker容器集群网络架构:二、etcd集群离线部署2.1 准备工作2.1.1 上传etcd2.1.2 解压etcd2.1.3 拷贝文件到/usr/local/bin2.1.4 创建相关目录并赋权2.2 创建etcd集群2.2.1 创建etcd配置文件2.2.2 配置etcd服务文件2.2.3 启动ectd服务2.3 查看etcd集群成员2.3.1 查看e…...

React + SpreadJS 开发时常见问题

在使用React与SpreadJS进行开发时,可能会遇到各种各样的问题。以下是一些常见的问题及其解决建议: 1. SpreadJS初始化失败 问题描述: 有时候SpreadJS的初始化可能会失败,特别是在React组件的生命周期内不当的初始化时机。 解决…...

docker 调用宿主机实现关机

Docker调用宿主机关机命令或调用宿主机程序,这涉及到了Docker容器与宿主机之间的通信和资源共享技术。具体来说,这种技术或通讯方式主要通过以下几种方法实现: 一、使用数据卷 Docker允许使用-v或--volume选项将宿主机上的目录或文件挂载到…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...