免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2122 | 回复: 0
打印 上一主题 下一主题

什么setUid,setGid 及用户权限 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-10 21:11 |只看该作者 |倒序浏览

  在Solaris中,文件除了读、写、执行权限外,还有一些特殊权限。Setuid和setgid是其中的一类。它与Solaris系统的安全关系紧密。 Setuid是指设置程序的有效的执行用户身份(uid)为该文件的主人,而不是调用该程序的进程的uid。Setgid与之类似。Setuid和setgid用1s-1显示出来为s权限,存在于主人和属组的执行权限的位置上。
    这种权限的设置方法如下:
    只设setuid:chmod 4xxx filename(xxx为一般读、写、执行权限)
    只设setgid:chmod 2xxx filename
    同时设setuid 和setgid:chmod 6xxx filename
    取消两种权限:chmod 0xxx filename
    这种权限怎么用? 举个例子来说,假如某一命令(程序)的主人是root用户,并且该文件有setuid属性,但是该文件的读、写、执行权限的属性表明普通用户user1可以执行该命令,那么就表示:当user1执行该命令时,他具有root的执行身份,并获得相应的权限。一旦该命令执行完成,root身份也随之消失。
    为什么系统中需要有这样的权限呢?请执行以下操作:
    1 $1s-1?*etc/shadow /bin/passwd
    -r-sr-sr-x 3 root sys 99792 1999 2月12 /bin/passwd
    -r-------- 1 root sys 261 1月3 13:12 /etc/shadow
    /etc/shadow文件由于存有用户的加密口令信息,对系统的安全至关重要,因此权限很严,只有root凭其对系统的至高无上的权限才得以对/etc/shadow可读可写。但是系统必须允许普通用户也能修改自己的口令。要让他们对/etc/shadow可写,又不能可读,而且可写又不能允许他们改别人的口令,怎么办?系统就采取这样一个办法:做一个程序,也就是/bin/passwd,通过它可以在不显示文件内容的情况下直接修改/etc/shadow文件,可这个程序怎么能有这样的权限?因为系统赋予它setuid权限,而且它属于root.这样,用户在使用/bin/passwd改口令时就有root权限,由于/bin/passwd命令本身功能的局限性,用户并不能用它做更多的不利于系统安全的事。
    2?用普通用户身份修改口令
    $ passwd
    Enter login password:****
    New password:******??????
    Re-enter new password:******??????
    Passwd (SYSTEM):passwd successfully changed for xxx. 可以成功。
    3 用超级用户修改/bin/passwd
    # chmod 0555 /bin/passwd
4 再重复2,是否还成功?当然不。
    5?把/bin/passwd的权限恢复原状。
    # chmod 6555 /bin/passwd
    对此可以打一个生动的比喻:有一个绝密机关,不得已必须有一些不能见这些秘密的人进来做一些事情。于是授权一些特殊的"车辆"(没有窗户,门紧闭,所以看不到外面。只有一个小洞允许乘坐的人伸出一只手臂),带着所乘坐的人开到要去的地方,允许它办完事情马上带他出来。这样是不是很安全?不一定。如果"车辆"没有经过精挑细选而是有很多"门窗",那系统可就危险了。 这种安全威胁在Solaris中也有可能出现。
    比如做一下下面这个实验:
    6?$ vi/etc/shadow
    /etc/shadow: Permission denied.
    7?用超级用户身份
    # chmod 6555 /bin/vi
    # chown root /bin/vi
    8?这次再用普通用户身份试一试第6步,有什么结果?这次你能以普通用户身份修改/etc/shadow了!!但是 $ more/etc/shadow仍然不成功,说明在执行/bin/passwd时有超级用户权限,平均仍是普通用户身份。
    再来看一下令人不安的情况:
    9?用超级用户身份
    # chmod 6555 /bin/ksh
    # chown root /bin/ksh
    10?用普通用户身份
    $ ksh
    #
    发生了什么情况?普通用户不需要root口令就变成了root!!! 好可怕。如果有一个用户曾有一次获得超级用户权限,并通过类似的方式给自己设置了后门(也可能放了一个类似的文件在他自己的家目录中),以后他就可以随时变成超级用户了。
    怎么能避免setuid的不安全影响,又利用其方便的地方?这里有几点建议: 1?关键目录应严格控制写权限。比如/,/usr等。 2?对不管是root帐号还是普通用户帐号的保密都有足够的重视。最好不要设置类似于guest、public、test之类公用的容易猜出口令的帐号。 3?对系统中应该具有setuid权限的文件作一列表,定时检查有没有这之外的文件被设置了setuid权限。
    下面有一个自己编的小程序与大家分享。 程序功能描述:检查有没有/usr/secu/masterlist文件记录之外的其它文件被设置了setuid权限。 事先要求:在系统调试完成,所有需要安装的软件安装好以后,执行下面命令生成检查对照文件。
    #mkdir -p / usr/secu
    #find / -perm -4000 -print>/usr/secu/masterlist
    程序:
    cd /tmp
    [-f secrcheck] && rm secrcheck
    find / -perm -4000 -print>secrcheck
    for f in'catsecrcheck'
    do grep -w$ f /usr/secu/masterlist>/dev/null
    if ["$ ?"! = "0"];then
    echo $ f is not in list
    fi
    done
    rm secrcheck
    在需要对系统做检查时,执行本shell程序。也可以放在定时进程中定时检查。程序由于需要在整个文件系统中做查找操作,需要比较长的时间。 请您作完本文中的实验后,别忘把文件的权限改回原状。

http://blog.csdn.net/bennyfun79/archive/2009/04/24/4106982.aspx

1. 八进制数字包括3个数字,从左到右代表所有者权限、组权限、其它用户权限,数字越大,权限越大。
$ chmod 700 *                         //为文件拥有者设置读、写和执行权限;
$ ls -l
total 0
-rwx------   1 root     other          0 Apr 24 11:02 test
# chmod 770 *                        //为文件拥有者及组成员设置读、写和执行权限;
# ls -l

total 0
-rwxrwx---   1 root     other          0 Apr 24 11:02 test
# chmod 777 *                        //为文件拥有者、组成员及所有用户设置读、写和执行权限;
# ls -l

total 0
-rwxrwxrwx   1 root     other          0 Apr 24 11:02 test
# chmod 000 *                        //取消所有权限;
# ls -l
total 0
----------   1 root     other          0 Apr 24 11:02 test

2. 设置默认权限umask
umask将对具体用户创建的所有新文件 设置读、写和执行权限。因此用户可以在用户的Shell启动文件如.bashrc中设置umask,或者在全局系统默认文件/etc/default/login中设置。
同文件权限一样,umask使用八进制代码表示 ,但计算有两种不同方法:
(a) 对目录,必须从777中减去想设置的默认权限的八进制值;
(b)对文件,必须从666中减去想设置的默认权限的八进制值;
例如,想要所有的用户对你所创建的任何文件都有完全的访问权限,可以用umask 000
#umask 000
# touch test.txt
# ls -l
total 0
-rw-rw-rw-   1 root     other          0 Apr 24 11:14 test.txt
【奇怪,有点不一样,上面的权限只有读写】
一般情况下,更为用umask 022,表示新文件权限是755(777-022=755),表示文件拥有者有RWX权限,而组成员和其它用户只有R权限。
# umask 022
# touch test1
# ls -l
total 0
-rw-rw-rw-   1 root     other          0 Apr 24 11:14 test
-rw-rw-rw-   1 root     other          0 Apr 24 11:14 test.txt
-rw-r--r--   1 root     other          0 Apr 24 11:16 test1
#umask 077                 //只给文件所有者设置RWX权限,其它用户无权限
另:umask不会影响以前已经创建的其它文件的权限,只影响以后创建的文件。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21255/showart_1923794.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP