当前位置: 首页 > Linux

linux中如何临时获得超级用户权限,你是不是还只知其一不知其二?

时间:2023-04-06 21:09:00 Linux

大家好!我是肖恩!好久没看到了。今天就来说说如何让我们的程序暂时获得root权限。前言首先,我们熟悉两个概念:权限位和用户。权限位Linux将访问文件的用户分为三类,即文件的所有者(u)、所属组(g)(即文件所属的组)和其他(o)。并针对3种不同的用户身份,指定是否对该文件具有读(r)、写(w)和执行(x)权限。Linux系统中用户分为超级用户(uid=0)、普通用户(uid=[500,60000])和系统用户(uid=[1,499]),其中:超级用户有能力操作一切。系统用户是Linux系统正常运行所必需的内置用户,一般用于管理服务。不能使用系统用户登录,如bin、daemon、lp等用户。普通用户是为了让用户能够使用Linux系统资源而创建的,用户创建的账户一般都是普通账户。因此,出于安全考虑,要求程序在Linux系统中以普通用户身份运行。当然也有一些公司直接用root来运行程序。我写:rm-rf*可能会删除一些重要数据,甚至直接关闭我自己的系统。如果发生这种情况,无论对公司还是个人都会造成巨大的损失。临时获得超级用户权限有两种方式。一:sudo这个方法是针对shell命令或者shell脚本的。程序中sudo调用脚本达到临时获取root权限的效果。我们可以这样使用:sudohello_world.sh而不用做sudoers配置的情况下,需要输入root密码才能执行sudo。如果不想输入密码,可以在/etc/sudoers中配置脚本的全路径名。调用时使用全路径:sudo/opt/Sean/hello_world.sh(sudoers配置的文章后面会详细讲解。)方法二:setuid前面说setuid,有一个特殊的权限位,我必须提一下,强制位(s权限),这是我们临时获取root权限的关键。s权限s权限:设置文件在执行阶段拥有文件所有者的权限,相当于暂时拥有了文件所有者的身份。一个典型的文件是passwd。一般用户如果执行该文件,在执行过程中,该文件可以获得root权限,可以修改用户密码。可以通过以下命令设置s权限:chmod4755hello_world或chmodu+shello_world话不多说,看代码#include#include#includeusingnamespacestd;intmain(){uid_tuid=getuid();cout<<"尝试改变:uid{"<