来源:xwqlinux's blog
说明:
运行环境:aix 4.3, aix 5.1, aix 5.2
在 AIX 中使用 ls -l 命令查看文件的访问权限,通常都是 r w x ,但有时会发现有些文件的执行权限位不是 "x" 而是 "s". 如:
#ls -l /usr/bin/passwd
-r-sr-xr-x 1 root security 18686 Sep 16 2002 /usr/bin/passwd
这说明 /usr/bin/passwd 文件被设置了SUID. SUID
表示"设置用户ID",SGID表示"设置组ID"。当用户执行一个设置了SUID文件时,用户ID在程序运行过程中被置为文件拥有者的用户ID。
如果文件属主是 root,当用户在程序的执行过程中就成为 root 用户,有着与 root
同样的权限。同样,当一个用户执行设置了SGID文件时,用户的属组在程序执行过程中被置为文件的属组。
为什么是这样呢? 这是由于在AIX
中实际上有两种类型的用户ID。"real user ID"是在登录过程中使用的用户ID。"effective user
ID"是在登录后的会话过 程中使用的用户ID,可通过所执行文件的SUID和SGID位来修改。 当一个用户运行一条未设 SUID
的命令时,所创建的进程继承了用户登录时Shell 的权限,此时"real user ID" 和 "effective user ID"是相同的。
当所运行命令的 SUID 位被设置时,进程则继承了命令属主的权限。这时"real user ID" 和"effective user
ID"是不相同的。 这就是为什么普通用户,尽管他不能用 more ,cat,pg 命令查看/etc/security/passwd
文件中的内容,但可通过使用 /usr/bin/passwd 命令来修改自己的口令的原因 -- 在执行passwd
命令时,普通用户的"effective user ID"是root, root 用户有权改写 /etc/security/passwd的内容。
用 ls 命令检查文件的权限模式,在它的第四位如果不是"x",而是"s" 或
"S"就是一个设置了SUID程序(有执行权限并且设置了SUID,第四位就是"s"; 如果没有执行权限,但设置了SUID,则就是"S").
第七位是"s" 或 "S"就是一个设置了SGID程序。可以用 chmod 命令来设置文件的 SUID/SGID.
$ chmod 4xxx filename 为文件设置 SUID (其中x 是 0 ~ 7 的一位数字)
chmod u+s filename
$ chmod 2xxx filename 为文件设置 SGID
chmod g+s filename
$ chmod 6xxx filename 为文件设置 SUID 和 SGID
chmomd ug+s filename
如:
修改前,文件的权限模式是 555
#ls -l aaa
-r-xr-xr-x 1 root system 10 Mar 21 13:08 aaa
#chmod 6555 aaa
#ls -l aaa
-r-s r-s r-x 1 root system 10 Mar 21 13:08 aaa
由
于设置了SUID的文件在执行过程中会使用户的实际权力得到改变,使普通用户可以完成某些只有特定用户才能的任务。我们可以把那些在应用环境中经常一起使
用的系统管理命令写在一程序中,然后编译,将执行文件的属主改为 root 并设置 SUID,
这样当系统管理员不在的情况下,一般用户也可以处理一些常见的系统问题。
例如,需要将以太网接口en1 临时断开,然后激活。可编写简单的 C 程序如下:
# more ttt.c
#include
main ()
{
system ( "ifconfig en1 " ) ;
system ( "ifconfig en1 down " ) ;
system ( "ifconfig en1 " );
system ( "ifconfig en1 up ");
system ( "ifconfig en1 ");
}
编译完成后,其文件权限模式设为:
#ls -l ttt
-r-s--x--x 1 root dba 4539 Mar 21 16:04 ttt
考虑到系统的安全,对于属主是 root 的文件不要随意设置 SUID, 以免产生安全漏洞。系统管理员应该定期查看系统中有那些SUID和SGID文件。可以用 下面的命令实现:
find / -type f \( -perm -4000 -o -perm -2000 \) -ls
阅读(915) | 评论(0) | 转发(0) |