parent
5cd1570cb2
commit
e4e7c8b151
1 changed files with 81 additions and 0 deletions
@ -0,0 +1,81 @@ |
||||
--- |
||||
title: linux文件的特殊权限 |
||||
tags: Linux基础 |
||||
categories: Linux基础 |
||||
keywords: NAS文件无法删除 |
||||
abbrlink: 1129065927 |
||||
date: 2024-03-05 10:05:59 |
||||
description: |
||||
cover: |
||||
--- |
||||
|
||||
> 我们在使用NAS时,有时会遇到文件无法删除的情况(前提是已经获取了root权限) |
||||
> 当我们删除隐藏属性后,仍然无法删掉文件后,可以考虑文件父目录的特殊权限。 |
||||
|
||||
我们进入文件父目录,尝试使用如下命令来删除特殊权限,随后再删除文件 |
||||
|
||||
``` |
||||
chmod o-t 目录名 |
||||
``` |
||||
|
||||
在此贴出Linux文件的特殊权限的相关资料 |
||||
|
||||
# Set UID |
||||
当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:“-rwsr-xr-x”,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么SUID的权限对于一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能: |
||||
|
||||
- SUID 权限仅对二进制程序(binary program)有效; |
||||
- 执行者对于该程序需要具有 x 的可执行权限; |
||||
- 本权限仅在执行该程序的过程中有效 (run-time); |
||||
- 执行者将具有该程序拥有者 (owner) 的权限。 |
||||
|
||||
>举个例子,我们的 Linux 系统中,所有帐号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。 |
||||
>但是我们的普通用户在修改密码是也需要对这个文件进行写入,那么具体是如何做到的呢? |
||||
``` |
||||
我们给passwd明明添加SUID权限,并且给普通用户执行权限,那么普通用户在执行这条指令时,就拥有了命令所有者(也就是root)的权限,那么自然而然就可以修改/usr/bin/passwd这个文件了。 |
||||
``` |
||||
|
||||
# Set GID |
||||
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID |
||||
|
||||
与 SUID 不同的是,SGID 可以针对文件或目录来设置!如果是对文件来说, SGID 有如下的功能: |
||||
|
||||
- SGID 对二进制程序有用; |
||||
- 程序执行者对于该程序来说,需具备 x 的权限; |
||||
- 执行者在执行的过程中将会获得该程序群组的支持! |
||||
|
||||
举例来说. |
||||
``` |
||||
[root@study ~]# ls -l /usr/bin/locate |
||||
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate |
||||
``` |
||||
|
||||
上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容, 但是mlocate.db 的权限如下: |
||||
``` |
||||
[root@study ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db |
||||
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate |
||||
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db |
||||
``` |
||||
与 SUID 非常的类似,若我使用普通帐号去执行`locate`时,那账号会取得`slocate`群组的支持, 因此就能够去读取`mlocate.db`了 |
||||
|
||||
除了可执行程序外,`SGID`也能用在目录上,这也是非常常见的一种用途! 当一个目录设置了`SGID`权限后,他将具有如下的功能: |
||||
|
||||
- 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录; |
||||
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组; |
||||
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。 |
||||
|
||||
# Sticky Bit |
||||
|
||||
Sticky Bit,也就是`SBIT`目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是: |
||||
|
||||
- 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时; |
||||
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件 |
||||
|
||||
换句话说:当甲这个使用者于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示“甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。” 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。 |
||||
|
||||
举例来说,我们的 /tmp 本身的权限是“drwxrwxrwt”, 在这样的权限内容下,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。这个特性也是挺重要的啊!你可以这样做个简单的测试: |
||||
``` |
||||
以 root 登陆系统,并且进入 /tmp 当中; |
||||
touch test,并且更改 test 权限成为 777 ; |
||||
以一般使用者登陆,并进入 /tmp; |
||||
尝试删除 test 这个文件! |
||||
``` |
Loading…
Reference in new issue