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系统对普通文件忽略粘滞位设置) 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Python实战案例】爬虫项目实例(附赠源码)

文章目录 声明安装必要的库项目结构技术细节小结 声明 请您遵守网站的robots文件规定,本文目的只是做学习交流使用,包括多个模块,例如数据存储、日志记录、错误处理、多线程或异步请求 安装必要的库 pip install requests beautifulsoup4 sq…

Spring Boot 与 Vue 共筑电影院选票新体验

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

基于java+SpringBoot+Vue的星之语明星周边产品销售网站设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

leetcode - 每日一题 - 3226. 使两个整数相等的位更改次数

位运算 3226. 使两个整数相等的位更改次数 题目 想法 n k 直接返回 0n & k ! k, 直接返回 -1 (从题目来说,只能将位的值 从1改为0,&:只有两个数中位的数都是1,才为1,所以符合答案的一…

宠物空气净化器哪家好?希喂、安德迈、霍尼韦尔除毛能力测评

宠物空气净化器哪家好?最近猫咪们开始换毛了,咱猫咖店里的30多只小家伙们集体换毛,掉毛量超多。为了解决这满屋子的猫毛,我特地买了好几台宠物空气净化器,把它们分散放在店里的各个角落,几乎全天24小时不间…

人才画像系统:助力企业打造动态人才成长体系

在当今竞争激烈的市场环境中,人才已成为企业发展的核心竞争力。为了满足企业发展对人才的需求,人才画像系统应运而生,通过以岗位胜任力模型为基础定义人才标准,多维度采集员工信息进行人才对标和盘点,为企业的人才选拔…

浅谈特朗普上台后对IT行业的影响

想必大家都已经知晓,特朗普在2024年再次上台,本篇文章主要来自网络,如果不喜,请勿喷,主要瞎掰下特朗普上台后对IT行业的影响: 贸易政策和关税:特朗普可能会实施更高的关税,这对IT行业…

⭐DINOv2: Learning Robust Visual Features without Supervision 2023 CVPR

GitHub - facebookresearch/dinov2: PyTorch code and models for the DINOv2 self-supervised learning method. 用于估计图像深度、图像分割、特征提取等视觉任务 前段时间,Meta AI 高调发布了 Segment Anything(SAM),SAM 以交互…

Node.js回调函数以及事件循环使用介绍(基础介绍 三)

回调函数 Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。 例如,我们可以…

Linux系列-进程的属性

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们上一篇文章当中讲到了进程的概念,我们知道进程信息是放到一个tast_struct的结构体当中的,这个结构体也叫做PCB。 PCB是内存级的操作,我们…

PLC单键启停控制的多种写法

题目:编写程序,实现当按下SB1按钮奇数次,灯亮;当按下SB1按钮偶数次,灯灭,即单键启停控制,设计梯形图。 解法一:使用标志位进行自锁互锁 (1)刚上电&#xff0c…

PH热榜 | 2024-11-06

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 Github:https://github.com/LaughingZhu/DevNow 1. MindOne Builder 标语:这是一个“设计优先”的应用构建工具…

11.6 校内模拟赛总结

打的很顺的一场 复盘 7:40 开题,看到题目名很interesting T1 看起来很典,中位数显然考虑二分,然后就是最大子段和;T2 构造?一看数据范围这么小,感觉不是很难做;T3 神秘数据结构;T…

SpringBoot健康监控

文章目录 1_监控-健康监控服务2_监控-Admin可视化3_使用介绍 1_监控-健康监控服务 目的:能够理解健康监控actuator的作用 讲解: 每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景…

时间序列算法---ARIMA

时间序列其他相关参考文章: 时间序列分类任务—tsfresh库 时间序列预测—Prophet python时间序列处理 有季节效应的非平稳序列分析   现代时间序列分析方法主要有两个不同的方向:一个方向是由外向内的分析视角产生的方法是与确定性因素分解相关的方法&…

Java内存模型

Java内存模型 JMM即java memory model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。 JMM体现在以下几个方面 原子性 - 保证指令不受到线程上下文切换的影响(之前的synchornized原理文章有介绍过) 可见性 - 保证指令不会受CPU缓…

软考高级架构 - 8.2 - 系统架构评估 - 超详细讲解+精简总结

8.2-系统架构评估 系统架构评估就是对系统架构的质量进行分析,以便帮助设计者作出架构决策,确保系统能够符合需求。评估方法大致分为三种: 基于问卷或检查表:通过设计好的问卷或清单,收集开发人员和相关人员的…

【LLM】Generative Agents和代码实践

note Generative Agents是2023年斯坦福提出的agent小镇,通过memory->reflection->planning的框架提高NPC的行为目标性,给游戏NPC的灵活设计带来了可能。Generative Agents是一种多智能体交互的框架,它模拟现实中的人类行为。这些Agent…

K. Farm Management 【CCPC2024哈尔滨站】

K. Farm Management 思路: 很容易想到的策略: 给每个作物都安排最短的时长 l l l,剩下的时间作为可支配时间。选择删除收益最高的作物,然后将尽可能多的可支配时间用于这个作物。或者选择删除收益低时间还长的作物,然后将时间解…

智能 ODN 系统研究与设计

智能 ODN 系统研究与设计 摘 要:为了解决ODN面临的光纤错综复杂,故障定位低效等问题,引入电子标签,智能OTDR技术,提出了一种基于电子标签、光纤检测笔和智能OTDR故障监测的智能 ODN 解决方案,并重点讲述了智能ODN系统的…