Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1184681
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-23 15:01:29


1.       Linux使用9个权限位来标识

chmod:更改文件权限

chgrp:修改文件所属组

chown:修改文件拥有者

2.       目录的读、写和执行权限含义

对于文件的读写执行的含义,都比较了解,对于目录的权限和文件的权限是不一样的。

目录的读权限位意味着可以列出其中的内容;写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位;执行权限位则意味着搜索和访问该目录,因此在创建目录的时候一般都是具有可执行权限的。

如果把同组用户或其他用户针对某一目录的权限设置为--x,那么他们将无法列出该目录中的文件。如果该目录中有一个执行位置位的脚本或程序,只要用户知道它的路径和文件名,仍然可以执行它。用户不能够进入该目录并不妨碍他的执行。

3.       特殊权限介绍

名称

suid

sgid

sbit(粘滞位)

出现位置

--- --- ---

--- --- ---

--- --- ---

表示

S   s

S   s

T   t

8进制表示

4

2

1

小结:如果本来在x位上设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T)。这三位如果转化为8进制表示的话,分别对应 的是4(SUID)2(SGID)1(sticky bit),0(什么也不是)。

4.       suid

suid的设置出现在文件拥有者的x位置上,如果之前用户有x权限,设置suid后,x就会成为s(小写的s);如果之前没有x权限,即-,设置之后就会成为S(大写S)。

一般suid使用在脚本文件上的。

例如,/usr/bin/passwd的文件权限为:


 这个脚本的所属主和所属组为root。我们当然可以以root的用户的身份执行它,但是如果在某种场合,普通用户也需要执行这个脚本来修改自己的密码的时候,也需要调用这个脚本,于是,我们设置了suid位,也就是我们看到的那样,在所属主的标志位上有个s。这样一来,其他人有读取和执行的权限,而且可以假如我们现在有个普通用户名为sunny,现在切换到sunny,执行此脚本,表面上我们看是执行成功了,其实我们是借助root用户的身份来执行它的,而不是sunny,这就是suid的作用。

5.       suid也会失效吗?

在对suid进行测试的时候,发现在linux不同发行版本中,suid有可能失效。

测试一

环境:centos6.2

步骤:

1)使用root用户进行如下操作:


2)切换到普通用户,执行a.out程序。


说明:可见执行的结果并不是我们预期的“root”,所以这里的suid位标识貌似失效了。

 

测试二

环境:ubuntu 11.04

步骤:

(1)       root下进行:


(2)       切换到普通用户下,进行执行:


说明:这次的执行结果达到了我们预期的效果,普通用户是以root身份进行程序的执行的。

小结:为什么第一种的情况是失效的呢?但是/usr/bin/passwd的执行确实成功的。这个问题我暂时没有搞清楚。具体可以参考uid和euid的区别:

总之,suid仅用在二进制文件中,对于shell脚本文件和目录是不起作用的。

6.       sgid

如果s出现在用户组的x位置上,那么这一位可以用在文件或者目录上。一,如果sgid用在了A目录上,则在A目录内建立的文件或者目录的用户组,将会是A目录的用户组。二,如果这个sgid出现在二进制文件上的话,不管用户是谁,在执行该程序的时候,它的有效用户组将会变成此文件的用户组。

7.       sbit

这个就是粘滞位,这一位只针对目录和对文件的效果是不一样的。

当某一个文件设置了这一位的时候,这个可执行程序退出后,操作系统会在内存当中保存该程序的内存映像,这样做是为了节约大型程序的启动时间,但是也要占用系统资源。因此,设置这个粘滞位,到不如把自己的程序写得更好些。

对于目录而言,这一位可以理解为防止删除位。例如sunny用户创建了一个目录A,并且给这个目录设置了sbit位,这个目录的权限是rwxrwxrwt,设置了这一位之后,就算所有用户对目录具有读写的权限,但也只有sunny用户和root用户对其中创建的文件或者目录进行删除。其他用户只能在其中添加,而不能删除。

/tmp/目录就是设置了这个标识位。假如现在有一个普通用户abc,然后在tmp目录中创建了一个文件test,然后将这个文件的权限修改为777,之后切换到其他的普通用户sunny,用sunny去删除这个文件test,发现时删除不了的。

8.       为什么引入suidsgidsbit特殊权限

为了防止未授权的用户访问你的文件,你可以在文件的权限位上做文章,修改自己文件的权限位,这样可以让让整个系统更加的安全。有时候,自己的某个文件需要别人来使用。比如,Linux下的passwd脚本应该是所有人都可以使用的,但是这个文件时root组,root用户的,这个时候,我们就通过设置suid位来让其他用户来使用这个命令了。

9.       关于umask

umask的值总共是有4位的,其中最高的那一位只能是0。下面是后三位取值的讨论。

对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7

目录只有在有可执行权限的情况下才能打开,因而在同一umask值的情况下,建立的目录要比文件多一个“执行”的权限,因此建立目录的时候是从777中减去umask,而建立文件的时候,是从666中减去umask的值。

10.   root都无法删除文件

有时候可以使用chattr命令修改文件的属性,让root都无法删除。

测试:

11.   root创建的空目录可以被普通用户删除?

 其实这个是不行的,经过测试,我得出的结论是这样的:文件能不能被删除是需要看它的父目录是不是有可写的权限,和文件属主是没有关系的。

参考资料:

(1)       

(2)       

(3)       

(4)       

阅读(400) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~