码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 学习:文件特殊权限SUID, SGID, SBIT

时间:2015-09-25 18:42:21      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:linux   知识点   target   color   blank   

本次记录Linux特殊权限SUID、SGID、SBIT相关知识及使用实例等。

由于SUID和SGID涉及到系统安全,所以对它们知识点的掌握尤为重要。

  • 关于文件权限的表示方法和解析

SUID是Set User ID,SGID是Set Group ID的意思。

Linux下可以用ls –l命令来查看文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 这种方法共有十位

9 8 7 6 5 4 3 2 1 0

-  r w x r  -  x  r - x

第9位表示文件类型,可以为-、d、b、s、c、l、p

第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户权限,其形式为rwx。

r表示可读,可读出文件的内容

w表示可写,可修改文件的内容

x表示可执行,可运行这个文件

没有权限的位置用-表示

例子:

ls -l myfile显示为:

-rwxr-x--- 1 foo staff 7734 Aug 05 17:18 myfile

表示文件myfile是普通文件,文件的所有者是foo用户,而foo用户属于staff组,文件只有1个硬连接,长度是7734个字节,最后修改时间8月5日17:18。

所有者foo对文件有读写执行权限,staff组的成员对文件有读和执行权限,其他用户对文件没有权限。

  • SUID、SGID和SBIT的详细解析

1. SUID权限

仅对二进制程序有效,执行者对该程序需要有x执行权限,在程序运行过程中,执行者拥有程序拥有者(owner)的权限。

例如:

普通用户执行passwd命令。

首先查看passwd命令的绝对路径及文件权限:

技术分享

我们发现passwd的拥有者是root,且拥有者权限里面本应是x的那一例显示的是s,这说明此命令具有SUID权限。同时发现普通用户没有w权限,所以按理来说普通用户是不能执行这个命令的,因为这个命令修改了密码肯定是要写文件的。

进一步分析,实际上passwd这个命令会操作/etc/shadow这个文件,因为密码都是放在这里,查看密码文件权限:

技术分享

发现权限为000,(注意:root用户对所有文件都是有rw权限的,对所有目录都是有rwx权限的),这意味着普通用户确实不能读或写这个文件。不过因为passwd命令具有SUID权限,所以普通用户执行这个命令时,当系统生成对应的进程后,这个进程就拥有了/usr/bin/passwd文件拥有者root的权限。

技术分享

上面的操作在要输入密码时按CTRL+Z,回车

查看进程树:可以发现确实passwd的权限不是bash而是root!

技术分享

这种文件会在原权限值(假设是0755)之前加上4000,记为4755。通过chmod u+/-s FileName设定。

2. SGID权限

SGID权限可以应用在目录或可执行文件上。

1) 对于文件:

SGID对于二进制程序有用,程序执行者要有x权限,执行者在执行过程中会获得该程序用户组(group)的权限(相当于临时加入了程序的用户组)。

例如:

普通用户使用locate命令。

技术分享

发现用户组权限中应该出现x的位置显示s,表示这个命令具有SGID权限。而普通用户只有x权限而没有rw权限。locate这个命令,实际上会去访问 /var/lib/mlocate/mlocate.db这个文件。

技术分享

此文件对于普通用户没有任何权限。所以理论上普通用户执行locate命令是不行的。不过因为locate命令有SGID权限,所以运行locate生成进程时,这个进程会得到locate命令的用户组权限,相当于Allen这个用户被临时加入了用户组slocate内。于是就对mlocate.db这个文件有r权限,可以访问了。

2) 对于目录:

用户对于此目录具有r与x的权限时,可以进入目录;

用户在此目录下的有效用户组会变成该目录的用户组;

若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。实用于一组开发人员共用资源的场景。

实例:

一个团队想在Linux某个目录下协同做Cloud项目,那么每个团队成员都得对这个目录下的所有文件具有rwx权限。

于是我们首先新建一个名为cloudgrp的用户组,再新建几个账号,且每个账号的用户组都附加cloudgrp这个组。

技术分享

然后新建文件夹,根据文件夹默认umask权限计算得出此文件夹权限为drwxr-xr-x。

技术分享

技术分享

可以看出只有root用户能在此文件夹新建文件,而其他用户没有写权限。须把目录权限设为775,且其属组更改为cloudgrp组,让属于这个组的其他用户有写文件权限。

技术分享

技术分享

技术分享

现在账户developer可以新建文件,且文件的所有者和用户组都会是developer,这样的话诸如techusr等无法访问这个文件,无法达到协同工作的目标。

技术分享

所以我们需要给这个目录加入SGID权限,之后任意一个用户创建的文件,文件用户组都会是cloudgrp。

文件夹会在原权限值(假设是0775)之前加上2000,记为2775。通过chmod g+/-s FileName设定。

技术分享

技术分享

3. Sticky Bit权限

作用于目录:若一个目录的Sticky bit被设置,那么只有这个目录的owner或root用户才能对目录中的文件或子目录进行删除和重命名。

该位可以理解为防删除位,一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用Sticky bit位。设置该位后,就算用户对目录具有写权限,也不能删除该文件。

实例:

技术分享

我们新建目录,且把一个文件复制到该目录下,此文件对所有人开放权限。

技术分享

添加Sticky bit后,文件夹会在原权限值(假设是0755)之前加上1000,记为1755。通过chmod o+/-t FileName设定。

现在目录的权限变为:

技术分享

尽管developer.b文件所有人有全部权限,但现在只有owner或root对其进行重命名和删除。

技术分享

它可以保护文件,这也是 /tmp有Stick bit的原因。

本文出自 “Craft Life” 博客,请务必保留此出处http://allenh.blog.51cto.com/481430/1698286

Linux 学习:文件特殊权限SUID, SGID, SBIT

标签:linux   知识点   target   color   blank   

原文地址:http://allenh.blog.51cto.com/481430/1698286

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!