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

centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!

在 CentOS 系统中,权限管理是操作系统的核心功能之一,确保不同用户和进程对文件、目录以及设备的访问被合理控制。

权限系统主要包括传统的 Unix 权限模型、特殊权限(SetUID、SetGID、Sticky 位)和更精细的访问控制列表(ACL)。下面将详细介绍 CentOS 系统中的权限配置及其相关机制。

drwxr-xr-x   2 root             root            6 1011 2023 test
-rwxr-xr-x   1 root             root          862 520 2022 all.sh

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6cbc1f8775e748ff9b652c9d05adb06a.png


1. 基本权限模型

1.1 文件权限概述

在 Linux 系统(包括 CentOS)中,每个文件或目录都有三类用户类型的权限:

  • 文件所有者(Owner):创建文件的用户,通常默认是该文件的所有者。
  • 所属组(Group):文件所有者所在的组,组内所有成员共享该文件的权限。
  • 其他用户(Others):系统中不属于文件所有者或组的其他用户。

每个文件的权限分为三种操作:

  • 读权限(r):允许查看文件内容,或列出目录的内容。
  • 写权限(w):允许修改文件内容,或在目录中创建、删除文件。
  • 执行权限(x):允许执行文件(如脚本、二进制程序),或进入某个目录。

1.2 权限表示

权限以两种方式表示:

  • 符号模式:使用字母 rwx 表示每种权限。例如:

    rwxr-xr--
    
    • 前三位:文件所有者的权限(rwx)。
    • 中三位:文件所属组的权限(r-x)。
    • 后三位:其他用户的权限(r--)。
  • 八进制模式:权限也可以用数字表示,每个权限位转换为一个数字。

    • 读权限(r):4
    • 写权限(w):2
    • 执行权限(x):1
    • 无权限(-):0

    例如,rwxr-xr-- 的数字形式为 755

1.3 查看文件权限

使用 ls -l 命令可以查看文件或目录的权限。

ll /path/to/file

输出示例:

-rwxr-xr--  1 user group 4096 Sep 22 10:30 filename
  • -rwxr-xr--:文件权限
  • user:文件所有者
  • group:文件所属组

2. 修改文件权限

使用 chmod 命令

chmod 用来更改文件或目录的权限。

  • 符号模式修改

    chmod u+rwx,g+rx,o-r /path/to/file
    
    • u:所有者(User)
    • g:组(Group)
    • o:其他用户(Others)
    • +:添加权限
    • -:去除权限
  • 八进制模式修改

    chmod 755 /path/to/file  # 所有者有 rwx 权限,组和其他用户有 rx 权限
    
递归修改权限

对于目录及其子目录和文件,使用 -R 参数递归修改权限:

chmod -R 755 /path/to/directory
chmod -R u+rwx,g+rx,o-r /path/to/file

3. 文件所有权配置

文件所有权涉及文件的所有者(用户)和所属组。通过更改文件的所有权,可以控制谁能够访问和修改文件。

3.1 修改文件的所有者和所属组

使用 chown 命令

chown 用于更改文件的所有者和组:

chown user:group /path/to/file
  • user:新的所有者
  • group:新的所属组

如果只更改所属组,可以省略用户部分:

chown :group /path/to/file
递归更改所有权

对目录及其所有子目录和文件进行所有权的递归修改:

chown -R user:group /path/to/directory

注:chown修改仅针对当前已有的文件,后期新建的文件所属仍为创建者,想要永久生效,修改SetGID,如下


4. 特殊权限

特殊权限可以为文件和目录配置额外的安全措施。

4.1 SetUID

  • SetUID(Set User ID):当文件具有 SetUID 位时,执行该文件的用户将临时获得文件所有者的权限。这通常用于程序(如 passwd)在执行时需要具有 root 权限。

    设置 SetUID 位

    chmod u+s /path/to/file
    

4.2 SetGID

  • SetGID(Set Group ID):当文件具有 SetGID 位时,执行该文件的用户将临时获得文件所属组的权限。对于目录,SetGID 位确保新建文件和子目录继承其父目录的组。即,后期新建的文件都属于当前组
    设置 SetGID 位
    chmod g+s /path/to/directory
    

4.3 Sticky 位

  • Sticky 位 通常用于目录,确保只有文件所有者或 root 用户可以删除或重命名该目录中的文件。Sticky 位常见于 /tmp 目录,确保所有用户可以创建文件但不能删除其他用户的文件。

设置 Sticky 位

chmod +t /path/to/directory

4.4 查看特殊权限

使用 ls -l 命令可以查看特殊权限:

  • SetUID 位:文件权限显示为 -rwsr-xr-x
  • SetGID 位:文件权限显示为 -rwxr-sr-x
  • Sticky 位:目录权限显示为 drwxrwxrwt ,若是Others位权限没有“x”,即r - -,则目录权限显示为“-rwxr-xr-T

在这里插入图片描述


5. 访问控制列表 (ACL)权限后出现“+”

ACL(Access Control List)提供比标准 rwx 权限更细粒度的控制,允许你为文件或目录分配特定用户或组的访问权限。可以为文件设置多个用户和组的权限,而不仅仅局限于文件拥有者、组和其他用户。

5.1 作用:

  • 细粒度权限控制: 允许为每个用户和组设置单独的权限,扩展了传统的 Linux 权限模型。例如,你可以为用户 user1 设置 rw 权限,而给 user2 仅设置读权限。

  • 更灵活的访问控制: 标准权限模型只能为文件的所有者、组和其他用户设置权限,而 ACL 则可以为多个用户或组精确设置不同的权限。

  • 继承权限: 在目录上设置的 ACL 可以被子目录和文件继承,简化了大规模的权限管理。

  • 为目录设置默认 ACL(影响新建文件和目录)

5.2 为用户添加权限

setfacl 命令用于设置文件和目录的访问控制列表(ACL),提供比传统权限更细粒度的控制。以下是一些常用参数:

-m: 修改 ACL。用于添加或修改某个用户或组的权限。
-x: 删除 ACL。用于移除特定用户或组的权限。
-b: 删除所有 ACL。将文件的 ACL 设置为默认权限,仅保留标准权限。
-k: 删除默认 ACL。仅移除目录的默认 ACL,而保留用户或组的 ACL。
-d: 设置默认 ACL。用于目录,以便新创建的文件和子目录继承这些 ACL。
-R: 递归地应用 ACL 到目录及其所有子文件和子目录。
-n: 直接使用名称而不解析,以避免在无法解析用户或组时出错。

使用 setfacl 命令修改 ACL。例如,给用户 Bess 添加读写执行权限:

setfacl -m u:Bess:rwx 文件名

权限后出现“+”
在这里插入图片描述
使用 getfacl 命令查看文件或目录的 ACL。

# file: test.tar
# owner: root
# group: root
user::rwx
user:Bess:rwx      # 用户 Bess 的权限
group::r-x
mask::rwx
other::r-x

5.3 为用户组添加权限

setfacl -m g:groupname:rx 文件名

5.4 删除 ACL 权限:

删除用户ACL权限
setfacl -x u:Bess  文件名删除用户组ACL权限
setfacl -x  g:groupname  文件名

6. 默认权限设置 (umask)

  • umask(用户文件创建掩码)用于设置新创建文件和目录的默认权限。它通过限制文件的最大权限,确保文件在创建时不被赋予过高的权限。
  • umask 是一个会话级别的设置,无法直接针对特定文件或目录进行配置。
  • 系统会根据 umask 值“减去”部分权限。

6.1 基本概念

  • 默认权限:

    • 新创建的文件通常默认为 666(可读可写)权限。
    • 新创建的目录默认为 777(可读、可写、可执行)权限。
  • umask 的作用:

    • umask 通过从默认权限中减去 umask 值,来决定新文件和目录的最终权限。
  • umask 值的计算
    umask 值是以八进制形式表示的,通常包含三个数字:

    • 第一个数字(用户的掩码)
    • 第二个数字(组的掩码)
    • 第三个数字(其他用户的掩码)

例如,如果 umask 设置为 022,则:

  • 新文件的权限将为 644666 - 022),即可读可写,但不可执行。
  • 新目录的权限将为 755777 - 022),即可读可写可执行。

6.2 配置 umask

  1. 临时设置:
    临时设置的 umask 仅在当前 shell 会话或命令上下文中有效。一旦退出该会话或执行完该命令,umask 设置将恢复为系统默认值或用户的配置文件中的设置。
    在终端中直接输入 umask 命令。例如:

    umask 027
    
  2. 永久设置:
    希望特定用户在每次登录时自动应用相同的文件权限设置,可以在用户的 shell 配置文件(如 ~/.bashrc 或 ~/.bash_profile)中添加 umask。这确保每次该用户登录时都能保持一致的权限策略。

      • 对于系统级别,可以在用户的 shell 配置文件中(如 /etc/profile/etc/bashrc 中设置)添加:
    umask 027
    

6.1 查看和设置 umask

  • 查看当前 umask

    umask
    
  • 设置 umask

    umask 0022  # 设置新建文件的默认权限为 755(目录)或 644(文件)
    

6.2 永久设置 umask

可以将 umask 写入用户的配置文件(如 ~/.bashrc~/.bash_profile),以确保每次登录时生效:

echo "umask 0022" >> ~/.bashrc
source ~/.bashrc

7. SELinux强制访问控制 (MAC) 机制 (权限后出现“.”

在CentOS系统中,SELinux(Security-Enhanced Linux)的配置涉及多个方面,包括查看状态、修改模式、管理策略等。

7.1 查看SELinux状态

要查看SELinux的当前状态,可以使用sestatus命令。该命令将显示SELinux的开关状态、工作模式以及加载的策略等信息。

sestatus

在这里插入图片描述

输出将包含SELinux是否启用、当前模式(Enforcing、Permissive或Disabled)、加载的策略类型等详细信息。

7.2 修改SELinux模式

SELinux有三种模式:Enforcing(强制执行策略)、Permissive(警告但不阻止操作)和Disabled(禁用)。

① 临时修改模式:
使用setenforce命令可以临时更改SELinux的模式。要将SELinux设置为Enforcing模式:
sudo setenforce 1要将SELinux设置为Permissive模式:
sudo setenforce 0请注意,这些更改在系统重启后会失效。
② 永久修改模式:

要永久更改SELinux的模式,需要编辑/etc/selinux/config文件。

找到SELINUX=一行,并将其值改为 enforcing、permissive或disabled。

要将SELinux设置为Permissive模式:
SELINUX=permissive保存并关闭文件后,重新启动计算机以使更改生效。

7.3 管理SELinux策略

SELinux通过安全上下文来标识和控制进程及数据的访问权限。可以使用以下命令查看和管理安全上下文:

使用ls -Z命令查看文件或目录的安全上下文信息。使用ps -eZ命令查看进程的安全上下文信息。使用chcon命令临时修改文件或进程的安全上下文。例如,要将某个文件的安全上下文更改为system_u:object_r:admin_home_t:s0,可以使用以下命令:
sudo chcon -t admin_home_t /path/to/file

请注意,这种更改是临时的,不会在系统重启后保留。

要进行持久化修改,需要编辑SELinux策略文件或使用semanage、audit2allow等工具生成并应用新的SELinux策略规则。

7.4 注意事项

在修改SELinux配置之前,建议备份原始配置文件,以便在出现问题时能够恢复。
更改SELinux模式或策略可能会影响系统的安全性和稳定性,因此应谨慎进行。
如果不熟悉SELinux的配置和管理,建议咨询经验丰富的系统管理员或参考官方文档。

觉得有用,点赞再走呗~

相关文章:

centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!

在 CentOS 系统中,权限管理是操作系统的核心功能之一,确保不同用户和进程对文件、目录以及设备的访问被合理控制。 权限系统主要包括传统的 Unix 权限模型、特殊权限(SetUID、SetGID、Sticky 位)和更精细的访问控制列表&#xff…...

AI Agent案例全解析:百度营销智能体(8/30)

引言:在当今这个科技飞速发展的时代,AI技术呈现出爆发式的增长,正以前所未有的态势改变着众多行业的发展轨迹,营销领域也不例外。随着市场竞争的日益激烈,传统营销模式逐渐显露出疲态,对于变革的需求愈发迫…...

hive常用函数有哪些

Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的接口,用于数据查询和分析。Hive提供了许多内置函数,这些函数可以分为几种类型,包括: • 字符串函数:用于处理字符串数据。 • concat()&#xff1…...

【Python高级353】python实现多线程版本的TCP服务器

前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。 这里使用多线程开发多任务版的服务端 多任务版本的TCP服务器 来一个客户,就为其创建一个线程 import socket import threadingclass WebServer:# 3、定义一个__ini…...

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法,线程是cpu调度的最小单元 如果当前cpu核数是n,计算密集型线程数一般设为n,io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…...

SpringCloudAlibaba技术栈-Nacos

1、什么是Nacos? Nacos是个服务中心,就是你项目每个功能模块都会有个名字,比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中,其他模块也是这样的。好处是这样能更好地管理项…...

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大…...

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面(地址栏输入chrome://extensions/或者从界面进入): , 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于:谷歌浏览器本身的扩展机制发生了…...

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...

数据库的数据被清除了,该如何恢复?

当数据库的数据被清除时,恢复数据的难度和可能性取决于多种因素,包括数据清除的方式、数据库的类型、是否有备份等。以下是一些常见的数据库数据恢复方法: 一、基于备份的恢复 使用备份文件: 如果数据库有定期的备份&#xff0c…...

【西安电子科技大学考研】25官方复试专业课参考书目汇总

初试已经顺利考完啦、成绩已经公布,现在已经有很多同学来问学长学姐,复试参考书有哪些,复试应该做好哪些准备。故此学长学姐给大家整理好了西安电子科技大学各个学院的复试参考书目录,有需要的同学可以参考一下哈。大家可以结合本…...

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…...

fastjson诡异报错

1、环境以及报错描述 1.1 环境 操作系统为中标麒麟、cpu 为国产鲲鹏服务器。 jdk为openjdk version 1.8.0._242 1.2 错误 com.alibaba.fastjson2.JSONException: syntax error : f at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:6424) at c…...

面经zhenyq

如何去实现分层的动画效果? 在Unity中实现分层的动画效果,可以通过Animator的 Layer 功能实现。以下是详细步骤: 1. 什么是分层动画? 分层动画允许在同一个角色的不同部分同时播放独立的动画。例如: 上半身可以播放…...

GoFrame框架介绍

GoFrame是一款功能强大、设计精良且易用的Go语言开发框架,以下为你详细介绍它的相关特点和内容: ### 框架概述 GoFrame是为了提升Go语言开发者的编码效率以及项目的整体可维护性、可扩展性等而打造的开发框架,它涵盖了从基础的网络通信、数据…...

MapReduce工作流程+Shuffle机制

一、Mapreduce工作流程 (1)数据切片Split。数据切片数决定maptask并行度,默认情况下,一个切片大小块大小。切片不是针对整体数据集,而是针对每一个文件单独切片,所以会有小文件问题(CombineTex…...

JAVA8 Stream API 使用详解

Java 8 引入了 Stream API,它提供了对集合对象进行一系列操作的新方式,包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式,同时支持并行处理。 以下是 Java 8 Stream API 的一些核心概念和使用详解…...

Redis 集群架构:高可用与扩展性

一、引言 在当今数字化时代,数据量呈爆炸式增长,对数据存储和处理的要求也越来越高。Redis作为一款高性能的键值对存储数据库,其集群架构在应对高并发、大数据量场景时展现出了独特的优势,成为众多企业构建高效、稳定系统的关键技…...

Redis数据对象

基本结构图 key和value指向的是redisObject对象 type:标识该对象用的是什么类型(String、List Redis数据结构 SDS SDS有4个属性: len:记录了字符串长度,因此获取字符串长度的时候时间复杂度O(1&#xff…...

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。借助 GitLab,开发…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...