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

发布于:2024-05-07 ⋅ 阅读:(21) ⋅ 点赞:(0)

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

🏅个人专栏:《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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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