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

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.kler.cn/a/376566.html

相关文章:

  • 构建灵活、高效的HTTP/1.1应用:探索h11库
  • ssm+vue665基于Java的壁纸网站设计与实现
  • 如何实现指针值的原子操作
  • 消息队列-Rabbitmq(消息发送,消息接收)
  • Hive学习笔记
  • 替代BD63006/罗姆应用于吸尘器⾏⾛轮、卷发器,⽔泵,⼩⻛扇等驱动芯片GC4928介绍
  • Docker:技术架构的演进之路
  • 安卓应用自动化测试工具Appium实操分享
  • 【数据结构-邻项消除】力扣1003. 检查替换后的词是否有效
  • 笔记本电脑死机恢复按什么键恢复 电脑死机的解决方法
  • Python 淘宝数据挖掘与词云图制作全攻略
  • Redis特性和应用场景以及安装
  • 私有化视频平台EasyCVR海康大华宇视视频平台视频诊断技术是如何实时监测视频质量的?
  • 在 Windows 系统上设置 MySQL8.0以支持远程连接
  • ES(ElaticSearch)详解(含工作原理、基本知识、常见问题和优化方法)
  • helm push http: server gave HTTP response to HTTPS client
  • 包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:
  • git入门教程5:git仓库操作
  • 【P2-2】ESP8266 WIFI模块在STA模式下作为TCP客户端与电脑/手机网络助手(TCP服务端)通信——TCP数据透传
  • linux 原子操作
  • spring集成kafka
  • C++ 基础语法 一
  • 计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法
  • 微服务实战系列之玩转Docker(十六)
  • 一文解析axios源码
  • uniapp MD5加密