相关学习资料
http://blog.sina.com.cn/s/blog_4e2e6d6a0100g47o.html http://blog.csdn.net/aegoose/article/details/25439649
目录
1. Linux文件系统权限 2. Linux目录文件权限的安全配置
1. Linux文件系统权限
文件与(或)目录是文件系统的具体表现形式,在Linux系统管理部分,文件与目录管理映射了Linux文件系统管理策略的重要方面
0x1: 文件系统的默认权限(umask)
当我们在系统中新建一个文件或目录时,系统会自动赋予该文件或目录一个初始访问权限(Value),我们称为默认权限,默认权限与文件系统的umask值有关。可以在终端下直接输入umask来查看当前系统的umask值。例如:
umask 0022
linux会在默认文件系统策略的基础上,将默认权限减去umask得到最终的权限
/* 假设默认的情况下,umask是0022 */ 1. 新建"文件"的权属是-rw-rw-rw-,权限值是666 则新建文件最终的默认权限是-rw-r--r-- 2. 新建"目录"的权属是drwxrwxrwx,权限值是777 则新建目录最总的默认权限但是drwxr-xr-x
0x2: Linux系统权限的表示方法及文件与目录的约定权限
文件和目录的权限
[-dcbps][u:rwx][g:rwx][a:rwx] 1. 类型 1) d: dir 2) -: file 3) l: symbolic link 4) p: pipe 5) c: character device 6) b=block device 7) s: socket 2. u(属主owner) 1) r: 4 2) w: 2 3) x: 1 2. g(所在组group) 1) r: 4 2) w: 2 3) x: 1 2. o(其他人ohters) 1) r: 4 2) w: 2 3) x: 1
文件系统的权限表示方法有两种
1. 直接用r、w、x来代表文件的所有者(u owner)、用户组(g group)、其他用户(o other)对某一文件或目录的读、写、执行(x)权限,称为字符表示法,例如 ll -rw-rw-rw- 2. 用一组(三位)八进制数来间接表示文件或目录的权属,称为数字表示法,例如 chmod 777 test 注:所谓数字表示法是指将读取(r),写入 (w) 和执行(x) 分別以4(读)、2(写)、l(执行)来代表,沒有授予的部份就表示值为0,然后再把所授予的权限相加而成
0x:3 文件系统属性的修改
chmod的命令可以用下面的正则来表示
chmod [ugoa]*([-+=]([rwxXst]*|[ugo]))+
example
1. chmod 777 /dir/file 设置文件为读写执行(x) 2. chmod -x /dir/file 删除文件u(owner)g(group)a(all)的可执行(x) 3. chmod ga-w /dir/file 删除文件g(group)a(all)的可写权限(w) 4. chmod u=rx /dir/file 重设置文件u(owner)为读(r)和执行(x) 5. chmod +x /dir/file 增加文件u(owner)g(group)a(all)为可执行(x)
2. Linux文件系统的特殊权限
从概念上来说,这一部分的所谓"特殊权限"也应该属于第一部分的文件系统权限,但是因为这类权限比较特殊,我们平时使用ls、ll指令也都看不到,同时这类特殊权限如果配置不当,可能还会引发某些安全风险,所以单独分出来学习
0x1: 文件系统的隐藏权限
除了设置文件或目录的读(r)、写(w)、执行(x)权限外,对于某些有特殊要求的档案(如服务器日志)还可以追加隐藏权限的设定。大部分属性在文件系统的安全管理方面起很重要的作用
lsattr: 显示文件/目录的全部隐藏属性 chattr: 修改文件/目录的隐藏属性 Usage: chattr [-RVf] [-+=AacDdeijsSu] [-v version] files.. 1. A 文件或目录的atime(access time)不可被修改(modified), 可以有效防御黑客为了隐藏webshell或者隐藏入侵过程中擦去对敏感文件的访问痕迹 2. a 即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性 3. c 即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作 4. d 即no dump,设定文件不能成为dump程序的备份目标 5. i 设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助 6. j 即journal,设定此参数使得当通过mount参数: data=ordered或者data=writeback挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效 7. s 保密性地删除文件或目录,即硬盘空间被全部收回 8. S 硬盘I/O同步选项,功能类似sync 9. u 与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion. //值得注意的是: 只有superuser(root)或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加这些隐藏选项
0x2: 和提权相关的特殊权限
接下来,我们来谈谈Linux文件系统中的特殊的权限规范,这些权限包括SUID/SGID/Sticky Bit
1. Set UID
SUID表示当请求执行包含SUID特殊权限的程序时,能够"临时"拥有该程序所有者(属主)对该文件的存取权限。 set uid之后,权限组合中的-x位被-s所取代
假设普通用户A通过passwd命令更新自己的密码,而/usr/bin/passwd的所有者是root(root,root),也就是说,当A请求执行passwd命令时,实际上是暂时获得root对/usr/bin/passwd的执行权限,并进一步更新/etc/shadow的内容
归纳一下流程是这样的
1. root用户对指定的文件设置-s位权限 chmod u+s file 这意味着其他用户可以"临时"地以root的身份操作这个文件 2. 非root用户使用临时提权命令 1) 直接使用sudo指令 2) 在代码中使用setuid(0)这样的api来进行临时提权 /* 对于这里所谓的临时提权,我们必须要搞清楚它们的概念 1. 不是什么文件都可以通过sudo、setuid进行临时提权的 2. 只有明确设置了-s标志位的文件才具有被临时提权的机会 3. 可以简单的理解为只有root主动放出了这个-s权限,其他用户才有机会进行临时提权 */
2. Set GID
SGID在概念上和SUID很类似,当所有者所在的用户组(group)的权限组合中可执行位(x)被s所取代时(例如---rws---),便构成Set GID的权限设置。请求执行者所在的用户组将暂时获得该程序所属的用户组ID(group ID)的存取权限
chmod g+s dir
3. Sticky Bit
当文件系统"其他(others)"的权限组合中可执行位(x)被t所取代时(例如------rwt),便构成Sticky Bit的权限设置
SBIT顾名思义可以起到限制访问的作用,是容易理解而好用的设置,它只对目录有效。当对一个目录A施加了SBIT设定以后,并且使用者对A目录有w和x权限时,则使用者在A目录下所创建的个人文档(含目录)只有使用者本身或root可以执行删除、更名、移动等操作(是否可读依实际权限r而定)
chmod o+t dir rm -r dir: error
2. Linux目录文件权限的安全配置
0x1: 建议umask安全配置
umask命令用来设置进程所创建的文件的读写权限,最保险的值是0077,即关闭创建文件的进程(owner 拥有者)以外的所有进程的读写权限,表示为-rw-------
在~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后, 进程的 umask权限都可以被正确设定
Copyright (c) 2014 LittleHann All rights reserved
Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限