Linux提权系列2:了解Linux文件权限
2023-3-27 08:1:42 Author: 奶牛安全(查看原文) 阅读量:12 收藏

Linux中,一切皆文件。甚至一个目录也被认为是一个包含指向其他文件(也包括目录)的链接的文件。可以从TLDP 的文章中了解 Linux 文件系统,稍后我将在受限环境主题中介绍

在这里,将了解Linux如何在多用户环境中管理文件权限,以及在设置不正确,如何利用它来获得 root 用户 shell。

由于 Linux 是一个多用户操作系统,对每个文件或目录它管理 3 组权限:

  • 用户
  • 其他的

perm
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 00:02 dir
-rwxr-xr-x 1 terabyte terabyte  7 Aug  5 00:01 file

关注前 10 个字符。第一个字符表示文件类型,d 表示目录,- 表示普通文件。

在这之后,有重复rwx 3 次。每个字符的含义如下:

  • r - 读权限
  • w - 写权限
  • x - 执行权限

在权限之后,两个terabyte分别对应这个文件的用户和组。

用户和组的信息在哪里存放呢?用户在/etc/passwd,组在/etc/group

为什么无论如何都需要在多用户操作系统中有一个组?想一想一种情况,您想要授予某些用户对特定文件的特定权限,但该文件的所有者不愿意共享他/她的凭据,因为该用户的主目录包含一些私人内容。因此,在这种情况下,为了让每个人都满意,root 用户将设置文件权限,使用户组可以通过登录访问它,而无需将其切换到目标用户。

要把用户加入某个组,使用root用户执行usermod -aG <group name> <login name>。因为/etc/group只是对于root可写。

$ ls /etc/group -l
-rw-r--r-- 1 root root 1156 Jul 27 11:40 /etc/group

Linux如何匹配密码并执行登录

如果要检查/etc/passwd文件的内容,请关注使用有效shell登录的非服务帐户。例如,所有以/usr/bin/nologin结尾的项都被视为服务帐户。

可以使用以下命令获取所有登录帐户的列表:

$ cat /etc/passwd | grep -E 'sh$'

将输出如下格式:

看第二个字段是x。这意味着可以在/etc/shadow文件中找到用户的密码。同样,对于组,密码文件是/etc/gshadow。这些影子文件只能由root用户访问。不像passwd文件,你甚至看不到/etc/shadow的内容。

$ cat /etc/shadow
cat: /etc/shadow: Permission denied

shadow 文件的格式与 passwd 文件类似,但除第一个字段外,每个字段的含义不同:

mark:$6$.n.:17736:0:99999:7:::
[--] [----] [---] - [---] ----
|      |      |   |   |   |||+-----------> 9. Unused
|      |      |   |   |   ||+------------> 8. Expiration date
|      |      |   |   |   |+-------------> 7. Inactivity period
|      |      |   |   |   +--------------> 6. Warning period
|      |      |   |   +------------------> 5. Maximum password age
|      |      |   +----------------------> 4. Minimum password age
|      |      +--------------------------> 3. Last password change
|      +---------------------------------> 2. Encrypted Password
+----------------------------------------> 1. Username

某些服务(如FTPssh)需要检查系统中是否存在用户名并执行身份验证步骤。因此,如果passwd文件将包含所有密码的列表,那么任何人都可以读取并破解该用户的密码,并最终以用户身份来登录。因此,Linux引入了一个影子文件来保持密码数据库独立,并且只对 root 用户进行读写操作,以避免这个问题。

可以使用passwd命令更新当前用户的密码

第二个字段有三种值:

  • * - 意味着没有密码设置,因此无法切换账号
  • !- 账号被锁
  • 密码哈希 - 密码具有哈希类型和可选盐值的信息

密码的格式可以是以下任何一种

$type_of_hash$encrypted_password
$type_of_hash$plain_text_salt$encrypted_password

可以使用OpenSSL工具创建这两个字符串

$ openssl passwd -1 "hello world"
$1$Y3FAzTxG$/I/sykzmytIduJwbL4mjo1
$ openssl passwd -1 -salt "my salt" "hello world"
$1$my salt$lY65QUBqL1JO3LEh3ENqe.

这里。-1 表示使用 MD5 哈希算法。通过执行 openssl passwd -help 获取有关支持的哈希类型的更多信息

权限与所有权

在了解权限时,人们经常将其与所有权混为一谈。权限意味着谁可以对文件执行什么操作,所有权告诉谁拥有该文件。

如果你认为这两者是相互关联的。由于权限集中的前两组是针对所有者和组的。

$ touch file-1
$ su root -c "touch file-2"
Password: 
$ ls -l
total 0
-rw-r--r-- 1 terabyte terabyte 0 Aug  5 10:21 file-1
-rw-r--r-- 1 root     root     0 Aug  5 10:21 file-2

创建文件时,自动分配给文件的所有者和组继承自当前登录的用户。例如,如果用 root 用户创建一个文件,它将拥有所有者和组为 root root

如果拥有对文件读取权限,  linux中的cat操作会读取文件内容打印到标准输出流。

$ ls -l
total 4
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 00:09 dir
-rwxr-xr-x 1 terabyte terabyte  7 Aug  5 00:01 file
$ cat file 
secret

一旦文件创建了,它的权限和所有权并不会永远不变。Linux提供了两个命令:chmodchown,分别用于更改文件的权限和所有权。

以非特权用户使用这两条命令是没有意义的,因为由于缺乏权限,将无法更改读取或更改文件。root用户是Linux中最高权限的用户,使用该用户可以在系统上执行任何操作。

因此,切换到 root 并将 file-2 的所有权更改为用户和组 terabyte 以及权限rwxrwx---

$ ls -l 
total 0
-rw-r--r-- 1 terabyte terabyte 0 Aug  5 10:21 file-1
-rw-r--r-- 1 root     root     0 Aug  5 10:21 file-2
$ su root -c "chown terabyte:terabyte file-2"
Password: 
$ chmod u+rwx,g+rwx,o-rwx file-2 
$ ls -l
total 0
-rw-r--r-- 1 terabyte terabyte 0 Aug  5 10:21 file-1
-rwxrwx--- 1 terabyte terabyte 0 Aug  5 10:21 file-2

文件权限与目录权限

rwx对文件是有意义的,因为文件可以进行读/写/执行操作,而在目录中,要读取文件和创建文件所以需要读写权限,但为什么要执行。对于目录,执行权限允许进入目录(即 cd 进入),并访问其中的任何文件。

因此,如果有一个没有可执行权限的目录,cdls命令将失败,如下所示:

$ pwd 
/tmp/tests
$ mkdir dir
$ ls -l 
total 0
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 10:41 dir
$ chmod -x dir/
$ ls -l 
total 0
drw-r--r-- 2 terabyte terabyte 40 Aug  5 10:41 dir
$ cd dir/
sh: cd: dir/: Permission denied
$ ls -la dir/
ls: cannot access 'dir/.': Permission denied
ls: cannot access 'dir/..': Permission denied
total 0
d????????? ? ? ? ?            ? .
d????????? ? ? ? ?            ? ..

现在,在目录上设置可执行权限,上面的命令将起作用

$ chmod +x dir/
$ ls -l
total 0
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 10:41 dir
$ pwd
/tmp/tests
$ cd dir/
$ pwd
/tmp/tests/dir
$ ls -la
total 0
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 10:41 .
drwxr-xr-x 3 terabyte terabyte 60 Aug  5 10:41 ..

文件首先从目录继承其权限,例如,如果在其他用户的目录中存在root用户的文件,假设这个用户是terabyte。如果以 terabyte用户身份登录,仍然可以删除该文件。

$ ls
dir  file  supersecret
$ ls -l
total 4
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 00:09 dir
-rwxr-xr-x 1 terabyte terabyte  7 Aug  5 00:01 file
-rw-r--r-- 1 root     root      0 Aug  5 10:14 supersecret
$ rm supersecret 
rm: remove write-protected regular empty file 'supersecret'? y
$ ls -l
total 4
drwxr-xr-x 2 terabyte terabyte 40 Aug  5 00:09 dir
-rwxr-xr-x 1 terabyte terabyte  7 Aug  5 00:01 file

可以通过调用带有 -f 标志的 rm 命令来抑制此警告。这将在允许时强制执行所有操作

暗号:fbb09


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247488669&idx=1&sn=30e6dbac5505c8108044ebb82810a4ab&chksm=fdf97f88ca8ef69e1c6f590b1e21237b1eeb134314f5db18053e29c366cdd7e0503ed8277906#rd
如有侵权请联系:admin#unsafe.sh