Liunx高级权限详解

基础权限:Liunx文件权限(看完必能懂)-CSDN博客

目录

权限掩码 

umask 的作用

如何查看 umask

umask 的工作原理

设置全局 umask

设置用户级 umask

特殊权限的类型:

1. suid (Set User ID)

2. sgid (Set Group ID)

3. sticky bit(粘滞位)

注意: 

简单理解来讲:

ACL权限

ACL 的主要特性

使用 ACL 的命令

1.setfacl 的使用

2.getfacl 的使用 

特殊权限与ACL的比较

 关于sudo提权——visudo或vim /etc/sudoers

编辑 sudoers 文件的注意事项

 举例:

visudo命令参数如下:

隐藏权限

常见的隐藏权限

使用 lsattr

使用 chattr 修改属性


权限掩码 

umask 是一个在 Unix 和 Linux 系统中用于设置权限掩码的命令或环境变量。它决定了新创建的文件和目录的默认权限,通过限制默认权限,确保系统安全。权限掩码通过减法方式工作,定义哪些权限不能赋予新创建的文件和目录。

umask 的作用

  • 限制默认权限umask 规定了新文件和目录的权限范围,通过减法方式限制权限。
  • 确保安全:通过减少默认权限,umask 有助于防止过度赋权,确保文件和目录的安全。

如何查看 umask

要查看当前的权限掩码,使用 umask 命令:

[root@localhost dev-shell]# umask
0022
[root@localhost dev-shell]# su -l lzz
上一次登录:六 4月 27 00:32:53 CST 2024pts/2 上
[lzz@localhost ~]$ umask
0002

输出结果是一个八进制值,表示权限掩码。例如,如果 umask 的输出是 0022,这意味着新创建的文件和目录的默认权限将受到掩码的限制,即用默认权限减去当前用户的umask,就可以得到创建的文件或者目录的权限数字。

umask 的工作原理

umask 使用八进制数来定义权限掩码。它的值决定了新创建的文件和目录的默认权限。以下是 umask 与文件/目录权限的关系:

  • 文件的权限0666 是文件的默认权限,因此 umask 的值会从 0666 中减去,决定最终权限。
  • 目录的权限0777 是目录的默认权限,同样,umask 的值会从 0777 中减去。

例如,umask0022 时,意味着:

  • 文件的最终权限将是 0666 - 0022 = 0644,即所有者可以读写,其他人只能读取。
  • 目录的最终权限将是 0777 - 0022 = 0755,即所有者可以读、写、执行,其他人和组可以读、执行。

设置全局 umask

在全局配置文件中设置 umask,影响所有用户和进程:

  • 对于 Bash Shell,可以在 /etc/profile/etc/bash.bashrc 中设置。
  • 对于系统服务,可以在 /etc/init.d/ 或其他服务启动脚本中设置。

设置用户级 umask

在用户级配置文件中设置 umask,只影响当前用户:

  • 在用户的 ~/.bashrc~/.profile 中设置。

或使用命令

# 为当前用户设置 umask 为 0022 
[root@localhost dev-shell]# su -l lzz
上一次登录:六 4月 27 00:32:53 CST 2024pts/2 上
[lzz@localhost ~]$ umask
0002
[lzz@localhost ~]$ umask 022
[lzz@localhost ~]$ umask
0022

特殊权限的类型:

suidsgidsticky bit 是传统 Unix/Linux 文件系统中的特殊权限位。

1. suid (Set User ID)

它允许可执行文件以文件所有者的身份运行,常用于系统工具。

常见用途/bin/passwd 是典型的 setuid 文件,它允许用户更改自己的密码而无需拥有超级用户权限。

例:

chmod u+s /usr/bin/rm
#这时给这个rm命令的文件加上suid后,执行者将具有该程序拥有者(owner)的权限,普通用户相当于root用户(即提权)

chmod u-s /usr/bin/rm  #取消提权

2. sgid (Set Group ID)

它在可执行文件上允许程序以文件所属组的身份运行;在目录上则让新文件继承目录的所属组。

常见用途:共享目录,如果目录设置了 setgid,那么所有在该目录中创建的文件会继承目录的组。

例:

把s放到文件的所属用户组的x位置上的话,就是SGID。那么SGID的功能是什么呢?和SUID一样,只是SGID是继承该程序的所属组。
SGID主要用在目录上-----如果用户在此目录下具有w权限的话,使用者在此目录下建立新文件,则创建的这个文件的群组与此目录的群组相同。

chmod g+s /opt/dir1/  #给dir1设置啦sgid权限,则在其目录下创建的所有文件都具有dir1的一样的权限

3. sticky bit(粘滞位)

它主要用于目录,确保目录中的文件只有所有者或目录所有者可以删除或移动

常见用途/tmp 目录通常设置了 sticky bit,确保只有文件所有者才能删除自己的文件。

例:

chmod +t /path/to/directory

这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

注意: 

特权风险:setuidsetgid 可以赋予程序特权,因此要谨慎使用,避免安全风险。确保设置这些权限的文件和程序没有安全漏洞。

权限优先级:特殊权限与传统权限组合使用时,要注意权限的优先级和继承关系。

简单理解来讲:

suid   ====  4   ==== 提权 (只对二进制命令文件生效,其他不管用)
sgid   ====  2   ==== 继承属组权限    (只能对目录设置)
sticky ====  1  ==== (t权限)  权限控制

在以上例子中使用chmod字母参数来设置,当然同样可以使用数字方式创建,如下举例:

chmod u+s /path/to/file
# 设置文件权限为 4755,表示所有者有读、写、执行权限,组和其他人有读、执行权限,并设置了 `setuid`
chmod 4755 /path/to/file

chmod g+s /path/to/directory
# 设置目录权限为 2775,表示所有者和组有读、写、执行权限,其他人有读、执行权限,并设置了 `setgid`
chmod 2775 /path/to/directory

chmod +t /path/to/directory
# 设置目录权限为 1777,表示所有者、组、其他人都有读、写、执行权限,并设置了 `sticky bit`
chmod 1777 /path/to/directory

组合使用
chmod ug+s /path/to/file
# 设置权限为 6755,表示同时设置了 `setuid` 和 `setgid`
chmod 6755 /path/to/file

ACL权限

Access Control Lists (ACL) 是一种用于在 Unix 和 Linux 系统中实现细粒度权限控制的机制。它允许你为文件和目录指定特定用户或组的权限,不仅限于传统的所有者、所属组、和其他人。这种灵活性对于复杂的权限设置非常有用,尤其是在团队协作和多用户环境中。

ACL 的主要特性

  • 细粒度控制:ACL 允许为特定用户和组设置权限,超越传统的权限模型。
  • 兼容传统权限:ACL 与传统的 Unix 权限模型兼容,可以结合使用。
  • 继承和默认 ACL:在目录上,ACL 可以定义默认权限,确保新创建的文件和子目录继承指定的权限。

使用 ACL 的命令

主要有两个命令用于管理 ACL:setfaclgetfacl

  • setfacl:用于设置或修改文件和目录的 ACL。
  • getfacl:用于查看文件和目录的当前 ACL。

1.setfacl 的使用

常见用法示例:

为用户设置权限
# 为用户 alice 设置读、写权限
setfacl -m u:alice:rw /path/to/file

为组设置权限
# 为组 developers 设置读、写、执行权限
setfacl -m g:developers:rwx /path/to/directory

设置默认 ACL
# 为目录设置默认 ACL,确保新创建的文件继承这些权限
setfacl -m d:u:alice:rw /path/to/directory

递归设置 ACL
# 递归设置 ACL,应用到目录及其所有子文件和子目录
setfacl -R -m u:alice:rw /path/to/directory

以下是参数与对应示例:
#-m 或 --modify: 修改现有的 ACL,添加或更改权限。
setfacl -m u:alice:rw /path/to/file  # 为用户 alice 设置读写权限
#-x 或 --remove: 移除指定的 ACL。
setfacl -x u:alice /path/to/file  # 移除用户 alice 的 ACL
#-b 或 --remove-all: 移除文件或目录的所有 ACL。
setfacl -b /path/to/file  # 移除所有 ACL
#-k 或 --remove-default: 移除目录的所有默认 ACL。
setfacl -k /path/to/directory  # 移除目录的默认 ACL
#-R 或 --recursive: 递归应用 ACL 更改到目录及其所有子文件和子目录。
setfacl -R -m u:alice:rw /path/to/directory  # 递归为 alice 设置读写权限
#-n 或 --no-mask: 在修改 ACL 时,不更改权限掩码。
setfacl -n -m u:alice:rw /path/to/file  # 设置 ACL 不影响权限掩码
#-d 或 --default: 设置默认 ACL,主要用于目录,确保新创建的文件和子目录继承指定的权限。
setfacl -m d:u:alice:rw /path/to/directory  # 为目录设置默认 ACL

 指定特定用户、组、或其他实体:

  • u: 指定用户权限。
  • g: 指定组权限。
  • o: 指定其他人的权限。
  • r: 读权限。
  • w: 写权限。
  • x: 执行权限。

2.getfacl 的使用 

查看文件或目录的当前 ACL:
# 查看文件的 ACL,这里换成你想看的文件路径
getfacl /path/to/file


#-a 或 --all:显示所有权限,包括默认 ACL 和文件系统的基本权限。
getfacl --all /path/to/file

#-d 或 --default:仅显示默认 ACL。默认 ACL 主要用于目录,指示在该目录中创建的新文件和子目录应#继承的权限。
getfacl --default /path/to/directory

#-R 或 --recursive:递归显示目录及其所有子文件和子目录的 ACL。
getfacl -R /path/to/directory

#-n 或 --no-name:使用用户和组的数字 ID 显示,而不是将其解析为用户和组的名称。对于大型用户/组数据库或疑难解答时很有用。
getfacl -n /path/to/file

# --tabular:以表格形式输出 ACL 信息。对于脚本处理和数据提取非常有用。

#getfacl --tabular /path/to/file
#显示文件的 ACL
#最简单的用法是直接查看某个文件或目录的 ACL:
getfacl /path/to/file
#这将显示文件的所有者、组,以及当前的 ACL 权限。

#显示默认 ACL
#要查看目录的默认 ACL,可以使用 -d 参数:
getfacl -d /path/to/directory
#这会显示目录的默认 ACL,即在该目录中新创建的文件和子目录继承的权限。

#递归显示 ACL
#递归显示某个目录及其所有子目录和子文件的 ACL:
getfacl -R /path/to/directory

特殊权限与ACL的比较

  • 用途:特殊权限用于赋予文件和目录特定行为特性,满足特定场景需求;ACL 用于细粒度的权限控制。
  • 灵活性:ACL 更灵活,可以为不同用户和组设置特定权限;特殊权限通常针对特定行为,如 setuidsetgidsticky bit
  • 配置方法:特殊权限通过 chmod 设置;ACL 通过 setfacl 设置。
  • 应用场景:特殊权限在系统级别和共享环境中使用;ACL 在复杂的权限设置和团队协作中使用。

suidsgidsticky bit 是文件系统的特殊权限位,定义了文件或目录的特定行为。而 ACL 是一种扩展的权限模型,允许为特定用户或组设置精细的权限。两者在概念和用途上不同,ACL 提供更灵活的权限控制,而特殊权限位用于特定场景中的特殊需求。

 关于sudo提权——visudo或vim /etc/sudoers

在 Linux 系统中,/etc/sudoers 文件是配置 sudo 行为的核心文件。这个文件规定了哪些用户或组可以使用 sudo 命令、在什么条件下使用,以及拥有何种权限。由于这个文件非常关键,编辑它时要特别小心。对于这个文件的编辑,最推荐的工具方式是 visudo。

使用visudo相对使用vim /etc/sudoers的方式具有的优点如下:

  • 独占锁定:visudo 在编辑 sudoers 文件时,确保没有其他进程同时编辑文件,避免竞争条件和损坏。
  • 语法检查:在保存之前,visudo 会检查 sudoers 文件的语法,确保没有错误。这样可以防止由于语法错误导致的权限问题。
  • 文本编辑器:visudo 默认使用 vivim 等编辑器,但可以通过设置环境变量 EDITOR 来指定使用其他编辑器。

用法命令:

visudo
或
vim /etc/sudoers

直接运行 即可,将打开 sudoers 文件,供你编辑。通常需要管理员或 root 权限才能执行。 

编辑 sudoers 文件的注意事项

  • 安全性:sudoers 文件控制着谁可以使用 sudo 以及如何使用。错误的配置可能导致严重的安全风险。
  • 遵循原则:不要在 sudoers 文件中给予过多权限,遵循最小权限原则。
  • 使用别名:sudoers 文件支持用户、组和命令的别名,便于管理复杂权限。
  • 测试新配置:在添加或修改权限后,测试 sudo 行为,以确保配置正确。 

 举例:

使用 visudo 添加 sudo 权限:
# 允许用户 alice 使用 sudo 不需要密码
alice ALL=(ALL) NOPASSWD: ALL
添加特定命令权限:
bob ALL=(ALL) NOPASSWD: /usr/bin/apt-get
#bob 是目标用户。
#ALL 表示可以在任何主机上使用 sudo。
#NOPASSWD: 指示不需要密码。
#/usr/bin/apt-get 是允许的命令




使用 visudo 给组赋予 sudo 权限:
# 允许组 wheel 的所有成员使用 sudo  #wheel组是系统默认自带的,其组中用户可以切换root用户
%wheel ALL=(ALL) ALL 

#假设你想允许组 developers 中的所有成员使用 sudo,并且需要输入密码。这样的设置通常用于开发团队,#以便他们可以执行需要特权的操作。%developers 指的是组 developers 中的所有成员。ALL=(ALL) ALL 表#示这个组可以以任何用户身份执行任何命令,但需要输入密码。
%developers ALL=(ALL) ALL

修改的位置如下图:   在箭头指向行添加即可。

visudo命令参数如下:

更多使用man visudo命令查阅 

选项说明
-c, --check纯检查模式
-f, --file=sudoers指定 sudoers 文件的位置
-q, --quiet较简略(安静)的语法错误信息
-s, --strict严格语法检查
-V, --version显示版本信息并退出

这里提供一个往期遇到的例子以供扩展理解: Liunx中禁止普通用户切换root的解决方法_限制 linux 用户切换root-CSDN博客

隐藏权限

lsattr 是 Linux 系统中用于查看文件或目录的特殊属性的命令。这些属性属于 Linux 文件系统的扩展属性,常见于 ext2、ext3 和 ext4 文件系统。它们有时被称为"隐藏"权限,因为它们可以影响文件的行为和操作,超越了传统的读、写、执行权限的概念。

常见的隐藏权限

lsattr 列出的属性是通过单个字母表示,这些属性影响文件和目录的特定行为。以下是一些重要的属性以及它们的意义:

  • a(Append Only):只能追加。文件只能追加内容,无法删除或修改现有内容。常用于日志文件,以防止篡改。
  • c(Compressed):文件在磁盘上是压缩存储的。
  • d(No Dump):文件不会被备份工具(如 dump)备份。
  • e(Extent Format):文件使用 extent 格式进行存储,通常用于 ext4 文件系统。
  • i(Immutable):不可更改。文件无法被修改、删除、重命名或链接。常用于保护重要的系统文件。
  • j(Data Journaling):数据日志记录。文件中的所有数据变更都记录在日志中。
  • s(Secure Deletion):安全删除。文件在删除后会被填充随机数据,防止恢复。
  • t(No Tail-Merging):关闭尾部合并。尾部合并是某些文件系统优化存储空间的方法。
  • u(Undeletable):删除后可恢复。文件在删除后可以通过某些工具恢复。
  • A(No Access Time Update):文件访问时不更新访问时间(atime)。
  • D(Synchronous Directory Updates):目录更新时同步操作,确保目录的变更立即写入磁盘。

使用 lsattr

# 查看文件或目录的属性 
lsattr /path/to/file 
# 查看目录中的所有文件的属性,递归遍历,意味着不仅会查看指定目录,还会查看其所有子目录和文件 
lsattr -R /path/to/directory

使用 chattr 修改属性

要设置或移除这些属性,可以使用 chattr 命令。操作这些属性通常需要超级用户权限。

# 设置不可变属性 
chattr +i /path/to/file 
# 移除不可变属性 
chattr -i /path/to/file 
# 设置追加属性
chattr +a /path/to/file

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 权限管理是 Linux 操作系统中非常重要的一部分,它控制着用户对文件和目录的访问权限。在 Linux 中,每个文件和目录都有三种基本权限:读取(r)、写入(w)和执行(x)。这些权限可以分别应用于文件所有者、文件所属组和其他用户,以控制不同用户对文件和目录的访问和使用。 文件权限的表示方法 Linux 中,文件权限是用一串数字来表示的,每个数字代表一种权限。其中,第一位表示文件所有者的权限,第二位表示文件所属组的权限,第三位表示其他用户的权限。每个数字的含义如下: - 0:没有权限 - 1:执行权限 - 2:写入权限 - 3:写入和执行权限 - 4:读取权限 - 5:读取和执行权限 - 6:读取和写入权限 - 7:读取、写入和执行权限 例如,文件权限为“rw-r--r--”,表示文件所有者具有读取和写入权限,文件所属组和其他用户只有读取权限。 文件权限的修改方法 在 Linux 中,可以使用 chmod 命令来修改文件权限。chmod 命令的基本语法如下: ``` chmod [选项] 模式 文件名 ``` 其中,选项包括: - -c:只在文件权限确实发生了改变的情况下,输出修改信息。 - -f:不显示错误信息。 - -v:显示每个文件的修改信息。 模式是一种用数字表示的文件权限,可以使用以下方法进行计算: - r=4,w=2,x=1 - 所有者权限的值 = rwx 的数字值 - 组权限的值 = rwx 的数字值 - 其他用户权限的值 = rwx 的数字值 例如,要将文件的所有者设置为可读写,组用户设置为只读,其他用户设置为只执行,可以使用以下命令: ``` chmod 754 filename ``` 其中,7 表示所有者具有读、写和执行权限;5 表示组用户具有读和执行权限;4 表示其他用户具有只读权限。 除了 chmod 命令,Linux 还提供了一些其他工具来管理权限,如 chown 和 chgrp 命令用于更改文件的所有者和所属组,setuid 和 setgid 位可以设置进程的权限等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值