操作系统

文件访问权限中的SUID/SGID有什么用处?
作者 Kathy 2006年01月15日 23:03

    文件访问权限中的SUID/SGID有什么用处 ?

    

    Document #: 2311103000000

    Body:

    [标题]文件访问权限中的SUID/SGID 有什么用处?

    内容提要: 本文介绍了suid/sgid 含义、用途及如何设置suid/sgid。

    说明:

    运行环境: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

    

    

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12354/showart_68177.html

打开APP阅读全文

文件访问权限中的SUID/SGID有什么用处?

文件访问权限中的SUID/SGID有什么用处?

长按识别二维码 进入IT168查看全文

请长按保存图片
{{data.thematic.text}}

相关文章

加载中...

分享到

请使用浏览器的分享功能
分享到微信等