Linux权限管理和文件属性

目录

1. 权限的概念

2. 权限管理

2.1 文件访问者的分类

2.2 文件类型和访问权限(事物属性) 

2.2.1 文件类型

2.2.2 file指令

2.2.3 基本权限 

3. 文件访问权限的相关设置方法

3.1 chmod

3.2 chown 和 chgrp

3.3 umask 

4. 粘滞位 


1. 权限的概念

  Linux下有两种用户:

  超级用户(root):可以在linux系统下做任何事,不受限制;命令行提示符是 “#”

  普通用户:在Linux下做有限的事;命令行提示符是 “$”

  相关命令:

          增加普通用户:adduser 用户名

          设置密码(不显现):passwd 用户名

          删除用户:userdel -r 用户名

只有拥有root用户权限,才能编辑普通用户;增加的用户家目录文件位于:/home/用户名/

          查看当前登录用户:whoami

          查看当前在线的所有用户:who

  切换用户:su 【用户名】

  (root用户切换到任何用户,不需要密码;普通用户切换到其它用户(包括自己),需要输入其它对应用户的密码)

  或者 su - 以root身份重新登录

  配置普通用户的root权限:

  vim /etc/sudoers

# 添加
用户名     ALL=(ALL)       ALL

  保存退出【命令模式(shift+;):wq!】

  接着就可以root身份执行命令(第一次 和 一定的时间段要验证普通用户的密码):比如:sudo ls

2. 权限管理

2.1 文件访问者的分类

  文件和目录的所有者:u --- User

  文件和目录的所有者所在的组的用户:g --- Group

  其它用户:o --- Others

2.2 文件类型和访问权限(事物属性) 

示例:

如下说明:

2.2.1 文件类型

d:文件夹 

-:普通文件

l:软链接(类似快捷方式)语法:ln -s src(源路径) dec(指向路径)

b:块设备文件:

【  块设备文件用于与硬盘、光驱、U 盘等设备进行交互,它们通常位于 /dev 目录下,如 /dev/vda或sda/dev/vda1或sda1 等; 块设备文件允许用户和程序以块为单位读取或写入数据,是直接访问物理设备的接口

  比如:使用 lsblk 命令可以查看系统中已连接的块设备:

表示我的系统中块设备的情况如下:

  • sr0 是一个大小为 223.6MB 的光盘驱动器的设备文件:可用于读取光盘数据,比如音频 CD、数据 CD/DVD 或者 ISO 镜像文件;或者挂载光盘到文件系统,方便访问和管理光盘中的文件;或者制作镜像,将光盘内容制作成 ISO 文件,便于存档和分享。
  • vda 是一个 40GB 的虚拟磁盘。
    • vda1vda 上的一个 40GB 分区,并已挂载到根目录 /;然后就可以在上面创建使用文件了.

  或者使用 df -h 显示 当前的文件系统使用情况。

  并且:块设备允许在任意位置读取或写入数据(随机读取),而不是像字符设备那样只能顺序访问。这样可以直接定位到设备的任意偏移位置进行读写操作,因此非常适合存储设备的操作需求,比如硬盘和 SSD。 

  测试:sudo dd if=/dev/vda of=output.bin bs=512 count=1 skip=1000 

  说明:

  • dd:是一个用于低级别数据复制的命令。
  • if=/dev/vda:指定输入文件(input file),这里是整个虚拟磁盘设备 vda
  • of=output.bin:指定输出文件(output file),这里是要创建的文件 output.bin
  • bs=512:设置块大小为 512 字节,表示每次读取和写入 512 字节。
  • count=1:表示读取 1 个块(即 512 字节)。
  • skip=1000:跳过输入文件的前 1000 个块(blocks),从第 1001 个块开始读取。

  示例输出: 

  可以使用 xxd output.bin 命令将其以十六进制格式输出:

  小编当前的输出示例:

  (可以看到:小编此次示例读取的数据可能恰好在一个未使用的空间,或者这部分空间没有写入过任何数据,所以都是0)

  也可以使用 hexdump -C output.bin 命令更简洁显示:

  此外,还可以添加新的虚拟磁盘(类似于为计算机购买加装新的硬盘) 或者 在现有的磁盘上划分新的分区(类似于硬盘分区 C / D / E  卷盘)。

  下面,小编新建虚拟机做简单演示(centos7镜像;在创建阶段已经做了简单的手动分区):

  步骤一lsblk查看当前的磁盘分区和剩余空间

  磁盘剩余 16G 未被使用。

  假设现在要用剩下的空间,为超级用户root 和 普通用户nxf 各自专门划分一块区域(假设每人8G),实现:系统文件和用户某些个人数据(私有) 在磁盘区级划分上的隔离管理。

  步骤二使用剩余空间划分新的分区

sudo fdisk /dev/sda

  在 fdisk 命令中执行以下操作:

  • 输入 n 创建一个新分区。
  • 选择 p(主分区,大小创建时确定,不可更改)或 e(扩展分区,允许创建多个逻辑分区并可按需调整和扩展,比如上面的 /dev/sda2的dm-0,dm-1)。选择e
  • 输入分区号(如 3,4等;默认sda*的下一个)。输入3
  • 设置起始扇区(直接按回车使用默认)。
  • 设置结束扇区(直接按回车使用所有剩余空间,或指定大小,例如 +10G)。

  成功:Partition 3 of type Extended and size of 16 GiB is set 

  完成后输入 w 保存更改并退出。

  步骤三:创建逻辑分区

  再次进入fdisk:输入n 创建逻辑分区;选择逻辑分区类型(通常会自动识别为 l);设置起始扇区(回车默认);设置结束扇区(+8G)【逻辑分区从5开始】

  看到输出:Partition 5/6 type Linux and of sze 8 GiB is Set

  使用命令 sudo partprobe 重新加载分区表

  注意:lsblk显示这样:

   这种显示方式可能会让人觉得3/5/6它们是同级的,但实际上,逻辑分区是嵌套在扩展分区内的。这种显示方式是因为工具在展示分区信息时,主要是按分区号顺序排列,而不是按层级关系;可以使用 fdisk -l 查看详细信息:

  步骤四:格式化文件分区 

sudo mkfs.ext4 /dev/vda5  # 对于第一个逻辑分区
sudo mkfs.ext4 /dev/vda6  # 对于第二个逻辑分区

  在选择文件系统时,常见的选项包括:

  1. ext4

    • 优点:稳定性高,性能良好,支持大文件和大容量分区,广泛使用于 Linux 系统。
    • 适用情况:适合大多数用途,包括一般的文件存储和服务器应用。
  2. xfs

    • 优点:高性能,特别适合处理大文件和高并发操作,支持动态扩展。
    • 适用情况:适合需要高性能的应用,如数据库和大数据存储。
  3. btrfs

    • 优点:支持快照、压缩和多种高级功能。
    • 适用情况:适合需要先进特性的环境,但相对较新,可能不如 ext4 和 xfs 稳定。

  推荐:

  • 对于一般用途,推荐使用 ext4,因为它简单易用,兼容性好。
  • 如果你有特定的性能需求,可以考虑使用 xfs

  步骤五:创建挂载点 并 进行挂载 

sudo mkdir /root/private
sudo mkdir /home/nxf/private

//挂载
sudo mount /dev/sda5 /root/private
sudo mount /dev/sd6 /home/nxf/private

//修改目录权限
sudo chown nxf:nxf /home/nxf/private

   步骤六:持久化挂载

   在系统重启(sudo reboot)后依然有效,需要编辑 /etc/fstab 文件: 

  sudo vim /etc/fstab

  末尾添加:

  /dev/sda5        /root/private        defaults        0 0

  /dev/sda6        /home/nxf/private        defaults        0 0

  保存退出。

  至此,就实现了系统文件和用户私有数据的分区(分盘)管理! 

  以后,如果需要解除挂载,可使用 umount 命令 (数据依旧存在,除非格式化);或者调整分区的大小,使用 resize2fs 调整文件系统(e2fsck -f检查修复文件系统)(适用于 ext 文件系统);更新挂载信息...... 

  但是,在实际生产环境中,业务服务器的分区通常会在部署之初就规划好,典型的做法是根据工作负载及预估的增长进行合理分区,并留出一些未分配的空间以备未来扩展。

  如果需要大规模调整或新增分区,通常会选择添加新的磁盘而不是直接调整现有的分区结构。这样做的好处是:

1. 数据安全性

  • 降低风险:调整现有分区可能导致数据丢失或损坏,尤其是在操作不当或出现故障时。添加新磁盘可以避免影响现有数据。

2. 系统稳定性

  • 减少停机时间:在现有分区上进行调整可能需要卸载、重启等操作,这会导致服务中断。添加新磁盘通常不会影响正在运行的服务。

3. 灵活性

  • 便于扩展:添加新磁盘可以根据需求动态扩展存储,而无需改变现有的分区结构。这种灵活性使得系统能够适应不断变化的业务需求。

4. 更好的性能

  • 分散负载:新磁盘可以分散读写负载,从而提高整体性能。将不同的应用程序或数据存储在不同的磁盘上可以提高 I/O 性能。

5. 简化管理

  • 避免复杂性:调整分区可能会增加管理复杂性,特别是在多分区环境中。添加新磁盘使得管理更为简单,特别是当业务需求发生变化时,可以简单地添加新的存储设备。

6. 便于备份与恢复

  • 简化备份策略:独立的磁盘可以专门用于备份数据,便于实施差异化备份、快照等策略,减少恢复时间。

7. 便于监控和维护

  • 独立监控:新磁盘可以单独监控,便于追踪性能问题或故障,有助于及早识别潜在风险。

8. 硬件兼容性

  • 适应性强:有时新技术的硬件(如 NVMe、SSD 等)可以提升性能,而不需要修改现有的分区结构

  ...... 

p:管道(pipe)文件

 允许将一个命令(进程)的输出直接传递作为另一个命令(进程)的输入(单向)。

  通过管道,可以将多个命令组合在一起,以实现复杂的数据处理;通过使用“|”符号实现

  示例1:cat /etc/passwd | cut -d: -f1 | sort | uniq

  这个命令将 /etc/passwd 文件的内容输出的每一行中提取以冒号为分隔符的第一个字段,提取用户名,然后排序(默认升序;-r降序)并去重。

  示例二:

  创建管道文件:mkfifo mypipe

  在终端1运行:cat  > mypipe

  在终端2运行:cat mypipe

  此时,在终端1的输入内容会输出到终端2(终止:ctrl + c) 

  管道文件在linux中的作用有:

  • 进程间通信:(先简单理解成 不同的运行程序记之间)
    • 管道文件允许不同进程之间进行数据交换,提供一种简单的方式来传递信息。
  • 缓冲机制
    • 管道文件在读写之间提供了缓冲,数据写入管道后,如果没有进程读取,它会在管道中保持,直到被读取或达到限制。
  • 同步机制
    • 使用管道时,如果写入端没有数据被读取,写入操作会被阻塞,从而实现了一种基本的同步机制。

  c:字符设备文件

   【例如:键盘,鼠标,串口等,用于表示与硬件设备的交互,它们是通过文件系统提供的接口访问设备的关键;通过字符设备文件,用户和应用程序能够方便地与各种硬件进行通信和控制

  这类文件主要分布在 /dev/ 目录下

  串口(Serial Port)是计算机上一种用于数据传输的接口,允许数据按位(bit)进行逐位传输。广泛用于设备之间的通信,尤其是在早期计算机和外围设备(如鼠标、调制解调器、打印机等)之间。虽然串口在个人电脑上逐渐被USB等接口替代,但它在嵌入式系统、工业控制和一些通信设备中依然被广泛使用。 

  在Linux系统中,串口设备通常表示为 /dev/ttyS*(物理串口)和 /dev/ttyUSB*(USB转串口设备)。

  总结一下 字符设备 的特性:

  • 数据流

    • 字符设备以字节为单位进行读写,数据是以流的形式传输的。
  • 不支持随机访问

    • 字符设备只能顺序访问,不支持随机访问。
  • 无缓冲

    • 字符设备通常是无缓冲的,每次读写操作直接与设备交互。

s:套接字文件

   在Linux中,套接字(Socket)文件是一种用于网络通信的特殊文件类型,允许程序(进程)之间通过网络接口进行数据传输。

  它在操作系统中提供了一种标准化的通信方式(API),用于管理和实现网络连接。

2.2.2 file指令

  功能:识别文件类型

  格式:file [选项] 文件/目录

  常用选项:-C   详细显示指令执行过程,便于排错或分析程序执行的情形。
                    -z    尝试去解读压缩文件的内容。 

2.2.3 基本权限 

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

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

  x(Execute):对文件而言,具有执行文件的权限(如果要像程序一样可运行,还要保证其是可执行的二进制机器语言);对目录而言,具有进入目录的权限

  现在就可以解释一 为什么会存在所属组这个概念:

  在Linux中,所属组是为了实现更灵活和安全的权限管理而设计的,它为文件和资源的访问控制提供了一个中间层次。通过将用户归类到不同组,并为文件分配组权限,Linux可以简化权限管理、而不是为每个用户单独设置权限,便于团队协作,并提高系统安全性。

  所属组的概念支持多用户系统的资源共享,使得团队成员能轻松共享资源,同时确保敏感数据的访问权限得到有效控制。

  举个例子:某游戏公司决定做一款moba游戏,但是在具体玩法,盈利方式等 存在较大分歧,大致分为两大阵营,于是领导决定 分为A/B两组,同时独立制作,最后根据市场测试反馈 决定重点扶持哪组的游戏上线运营。但是公司的资源配置有限,两组必须使用同一服务器资源:此时组内成员就需要数据共享,组外成员无法获取数据;如果领导需要检查工作进度,此时领导的身份就是 Others, 如果不存在组的划分,A/B两组就只能允许 其它用户的读权限,但A和B两组 也是相对的Others,此时也能看到相互的数据;所以,好的办法就是把领导加到各自的组中,确保 数据只在组内可见。

3. 文件访问权限的相关设置方法

3.1 chmod

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

  常用选项:R 递归修改目录下所有文件的权限

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

  命令权限值的格式:

  方式1:用户标识符+/- 权限字符(r/w/x)

        +:增加

        -:取消

        用户标识符:u(拥有者)        g(所属组)        o(其它用户)        a(所有用户)        

  示例:chmod g-w,o+w text

             chmod a+x text

  方式2:三位8进制数字

        比如:- rw- rw- r--  每一个权限位对应一个二进制比特位——> - 110 110 100 转化成十进制就是:664

        所以,640 就是 rw-r-----;775 就是 rwxrwxr-x;......

3.2 chown 和 chgrp

  改变文件的拥有者和所属组:chown [-R] 拥有者:所属组  文件/目录名

  只改变所属组:chown [-R] :所属组 文件/目录名

                   或者 chgrp [-R] 所属组  文件/目录名

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

3.3 umask 

  查看或修改 权限掩码 

  新建普通文件的默认权限:666;目录默认权限;777

  但是,实际上我们看到的并不是这样的,一般普通用户的umask==002,那么新建的普通文件/目录的默认权限是:664 / 775,即去掉 002(000 000 010) 出现的权限;计算(八进制)也可以当成 默认权限(666 / 777)- umask

  示例:umask 077    表示只有拥有者可以编辑

4. 粘滞位 

  当一个目录被设置为 ‘’粘滞位“ 【chmod 用户+t】,则该目录下的文件/目录只能由:

  1. 超级管理员(root)删除

  2. 拥有者删除 

  比如,linux下的/tmp/ 目录常用来存储 临时数据(常见的如日志,缓存,交换文件等,系统重启后被删除),其权限通常为 rwxrwxrwt

  粘滞位只能用于 Others 才能被设置成功

  另外简单提一下,普通文件也可以设置粘滞位,但是其会显示成大写的 T(无实际作用,现代Linux系统对普通文件忽略粘滞位设置) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/907813.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

某些保护措施如反接保护漏电保护为什么用可控硅而不用MOS管

现在很多人了解到MOS的饱和导通时电阻很小。 不过MOS的导通有条件,就是GS电压要求比较高。 在保护方面,我们需要 1,简单可靠,务必不要太复杂 2,触发电压要低,电流要求要小,否则灵敏度达不到…

【力扣专题栏】字母异词分组,如何利用强大的容器(unordered_map)解决该问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//创建哈希表unordered_map<string,vector<string&g…

debian11安装最新rabbitmq

1、使用官网提供系统对应的安装脚本 安装 版本说明&#xff1a; Debian Buster代表Debian 10 Debian Bullseye代表Debian 11 Debian Bookworm代表Debian 12 ‌Debian Trixie代表Debian 13 Debian Sid代表Debian unstable版本 2、新建脚本文件 vim rabbitMq.sh将脚本内容复制到…

K 临近算法

机器学习中的 K 临近算法&#xff0c;计算输入数据与训练集中数据的距离&#xff0c;选取 k 个最近的数据&#xff0c;选中的数据中&#xff0c;那个分类多&#xff0c;那个分类就是最终结果。特征空间的距离有多重测量方法&#xff0c;最常用的就是欧氏距离&#xff0c;公式如…

2025上海市公务员考试报名流程详细教程

2025年上海市公务员考试报名马上就要开始了&#xff0c;有想要参加上海公务员考试的姐妹们&#xff0c;可以提前了解一下考试报名流程&#xff0c;和报名照制作尺寸要求 报名时间&#xff1a;11月2日0:00至11月8日12:00 南核时间&#xff1a;11月2日0:00至11月8日14:00 缴费…

GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库

目录 GPT原理 GPT架构 GPT 主要基于 Transformer 的解码器部分 ChatGPT 等类似的问答系统工作流程如下: 用户输入 文本预处理 模型处理 答案生成 输出回答 当用户向 ChatGPT 输入一个问题后:举例说明 文本预处理: ChatGPT不是通过索引搜索的传统知识库 GPT GPT…

微服务设计模式 — 补偿事务模式(Compensating Transaction Pattern)

微服务设计模式 — 补偿事务模式&#xff08;Compensating Transaction Pattern&#xff09; 定义 在云计算和分布式系统中&#xff0c;管理跨多个微服务或组件的事务一致性是一项极具挑战性的任务&#xff0c;补偿事务模式Compensating Transaction Pattern&#xff09;是一种…

HTML 基础标签——元数据标签 <meta>

文章目录 1. `<meta>` 标签概述2. 属性详解2.1 `charset` 属性2.2 `name` 属性2.3 `content` 属性2.4 `http-equiv` 属性3. 其他常见属性小结在 HTML 文档中,元数据标签 <meta> 是一种重要的标签,用于提供关于文档的信息,这些信息不直接显示在网页内容中,但对于…

Golang | Leetcode Golang题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; func countArrangement(n int) int {f : make([]int, 1<<n)f[0] 1for mask : 1; mask < 1<<n; mask {num : bits.OnesCount(uint(mask))for i : 0; i < n; i {if mask>>i&1 > 0 && (num%(i1) 0 |…

Rust 力扣 - 1297. 子串的最大出现次数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 越短的子串出现的次数越多&#xff0c;我们只需要求某个长度为min_size的子串出现的次数&#xff0c;并且该子串中不重复字符小于等于max_letters的数量 遍历长度长度为min_size的子串&#xff0c;然后将不重复…

[neo4j报错]py2neo.errors.ClientError: [Request.Invalid] Not Found解决方案

报错源代码 g Graph(http://localhost:7687, auth("neo4j", "password"))或许这是从网上复制下来的代码&#xff0c;看上去没什么问题&#xff0c;但实际上 要结合具体的浏览器上的地址来看&#xff0c;具体如下&#xff1a; 看到了吗&#xff0c;这里才…

[ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-windows)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Q:无法连接到此网络

无法连接到此网络 今天上午正用浏览器开始搜索&#xff0c;发现网络出了问题&#xff0c;就去找了相关的视频教程&#xff1a; 这些视频大概说了这几种&#xff1a; 设备管理器-网络适配器-找到含有WIFI的选项-查看是否状态异常control-网络和internet-网络和共享中心-更改适…

【实战篇】requests库 - 有道云翻译爬虫 【附:代理IP的使用】

目录 〇、引言一、目标二、请求参数分析三、响应分析四、编写爬虫脚本【隧道代理的使用】 〇、引言 无论是学习工作、旅游出行、跨境电商、日常交流以及一些专业领域都离不开翻译工具的支持。本文就带大家通过爬虫的方式开发一款属于自己的翻译工具~ 一、目标 如下的翻译接口…

[ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

鸿蒙NEXT开发-学生管理系统小案例(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

keepalived + nginx 实现网站高可用性(HA)

keepalive 一、keepalive简介二、实现步骤1. 环境准备2. 安装 Keepalived3. 配置 Keepalived 双机主备集群架构4. 配置 Nginx5. 启动Keepalived6. 测试高可用性7. 配置keepalived 双主热备集群架构 一、keepalive简介 目前互联网主流的实现WEB网站及数据库服务高可用软件包括&a…

Javase——正则表达式

正则表达式的相关使用 public static void main(String[] args) {//校验QQ号 System.out.println("3602222222".matches("[1-9][0-9]{4,}"));// 校验18位身份证号 System.out.println("11050220240830901X".matches("^([0-9]){7,18}…

数据结构与算法 - 基础

本文首发于 个人博客 程序 数据结构 算法 其实很多同学知道数据结构与算法很重要&#xff0c;但是却不明觉厉。 这里我们看一个简单的题&#xff1a; 对自然数从1到100的求和 最简单的设计无非是&#xff1a; void addNum () { int total 0; for (int i 1; i < 1…

【React 轮子】文本溢出后显示展开/收起按钮

/** hooks* 用于文本展示时判断是否展示 展开/收起按钮 &#xff08;包含监听 文本变化/页面尺寸变换&#xff09;* param { string } text 需要展示的文本* param { number } maxLength 文本最大展示行数* param { number } lineHeight 文本行高 (单位 px) */ import React, …