linux系统文件的安全与特殊权限
一、 文件与目录的原始属性
由于不希望文件具有可执行的原始权限,默认情况下,文件是没有可执行(x)权限的,因此文件的原始属性是:-rw-rw-rw(0666)
目录的原始属性全部开放,为:-rwxrwxrwx(0777)
二、 umask
1. 文件的默认属性
在每个用户创建文件时,都有一个默认属性,这个属性是由文件的原始属性减去一个掩码而生成的,通过umask可以查看该用户的掩码,如:
[root@yxyz_test sdz]# umask
0022
或者
[root@yxyz_test test]# umask -S
u=rwx,g=rx,o=rx
这种是符号的方式直接显示用户最多拥有的权限,至于实际拥有的还与上面说的原始权限有关,譬如文件的原始属性中是没有x权限的,因此创建文件时自然也没有该权限。
root的掩码一般是0022(为什么是四位?第一位代表特殊权限,一般都为0),则root创建的文件默认权限是从原来的0666中减去相应的权限,为0644(-rw- r-- r--):
-rw-r--r-- 1 root root 0 Nov 25 09:57 test_file
目录的默认权限是0755(drwx r-x r-x):
drwxr-xr-x 2 root root 4096 Nov 25 09:54 test_dir
2. 修改掩码
(1) 直接在umask后面加上数字,如:
[root@yxyz_test test]# umask 0002
[root@yxyz_test test]# touch test_umask_file
[root@yxyz_test test]# mkdir test_umask_dir
[root@yxyz_test test]# ls -l
drwxrwxr-x 2 root root 4096 Nov 25 10:23 test_umask_dir
-rw-rw-r-- 1 root root 0 Nov 25 10:22 test_umask_file
(2) 如果在 shell 提示符下设置 umask,它将只适用于当前登录会话中的 shell 和 subshell。
但不适用于以后登录的会话。要在登录时自动应用 umask 设置,就需要修改/ets/bashrc 中的内容,但一般不建议修改该文件。
三、 文件特殊权限:SUID/SGID/Sbit
1. Set User ID
使用 ls -l 命令查看文件的访问权限,通常都是rwx ,但有时会发现有些文件的执行权限位不是 "x" 而是 "s". 如:
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
这说明 /usr/bin/passwd 文件被设置了SUID。SUID 表示"设置用户ID",SGID表示"设置组ID"。当用户执行一个设置了SUID文件时,用户的有效ID在程序运行过程中被置为文件拥有者的用户ID。如果文件属主是 root,当用户在程序的执行过程中就成为 root 用户,有着与 root 同样的权限。同样,当一个用户执行设置了SGID文件时,用户的属组在程序执行过程中被置为文件的属组。
根据现在的Unix机里,脚本是无法设置SUID/SGID的,因为真正运行的进程是脚本的解释程序而不是脚本本身;而bash shell script 在先天上不支持SUID/SGID,但/bin/zsh是支持SUID/SGID的。perl亦如此。
2. Set Group ID
s的权限如果是在用户组,那么就是SGUID,可以用在两个方面:
(1) 文件:如果SGUID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组id(effective group id)将会变成该程序的用户组所有者(group id);
(2) 目录:如果是设置在目录上,则这个目录内所建立的文件或目录的用户组,将是此目录的用户组。
一般来说SGUID多用在特定的多人团队的项目开发上,在系统中用得较少。
3. Sticky Bit
SBit当前只对目录有效,对文件没有效果。对目录的作用是:“在具有SBit的目录下,用户若在该目录下具有w和x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权利删除”。
例如,/tmp 本身的属性是drwxrwxrwt 4 root root 724992 Nov 25 15:10 /tmp,在tmp里谁都可以新增或者修改文件,但仅有该文件/目录的创建者或者root能删除。
4. SUID/SGID/Sbit 权限设置
在文章开始说到umask的时候,提到掩码的第一位是特殊权限位,因为创建任何文件时,原始属性中是没有设置特殊权限的,因此在umask中,第一位始终是0。而在特殊权限中,不同的权限也是用数字来表示的,SUID为4,SGUID为2,SBit为1。(注意,在设置特殊权限位之前,相应的执行权限位(x)必须要被设置,不然设置的特殊权限位也会无效,试想一下,拥有者都无法执行了,哪里给别人执行的权限?)
例如,如果有文件test_uid,
-rwxr-xr-x 1 root root 0 Nov 25 15:23 test_uid
要增加s权限,则要在原来的权限755之前加多一个4,即4775,则
chmod 4755 test_uid 或者用符号的形式:
chmod u+s test_uid
得到的最终属性是:
-rwsr-xr-x 1 root root 0 Nov 25 15:23 test_uid
如果想为目录设置Sbit为,如
drwxr-xr-x 2 root root 4096 Nov 25 16:11 test_sbit
则可以用chmod 1755 test_sbit或者chmod o+t test_sbit,得到:
drwxr-xr-t 2 root root 4096 Nov 25 16:11 test_sbit
5. 改变所有权对特殊权限位的影响
在改变一个文件的所有权时,相应的SUID/SGID也将被清除,这是出于安全性的考虑。
四、 关于进程运行时的有效用户id和有效组id
如果普通文件myfile是属于foo用户的,是可执行的,现在没设SUID位,ls -l命令显示如下:
-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile
任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的(有效)ID,包括user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。
除了一般的user id和group id外,还有两个称之为effective 的id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。
一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202,foo用户的uid和gid为200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。
如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。
SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。
SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。
下面讨论一个例子:
UNIX系统有一个/dev/kmem的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:cr--r----- 1 root system 2, 1 May 25 1998 kmem
但ps等程序要读这个文件,而ps的权限设置如下:
-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps
这是一个设置了SGID的程序,而ps的用户是bin,不是root,所以不能设置SUID来访问kmem,但大家注意了,bin和root都属于system组,而且ps设置了SGID,一般用户执行ps,就会获得system组用户的权限,而文件kmem的同组用户的权限是可读,所以一般用户执行ps就没问题了。但有些人说,为什么不把ps程序设置为root用户的程序,然后设置SUID位,不也行吗?这的确可以解决问题,但实际中为什么不这样做呢?因为SGID的风险比SUID小得多,所以出于系统安全的考虑,应该尽量用SGID代替SUID的程序,如果可能的话。
五、 安全性
SUID虽然很好了解决了一些问题,但是同时也会带来一些安全隐患。因为设置了 SUID 位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。因此在安全方面特别要注意那些设置了SUID的程序。
六、参考
1. 《shell十三问》
(完)
linux系统文件的安全与特殊权限的更多相关文章
- Linux系统文件权限管理(6)
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux ...
- Linux系统文件权限体系详解
准备工作:先简单了解Linux文件权限 在Linux系统中,ls -l 命令可以查看文件的权限,如 [zhaohuizhen@localhost Test]$ ls -l a -rw-rw-r--. ...
- Linux分类笔记(一)-权限管理
Linux分类笔记(一) 权限管理 普通权限 文件的普通权限 对一个普通的文件使用ls -ll命令后,看到下面的输出内容 而对于文件权限中的每一位,又分别代表了以下的意思 文件类型又有以下几类: ...
- 误删除 linux 系统文件了?这个方法教你解决
转载于互联网并适当的修改 误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题.方法总比问题多~ 说在前面的话 针对日常维护操作,难免会出现文件误 ...
- linux系统文件
关于linux系统文件命令 (1)Linux的文件系统目录配置要遵循FHS规范,规范定义的两级目录规范如下: /home 每个账号在该目录下都有一个文件夹,进行数据的管理 ...
- 2.Linux的用户、用户组、权限、文件系统管理及其网络配置
2.1 Linux的用户及用户组 2.1.1 Linux的用户管理 用户账号管理包含以下三个方面: 用户账号的添加.删除.与修改 用户口令(密码)的管理 用户组的添加.删除管理 Linux系统中用户信 ...
- linux 用户创建、管理、权限分配
(1)su与sudo su:通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证: sudo: sudo扮 ...
- linux系统文件说明
linux系统文件说明 bin 系统命令目录 dev 设备目录 home 用户的家(每个系统用户在home下都有一个自己家) root超级用户在根目录下 lib 系统库目录.so动态库文件 media ...
- Linux常用命令_(文件权限)
Linux权限管理: 二.权限管理1.3种基本权限在Linux中,将使用系统资源的人员分为4类:超级用户.文件或目录的属主.属主的同组人和其他人员.超级用户拥有对Linux系统一切操作权限,对 于其他 ...
随机推荐
- CentOS 7 named设置主从复制
前两篇文章介绍了named的安装和配置forward. 本文将介绍named的主从复制. 在从named的配置中添加: zone "weiheng.ink" IN { type s ...
- 理解C/C++中const char*、char* const、const char* const、char* const*等等
先说些题外话,今天学习execve(2)的使用,由于书上代码使用的是C89标准,所以下面这种代码都被我修改了 char* s[] = { "aaa", "bbb" ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
- [转载,感觉写的非常详细]DUBBO配置方式详解
[转载,感觉写的非常详细]DUBBO配置方式详解 原文链接:http://www.cnblogs.com/chanshuyi/p/5144288.html DUBBO 是一个分布式服务框架,致力于提供 ...
- span 右浮动折行 解决ie6/7中span右浮动折行问题
RM8005: IE6 IE7 IE8(Q) 中行内元素后相邻的浮动元素在某些情况下会折行放置在之前行内元素所在行框的底部 标准参考 W3C CSS 2.1 规范文档里对于浮动元素与非浮动行内元素相邻 ...
- 生成短的uuid
package test1; import java.util.Random; import java.util.UUID; public class ShareCodeUtil { private ...
- svn删除
[本地删除.然后提交到服务器]与[服务器删除然后本地更新] svn delete svn://路径(目录或文件的全路径) -m “删除备注信息文本” 推荐如下操作: svn delete 文件名 sv ...
- 概述XML
xml概述--->干什么的 存储一对多的数据 作为配置文件存储数据 xml组成---->怎么用 元素的分类 包含标签体的标签(有开始标签和结束标签) 例如: <student> ...
- 前端使用CryptoJs类库进行sha-256、MD5加密
Google的加密库 CryptoJs(点此下载) 包含了很多常用的加解密方式,包括AES.DES.SHA-1.SHA-2.SHA256.MD5等. DES对称加密在之前的文章中也有介绍过,大传送门. ...
- TortoiseSVN文件夹及文件图标不显示解决方法(兼容Window xp、window7)
最近遇到TortoiseSVN图标(如上图:增加文件图标.文件同步完成图标等)不显示问题,网上找到的解决方法试了很多都无法真正解决,最后总结了一下,找到了终极解决方案,当然此方案也有弊端,接下来我们就 ...