今天我们来讲解Unix操作系统中SUID/SGID,为什么要单独把他们从文件权限中分出来讲呢?因为,这是Unix操作系统网络入侵者非常爱用的入侵入口。SUID表示"设置用户ID",SGID表示"设置组ID"。
当用户执行一个SUID文件时,用户ID在程序运行过程中被置为文件拥有者的用户ID。如果文件属于root,那用户就成为超级用户。同样,当一个用户执行SGID文件时,用户的组被置为文件的组。
例如,PS命令以SUID root运行,他从系统内存中读取,这是一般用户不能做的。Unix操作系统SUID程序代表了重要的安全漏洞,特别是SUID设为root的程序。
Unix操作系统实际上有两种类型的用户ID。"real user ID"是在登录过程中建立的用户ID。 "effective user ID"是在登录后的会话过程中通过SUID和SGID位来修改。
当一个用户运行一条命令时,进程继承了用户登录Shell的权限,这时"real user ID"和"effective user ID"是相同的。当SUID位被设置时,进程继承了命令拥有者的权限。
例如普通用户运行passwd命令时,他能够修改/etc/passwd文件,尽管文件是属于root的。这成为可能是因为passwd命令以root的SUID权限运行。那么如何识别SUID程序呢?
我们检查文件的权限模式,在它的第四位如果不是"x",而是"s",就是一个SUID程序。例如,ls -l /bin/su命令显示: -rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su* 表明su是一个SUID程序。
Unix操作系统安全的一种典型攻击就是创建一个SUID是root的shell拷贝,然后把他隐藏。通过调用后门,攻击者就获得了root的权利。例如,某个系统管理员忘了关闭某个root的Shell,一个坏人经过运行如下命令:
cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman现在就有了一个bash的SUID root拷贝任其处理。他就有完整的root权限了。因此,Unix操作系统管理员应该定期察看系统中有哪些SUID和SGID文件。用下面的命令可以实现:find / -type f \( -perm -4000 -o -perm -2000 \) -ls
当然,攻击者可以通过修改find命令来逃避检测,所以要运行专门的检测软件(如Tripwire)来进行检查。 好了,关于Unix操作系统中SUID/SGID的知识,我们就介绍到这里了。
【编辑推荐】