setuid和setgid权限说明

1setuidsetgid的解说

setuid和setgid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件,我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改:

640?wx_fmt=png


作为普通用户,如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,是不是可以通过一个命令来修改呢?答案是肯定的,作为普通用户可以通过passwd 来修改自己的口令,这归功于passwd命令的权限。我们来看一下:

640?wx_fmt=png


因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以修改自己口令的权限。

我们在Linux 系统中的超级权限的控制中有提到过我们知道Linux的用户管理是极为严格的,不同的用户拥有不同的权限,为了完成只有root用户才能完成的工作,我们必须为普通用户提升权限,最常用的方法就是su或sudo,虽然setuid 和setgid也是让普通用户超越自身拥有的普通权限达到root权限的方法,但我不推荐大家使用,因为它能为系统带来隐患!!

注意:setuid和setgid会面临风险,所以尽可能的少用.


2setuidsetgid的实例应用

我们想让一个普通用户kevin拥有root用户拥有超级rm删除权限,我们除了用su或sudo 临时切换到 root身份操作以外,还能怎么做呢???

使用root用户创建一个文件

640?wx_fmt=png

切换到普通用户,删除该文件提示如下:


640?wx_fmt=png


那我们怎么才能让个普通用户也拥有root超级的rm 删除功力呢?

setuid和setgid权限说明_第1张图片


设置rm的权限为4755 ,就把setuid 位设置好了

此时进行删除操作

640?wx_fmt=png


我们只是设置了rmsetuid位,让普通用户在rm指令上有超级root的删除超级权力

通过这个例子,我们应该能明白setuidsetgid位的应用了,如同前面所说,让普通用户超越本身的能力,让普通用户能执行只有root才能执行的命令在这一点,我们要和susudo 区分开来请参见susudo的文档:Linux 系统中的超级权限的控制

 

setuid 和 setgid (全称分别是:set user IDupon execution 和 set group ID upon execution)是Unix的访问权限标志位,它允许用户以可执行文件owner或group的权限来运行这个可执行文件。它们经常适用于:为了运行特定的任务,可以允许用户暂时的提高权限。用处:暂时的权限提升。
什么情况下需要setuid 和 setgid呢?当task需要的权限高于用户的权限时,比如修改用户的登录密码。有些任务需要更高的权限可能不会立刻表现出来,比如ping,它需要发送和监听某个网络接口的控制包。


3. setuid作用于可执行文件
当一个二进制可执行文件被设置了setuid属性之后,在所创建的进程内部,有权限执行此文件的用户将会获得这个可执行文件的owner的权限(通常是root)。在进程内部,用户获取root权限之后,这个用户将可以做一下常规用户被限制做的事情,当然有些事情是禁止的:比如使用ptrace 、LD_LIBRARY_PATH,或者给自己发送信号(但是从终端发送的信号是可以的)。由于潜在竞争条件,如果setuid 作用于shell 脚本,很多操作系统将会忽略掉setuid.
虽然setuid在很多场合是很有用的,但是如果一个可执行程序设计的不够好并被设置了setuid将会带来潜在的风险。人们能够利用有漏洞的程序获取永久的权限提升,或者让用户在无意之间运行一个特洛伊木马。
setgid能够改变group的权限,正如setuid改变user权限一样。

 

4SetUID权限的安全性
使用SetUID可以灵活的调整所有文件所有者权限,但是也为系统的安全性带来了隐患。如果Root用户为指定的程序文件配置过大的SetUID权限,那么就会为黑客或者非法用户打开了侵入系统的大门。例如在Linux中可以使用“vi”命令来编辑文件,但是,对于普通用户而言,当其试图使用命令“vi /etc/shadow”来修改密码文件时,系统就会弹出“/etc/shadow : Permission Denied”的警告提示,从而禁止其对密码文件的非法修改。但是,如果在Root用户环境中执行“which vi”命令,就可以看到“vi”命令实际上是“vim”命令的别名,其真实路径为“/usr/bin/vim”,这样执行命令"chmod 6755 /usr/bin/vim",就可以将“vi”命令的所有者更改为Root,这样在普通的用户环境中,就可以使用“vi”命令来编辑任何文件(例如“/etc/shadow”),这样,即使是普通用户也可以将密码文件清空,从而实现无密码登陆Linux,给系统的安全带来的威胁不言而喻。因此,对可能给系统安全带来危害的程序来说,应该尽量不要随意为其配置SetUID权限。


 5如何禁用SetUID权限
对于存放在敏感数据的分区而言,有时可能希望禁用SetUID权限设置功能。例如对"/home" 分区禁用SetUID权限,可以找到修改其配置文件“/etc/fstab”,执行命令“vi /rtc/fstab”,可以看到“LABEL=/home /home ext3 defaults 1 2”等数据,我们只需在上述“default”关键字的后面添加“nosuid” 关键字即可,例如使用“vi”命令将其修改为“LANBEL=/home /home ext3 default , nosuid 1 2”,之后执行命令“mountoremount /home”,这样即使对“/home”分区上的任何可执行文件配置了SetUID权限,也是无效的。这样就在很大程度上保护了系统的安全。

 

640?wx_fmt=jpeg


你可能感兴趣的:(setuid和setgid权限说明)