Linux权限控制进阶:ACL、su与sudo的完美结合

news2024/7/4 5:30:09

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Linux的起源与发展

2、什么是ACL 

3、什么是用户切换 

二、Linux传统权限控制

1、用户(User)和组(Group)的概念

2、文件和目录的权限位(rwx) 

3、chown 和 chmod 命令的使用 

三、ACL(Access Control Lists)介绍

1、ACL的定义和用途 

2、getfacl 和 setfacl 命令的使用 

四、用户切换:su 命令

1、su 命令的基本用法

2、su 命令的安全考虑

五、用户切换:sudo 命令

1、sudo 命令的基本概念和用途

2、sudoers 文件的结构和编辑


一、前言

1、Linux的起源与发展


1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他的初衷只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。然而,当他将这个内核发布在Internet上并开放源代码后,全球各地的程序员开始参与到这个项目中来,共同完善这个内核。最终,这个内核被命名为Linux,这个名字是由Linus Torvalds的名字和Unix操作系统的名字组合而成的。

Linux从一开始就坚持源代码的公开和免费使用,任何人都可以对其进行修改和分发。这种开放性和自由性吸引了大量的开发者和用户,使得Linux逐渐成长并成熟起来。如今,Linux已经发展成为一个性能稳定、功能强大的多用户网络操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。同时,Linux也有上百种不同的发行版,如基于社区开发的Debian、ArchLinux,以及基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

2、什么是ACL 

在 Linux 中,ACL 是 Access Control Lists(访问控制列表)的缩写,它是一种用于在文件系统上设置更细粒度权限的机制。通常情况下,Linux 中的文件和目录权限是由文件的所有者、所属组和其他用户来控制的,分别对应于文件的读取、写入和执行权限。然而,有时候需要更加灵活地控制文件和目录的权限,这时就可以使用 ACL。

ACL 允许在文件或目录上设置多个用户或组的权限,以实现更加精细的访问控制。通过 ACL,可以授予或拒绝特定用户或组对特定文件或目录的访问权限,例如读取、写入和执行权限,而不受文件所有者、所属组和其他用户权限的限制。

要使用 ACL,在文件系统上必须启用 ACL 功能。一旦启用,就可以使用命令行工具(如 setfacl 和 getfacl)来查看和设置 ACL。

总的来说,ACL 提供了一种更加灵活和细粒度的权限管理方式,可以更好地满足特定场景下的访问控制需求。

3、什么是用户切换 

在 Linux 系统中,用户切换是指从一个用户身份切换到另一个用户身份的操作。在 Linux 中,常见的用户切换方式包括 su 和 sudo。

su(Switch User):su 命令允许当前用户切换到其他用户账户。默认情况下,如果没有指定要切换到的用户账户,则 su 命令会切换到 root 用户。


sudo(Super User Do):sudo 命令允许普通用户以 root 权限执行特定命令。使用 sudo 命令时,用户需要输入自己的密码而不是目标用户的密码。


用户切换是管理 Linux 系统的常用操作之一。su 命令通常用于临时切换到其他用户账户来执行一系列命令,而 sudo 命令则允许普通用户在需要时以 root 权限执行特定的命令,而不必完全切换到 root 用户。

二、Linux传统权限控制

1、用户(User)和组(Group)的概念

在 Linux 和类 Unix 系统中,用户(User)和组(Group)是管理和控制文件系统访问权限的基本概念。

  • 用户(User):用户是系统中的一个实体,可以是人员、程序或服务。每个用户都有自己的唯一标识符(User ID,UID),通常用数字表示。用户可以拥有自己的个人文件和目录,并且可以被授予特定的权限来访问系统资源。在 Linux 系统中,用户账户的相关信息通常存储在 /etc/passwd 文件中。
  • 组(Group):组是一组用户的集合,通常用于将用户分组以便更方便地管理和控制文件系统的访问权限。每个组都有自己的唯一标识符(Group ID,GID),通常用数字表示。组可以拥有自己的文件和目录,并且可以被授予特定的权限来访问系统资源。在 Linux 系统中,组的相关信息通常存储在 /etc/group 文件中。

用户和组之间的关系是多对多的,即一个用户可以属于多个组,一个组也可以包含多个用户。用户可以使用组的权限来访问与该组相关联的文件和目录。

2、文件和目录的权限位(rwx) 

在 Linux 和类 Unix 系统中,文件和目录的权限位(rwx)用于控制对文件和目录的访问权限。每个文件和目录都有三组权限位,分别表示文件所有者、文件所属组和其他用户的权限。

这三组权限位分别代表以下权限:

  • 读权限(r,表示为数字 4):允许用户读取文件的内容,或者查看目录中的文件列表。
  • 写权限(w,表示为数字 2):允许用户修改文件的内容,或者在目录中创建、删除或重命名文件。
  • 执行权限(x,表示为数字 1):对于文件来说,执行权限表示用户可以运行该文件作为程序;对于目录来说,执行权限表示用户可以进入该目录。

因此,权限位可以组合成如下形式:

  • rwx:代表读、写和执行权限都开启。
  • r-x:代表读和执行权限开启,但写权限关闭。
  • r--:代表只有读权限开启,写和执行权限关闭。

例如,如果某个文件的权限位是 -rwxr-xr--,则表示该文件的所有者具有读、写和执行权限,文件所属组具有读和执行权限,其他用户只有读权限。

在 Linux 系统中,可以使用 ls -l 命令来查看文件和目录的权限位,以及其他相关信息。

 

 

3、chown 和 chmod 命令的使用 

chown 和 chmod 是 Linux 系统中常用的两个命令,用于修改文件和目录的所有者和权限。

chown:该命令用于修改文件或目录的所有者和/或所属组。

chown [OPTIONS] [OWNER][:GROUP] FILE...

  • OWNER:指定新的所有者用户名或用户 ID。
  • GROUP:(可选)指定新的所属组名称或组 ID。
  • FILE:要修改所有者和/或所属组的文件或目录。


chmod:该命令用于修改文件或目录的权限。

chmod [OPTIONS] MODE FILE...

  • MODE:指定新的权限模式,可以使用符号形式(如 u+rwx)或数字形式(如 755)。
  • FILE:要修改权限的文件或目录。 

三、ACL(Access Control Lists)介绍

1、ACL的定义和用途 

ACL 是 Access Control Lists(访问控制列表)的缩写,它是一种在文件系统上设置更细粒度权限的机制。传统的 UNIX/Linux 文件系统权限仅允许您为文件的所有者、所属组和其他用户分配权限,而 ACL 允许您为每个文件或目录指定更多的用户和组,并且可以控制更具体的权限。

1.定义:

  • ACL 定义了文件或目录的额外权限规则,这些规则与传统的基于所有者、所属组和其他用户的权限规则并存。
  • 每个 ACL 条目包含了一个用户或组以及与之相关联的权限。

2.用途:

  • 提供更细粒度的访问控制:ACL 允许管理员为特定用户或组分配特定的权限,而不受传统权限模型的限制。
  • 支持更复杂的权限配置:ACL 允许管理员为不同的用户和组指定不同的权限集,以满足特定的访问需求。
  • 增强文件系统安全性:ACL 可以使管理员更加精确地控制对文件和目录的访问,从而增强文件系统的安全性和可靠性。
  • 支持文件共享和协作:ACL 可以帮助管理员在文件共享和协作环境中管理和控制文件的访问权限,确保只有授权用户能够访问特定文件或目录。

  

2、getfacl 和 setfacl 命令的使用 

getfacl setfacl 是用于管理文件和目录 ACL 的两个命令。它们允许查看和修改文件系统对象的 ACL,以实现更细粒度的访问控制。

getfacl:该命令用于获取指定文件或目录的 ACL。

getfacl [OPTIONS] FILE...

  • OPTIONS:可选参数,用于控制输出格式等。
  • FILE:要获取 ACL 的文件或目录。

示例:
查看文件 file.txt 的 ACL:

getfacl file.txt


查看目录 directory 的 ACL:

getfacl directory


setfacl:该命令用于设置指定文件或目录的 ACL。

setfacl [OPTIONS] ACL_SPEC FILE...

  • OPTIONS:可选参数,用于指定 ACL 的详细设置。
  • ACL_SPEC:ACL 规则,包含用户、组和权限。
  • FILE:要设置 ACL 的文件或目录。

示例:
将用户 user1 添加到文件 file.txt 的 ACL 中,并赋予读写权限:

setfacl -m u:user1:rw file.txt


将组 group1 添加到目录 directory 的 ACL 中,并赋予读权限:

setfacl -m g:group1:r directory


使用 getfacl 和 setfacl 命令,可以轻松地查看和修改文件系统对象的 ACL,实现更灵活、更细粒度的访问控制。

四、用户切换:su 命令

1、su 命令的基本用法

su 命令是 Linux 系统中用于切换用户身份的命令,其基本用法如下:

su [OPTIONS] [USERNAME]

  • OPTIONS:可选参数,用于控制 su 命令的行为。
  • USERNAME:(可选)要切换到的目标用户的用户名或用户 ID。如果未提供,则默认切换到 root 用户。

基本用法示例:

切换到 root 用户,不指定用户名:

su


这将要求您输入 root 用户的密码,然后将您的当前 shell 切换到 root 用户的 shell。
切换到其他用户,指定用户名:

su username


这将要求您输入目标用户的密码,然后将您的当前 shell 切换到目标用户的 shell。
其他常用选项:

  • -:使用 - 选项将会以目标用户的环境启动一个新的 shell,这意味着您将切换到目标用户的家目录,并继承其环境变量。
  • -c:使用 -c 选项可以在切换用户后立即执行指定的命令,而不是启动新的 shell。

例如:

su -c 'command' username


su 命令常用于在 Linux 系统上以其他用户身份执行命令或管理系统。

2、su 命令的安全考虑

在使用 su 命令时,有一些安全考虑需要注意,以确保系统的安全性和稳定性:

1. 避免滥用 root 权限:

  • 使用 su 命令切换到 root 用户意味着您拥有系统中最高级别的权限。因此,应该避免在不必要的情况下滥用 root 权限,只在必要时使用。

2. 避免在公共环境中使用:

  • 在公共环境中使用 su 命令可能存在风险,因为其他人可以观察到您输入的密码。应该尽量避免在公共计算机或网络中使用 su 命令。

   

五、用户切换:sudo 命令

1、sudo 命令的基本概念和用途

sudo 是 Unix 和类 Unix 操作系统中的一个命令,用于以其他用户的身份执行特权命令。它的基本概念和用途如下:

基本概念:

  • sudo 是 "superuser do" 的缩写,它允许普通用户以超级用户(通常是 root 用户)的权限执行特定的命令。
  • sudo 命令通常用于授权普通用户执行特权操作,而不是直接将普通用户切换到超级用户的身份。

用途:

  • 执行特权命令:sudo 允许普通用户以超级用户的权限执行需要特权的命令,例如修改系统配置、安装软件、管理服务等。
  • 授权管理:系统管理员可以通过配置 /etc/sudoers 文件,为特定用户或用户组授予特定的命令执行权限,从而实现对用户权限的精细控制。
  • 审计和日志记录:sudo 可以记录用户执行特权命令的日志,提供审计功能,有助于跟踪用户的操作和行为。

基本用法:

使用 sudo 命令执行特权命令的基本语法如下:

sudo command


这将提示您输入当前用户的密码,并以超级用户的身份执行指定的命令。
可以通过 sudo -u 选项指定要以哪个用户的身份执行命令,

例如:
 

sudo -u username command

2、sudoers 文件的结构和编辑

sudoers 文件是用于配置 sudo 命令的权限规则的文件,它定义了哪些用户可以以超级用户的身份执行特权命令,以及可以执行哪些特权命令。

下面是 sudoers 文件的结构和编辑方法:

文件结构:

  • sudoers 文件由一系列的行组成,每行包含一个权限规则。
  • 每个权限规则由两部分组成:用户规范(User Specification)和命令规范(Command Specification)。
  • 用户规范指定了哪些用户或用户组可以执行特权命令,以及在哪些主机上可以执行。
  • 命令规范指定了允许执行的特权命令。

编辑方法:

  • 编辑 sudoers 文件可以使用 visudo 命令,它会在编辑完成后检查语法错误,并在必要时禁止保存文件以防止破坏系统。
  • 执行以下命令打开 sudoers 文件进行编辑:
sudo visudo


在 sudoers 文件中添加新的权限规则,每行一个规则。常见的规则格式如下:

user_list host_list = command_list

  • user_list:指定了可以执行特权命令的用户或用户组,可以是用户名、用户组名,或 % 开头的用户组。
  • host_list:指定了允许执行命令的主机名或 IP 地址。
  • command_list:指定了允许执行的特权命令,可以是完整的命令路径,也可以是命令别名。

示例:
下面是一个简单的 sudoers 文件示例:

# Allow members of the admin group to execute any command
%admin  ALL=(ALL) ALL

# Allow user1 to restart the Apache service on localhost
user1  localhost=(ALL) /usr/sbin/service apache2 restart

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

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

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

相关文章

C语言 | Leetcode C语言题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int m matrixSize, n matrixColSize[0];int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid /…

6个月小猫成长必备!福派斯无麸质幼猫粮评测

你知道吗&#xff1f;给小猫选择适合的猫粮是一件非常不容易但很重要的事情。那么&#xff0c;对于6个月大的小猫来说&#xff0c;什么样的猫粮是最适合它们的呢&#xff1f;&#x1f431; 我们首先要考虑的是猫粮的营养成分。6个月大的小猫正处于快速生长期&#xff0c;所以需…

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant&#xff1a; ant 官网可下载 http://ant.apache.org ant 环境配置&#xff1a; 解压ant的包到本地目录。 在环境变量中设置ANT_HOME&#xff0c;值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant&#xff1a; sudo apt…

密码学《图解密码技术》 记录学习 第十五章

目录 十五章 15.1本章学习的内容 15.2 密码技术小结 15.2.1 密码学家的工具箱 15.2.2 密码与认证 15.2.3 密码技术的框架化 15.2.4 密码技术与压缩技术 15.3 虚拟货币——比特币 15.3.1 什么是比特币 15.3.2 P2P 网络 15.3.3地址 15.3.4 钱包 15.3.5 区块链 15.3.…

Redis 的数据库管理

Redis 提供了⼏个⾯向 Redis 数据库的操作&#xff0c;分别是 dbsize、select、flushdb、flushall 命令&#xff0c; 我将介绍这些常见的命令。 切换数据库 select dbIndex许多关系型数据库&#xff0c;例如 MySQL ⽀持在⼀个实例下有多个数据库存在的&#xff0c;MySQL 可以…

opencv图像处理详细讲(二)

联通组件分析 联通组件定义&#xff1a;像素值相同&#xff0c;通过四邻域或者八邻域相互连通的像素块。 换句话说&#xff0c;就是使用四邻域或八邻域的连通性&#xff0c;遍历图像的像素&#xff0c;并确定像素值相同并且连通的像素块&#xff0c;将它们标记为一个联通组件 两…

大数据面试题(十):Hive的高频面试考点(二)

文章目录 Hive的高频面试考点 一、请说明Hive中 sort by ,order by ,cluster by ,distribute by各代表什么意思

dockerk8s常用知识点

1、什么是docker 容器化和虚拟化对比 ▪开源的应用容器引擎&#xff0c;基于 Go 语言开发 ▪容器是完全使用沙箱机制,容器开销极低 ▪Docker就是容器化技术的代名词 ▪Docker也具备一定虚拟化职能 docker三大核心&#xff1a; Docker Engine: 提供了一个可以用来运行和管…

C++证道之路第十八章探讨C++新标准

一、复习前面介绍过的C11新功能 1、新类型 C11新增了类型long long 和unsigned long long 新增了类型char16_t 和char32_t 2、统一的初始化 C11扩大了用大括号括起的列表&#xff08;初始化列表&#xff09;的使用范围&#xff0c;使其可以用于所有内置类型和用户定义的类…

大数据Spark教程从入门到精通第三篇:Spark核心模块

一&#xff1a;Spark核心模块 1&#xff1a;概述 Spark最底层的模块是Apache Spark Core&#xff0c;其他的功能都是基于此实现的。 Spark SQL操作结构化数据的模块 Spark Streaming 对流式数据处理的模块。 Spark MLlib对机器学习支持的一个功能模块。学习难度很高 Spark Gra…

dumpsys meminfo 流程中细节

源码基于&#xff1a;Android U 参考&#xff1a; dumpsys meminfo 详解(R) dumpsys meminfo 详解(U) 1. 命令入口 MemBinder frameworks/base/services/core/java/com/android/server/am/AMS.javastatic class MemBinder extends Binder {ActivityManagerService mActivity…

Python-VBA函数之旅-print函数

目录 一、print函数的常见应用场景 二、print函数使用注意事项 三、如何用好print函数&#xff1f; 1、print函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、print函数的常见应…

Prometheus 2: 一个专门评估其他语言模型的开源语言模型(续集)

普罗米修斯的续集来了。 专有的语言模型如 GPT-4 经常被用来评估来自各种语言模型的回应品质。然而,透明度、可控制性和可负担性等考虑强烈促使开发专门用于评估的开源语言模型。另一方面,现有的开源评估语言模型表现出关键的缺点:1) 它们给出的分数与人类给出的分数存在显著差…

Unity射击游戏开发教程:(11)制造敌人爆炸

增加爆炸效果 爆炸一切都变得更好!尤其是当你消灭敌人时。在这篇文章中,我将讨论如何在敌人被击中时为其添加爆炸动画。 在敌人的预制件中,您将需要创建一个新的动画。查看控制动画的动画器,默认情况下将从进入动画到敌人爆炸动画。这意味着,一旦敌人被实例化,敌人爆炸…

02、Kafaka 简介

02、Kafka 简介 1、 Kafka 简介 Apache Kafka 是一个分布式的发布-订阅消息系统&#xff0c;最初由 LinkedIn 公司开发&#xff0c;并在 2010 年贡献给了 Apache 软件基金会&#xff0c;成为一个顶级开源项目。Kafka 设计之初是为了满足高吞吐量、可扩展性、持久性、容错性以…

深度学习中的不确定性量化:技术、应用和挑战综述(一)

不确定性量化(UQ)在减少优化和决策过程中的不确定性方面起着关键作用&#xff0c;应用于解决各种现实世界的科学和工程应用。贝叶斯近似和集成学习技术是文献中使用最广泛的两种UQ方法。在这方面&#xff0c;研究人员提出了不同的UQ方法&#xff0c;并测试了它们在各种应用中的…

10.Java对象内置结构

文章目录 Java对象内置结构1.Java对象的三个部分1.1.对象头1.2.对象体1.3.对齐字节 2.对象结构中核心字段的作用2.1.MarkWord(标记字)2.2.Class Pointer(类对象指针)2.3.Array Length(数组长度)2.4.对象体2.5.对齐字节 3.Mark Word的结构信息3.1.不同锁状态下的Mark Word字段结…

GraphGPT——图结构数据的新语言模型

在人工智能的浪潮中&#xff0c;图神经网络&#xff08;GNNs&#xff09;已经成为理解和分析图结构数据的强大工具。然而&#xff0c;GNNs在面对未标记数据时&#xff0c;其泛化能力往往受限。为了突破这一局限&#xff0c;研究者们提出了GraphGPT&#xff0c;这是一种为大语言…

部署YUM仓库以及NFS共享服务

YUM仓库部署 一.YUM概述 YUM仓库源是一种软件包管理工具&#xff0c;用于在Linux系统上安装、更新和删除软件包。YUM仓库源包含了软件包的元数据信息和实际的软件包文件。用户可以通过配置YUM仓库源&#xff0c;从中下载和安装软件包。 常见的YUM仓库源包括&#xff1a; 本…

pip install dotenv出现error: subprocess-exited-with-error的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…