Chinaunix首页 | 论坛 | 博客
  • 博客访问: 950179
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2010-11-25 13:50:04

 来源: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
阅读(907) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~