权限管理-Permission Management
在Linux下,权限被分配给用户和组。每个用户都可以是不同组的成员,这些组中的成员身份赋予用户特定的附加权限。每个文件和目录都属于特定用户和特定组。因此,定义文件的用户和组的权限也是为各自的所有者定义的。当我们创建新的文件或目录时,它们就属于我们所属的组和我们。
当用户想要访问Linux目录的内容时,必须首先遍历该目录,这意味着导航到该目录,要求用户对该目录具有execute
权限。如果没有此权限,用户将无法访问该目录的内容,并且会显示“ Permission Denied
”错误消息。
cry0l1t3@htb[/htb]$ ls -l
drw-rw-r-- 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:30 scripts
cry0l1t3@htb[/htb]$ ls -al mydirectory/
ls: cannot access 'mydirectory/script.sh': Permission denied
ls: cannot access 'mydirectory/..': Permission denied
ls: cannot access 'mydirectory/subdirectory': Permission denied
ls: cannot access 'mydirectory/.': Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? script.sh
d????????? ? ? ? ? ? subdirectory
需要注意的是,无论用户的访问级别如何,执行权限对于访问目录是必要的。此外,目录上的执行权限不允许用户执行或修改目录中的任何文件或内容,只允许遍历和访问目录的内容。
要执行目录中的文件,用户需要相应文件的execute
权限。要修改目录的内容(创建、删除或重命名文件和子目录),用户需要write
对该目录的权限。
Linux 系统上的整个权限系统基于八进制数字系统,基本上,可以为文件或目录分配三种不同类型的权限:
- (
r
) - 读 - (
w
) - 写 - (
x
) - 执行
可以为下一个示例中介绍的owner
、group
、others
等设置权限others
及其相应的权限。
cry0l1t3@htb[/htb]$ ls -l /etc/passwd
- rwx rw- r-- 1 root root 1641 May 4 23:42 /etc/passwd
- --- --- --- | | | | |__________|
| | | | | | | | |_ Date
| | | | | | | |__________ File Size
| | | | | | |_______________ Group
| | | | | |____________________ User
| | | | |_______________________ Number of hard links
| | | |_ Permission of others (read)
| | |_____ Permissions of the group (read, write)
| |_________ Permissions of the owner (read, write, execute)
|____________ File type (- = File, d = Directory, l = Link, ... )
更改权限
我们可以使用chmod
命令、权限组引用(u
-所有者、g
-组、o
-其他、a
-所有用户)修改权限,以及[ +
]或[ -
]来添加删除指定的权限。在以下示例中,用户创建一个由该用户拥有的新 shell 脚本,该脚本不可执行,并为所有用户设置读/写权限。
cry0l1t3@htb[/htb]$ ls -l shell
-rwxr-x--x 1 cry0l1t3 htbteam 0 May 4 22:12 shell
然后我们可以为所有用户应用read
权限并查看结果。
cry0l1t3@htb[/htb]$ chmod a+r shell && ls -l shell
-rwxr-xr-x 1 cry0l1t3 htbteam 0 May 4 22:12 shell
我们还可以将所有其他用户的权限设置为read
仅使用八进制值分配。
cry0l1t3@htb[/htb]$ chmod 754 shell && ls -l shell
-rwxr-xr-- 1 cry0l1t3 htbteam 0 May 4 22:12 shell
让我们看看与之相关的所有表示,以更好地理解如何计算权限分配。
Binary Notation: 4 2 1 | 4 2 1 | 4 2 1
----------------------------------------------------------
Binary Representation: 1 1 1 | 1 0 1 | 1 0 0
----------------------------------------------------------
Octal Value: 7 | 5 | 4
----------------------------------------------------------
Permission Representation: r w x | r - x | r - -
如果我们将分配的Binary Representation
设置位与Binary Notation
值相加,我们就得到了Octal Value
。权限表示法通过使用三个字符来表示二进制表示法中设置的位,这只会更容易地识别设置的权限。
变更所有者
要更改文件或目录的所有者和/或组分配,我们可以使用该chown
命令。语法如下:
语法 - chown
cry0l1t3@htb[/htb]$ chown <user>:<group> <file/directory>
在此示例中,“shell”可以替换为任意文件或文件夹。
cry0l1t3@htb[/htb]$ chown root:root shell && ls -l shell
-rwxr-xr-- 1 root root 0 May 4 22:12 shell
SUID & SGID
除了分配直接的用户和组权限外,我们还可以通过设置Set User ID
( SUID
) 和Set Group ID
( SGID
) 位来配置文件的特殊权限。例如,这些SUID
/位允许用户以另一个用户的权限运行程序。SGID
管理员经常使用它来授予用户对某些应用程序或文件的特殊权限。使用字母“ s
”代替“ x
”。执行此类程序时,将使用文件所有者的 SUID/SGID。
通常情况下,管理员不熟悉应用程序,但仍然分配SUID/SGID位,这会导致较高的安全风险。此类程序可能包含允许从寻呼机执行外壳的函数,例如应用程序“ journalctl
.”。
如果管理员将 SUID 位设置为“ journalctl
”,则任何有权访问此应用程序的用户都可以作为 执行 shell root
。有关此应用程序和其他此类应用程序的更多信息可以在GTFObins中找到。
粘位-Sticky Bit
粘滞位是 Linux 中的一种文件权限,可以在目录上设置。在控制目录中文件的删除和重命名时,这种类型的权限提供了额外的安全层。它通常用于由多个用户共享的目录,以防止一个用户意外删除或重命名对其他人重要的文件。
例如,在共享主目录中,多个用户可以访问同一目录,系统管理员可以在目录上设置粘滞位,以确保只有文件所有者、目录所有者或 root 用户可以访问该目录。可以删除或重命名目录中的文件。这意味着其他用户无法删除或重命名目录中的文件,因为他们没有所需的权限。这提供了额外的安全层来保护重要文件,因为只有具有必要访问权限的人才能删除或重命名文件。在目录上设置粘滞位可确保只有所有者、目录所有者或根用户才能更改目录中的文件。
当目录设置了粘滞位时,用该目录的权限的执行权限中的字母“t
”来表示。例如,如果一个目录有权限“ rwxrwxrwt
”,则表示设置了粘滞位,给予额外的权限安全级别,以便除所有者或 root 用户之外的任何人都无法删除或重命名目录中的文件或文件夹。
cry0l1t3@htb[/htb]$ ls -l
drw-rw-r-t 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:30 scripts
drw-rw-r-T 3 cry0l1t3 cry0l1t3 4096 Jan 12 12:32 reports
在此示例中,我们看到两个目录都设置了粘性位。但是,该reports
文件夹有一个大写字母T
,而该scripts
文件夹有一个小写字母t
。
如果粘滞位是大写的 ( T
),则这意味着所有其他用户没有execute
( x
) 权限,因此无法查看该文件夹的内容,也无法从中运行任何程序。小写粘性位 (t
) 是已设置(executex
) 权限的粘性位。