在Linux
中,一切皆文件。甚至一个目录也被认为是一个包含指向其他文件(也包括目录)的链接的文件。可以从TLDP 的文章中了解 Linux 文件系统,稍后我将在受限环境主题中介绍
在这里,将了解Linux
如何在多用户环境中管理文件权限,以及在设置不正确,如何利用它来获得 root 用户 shell。
由于 Linux 是一个多用户操作系统,对每个文件或目录它管理 3 组权限:
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 次。每个字符的含义如下:
在权限之后,两个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
某些服务(如FTP
、ssh
)需要检查系统中是否存在用户名并执行身份验证步骤。因此,如果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
提供了两个命令:chmod
和 chown
,分别用于更改文件的权限和所有权。
以非特权用户使用这两条命令是没有意义的,因为由于缺乏权限,将无法更改读取或更改文件。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
进入),并访问其中的任何文件。
因此,如果有一个没有可执行权限的目录,cd
和ls
命令将失败,如下所示:
$ 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