0x01 前言
最近接收到一个研究进程权限的课题,但是最后发现这块知识属于基础性的,想真正应用这项研究的成果还是很有限的,作为一个Linux用户来说,我们并不需要特别关心上面的机制。但是,当我们去编写一个Linux应用程序的时候,就要注意在程序中实现以上切换(有必要的前提下),以便让我们的程序符合"最小权限"的原则,不给系统留下可能的安全隐患。
最小权限带来的好处:
1. 更好的系统稳定性
2. 更好的系统安全性
3. 更容易部署
0x02 linux权限组成
基本权限
r 、w、x
可以通过chmod改变
chmod # 更改文件或者目录权限 二进制设置 644 --> 110 100 100 --> rw- r-- r-- 755 --> 111 101 101 --> rwx r-x r-x (八进制 - 二进制) (二进制 - 实际含义) 字符设置 +---------+-------+-----+ | u user | | | |---------| + | r | | g group |-------|-----| |---------| - | w | | o other |-------|-----| |---------| = | x | | a all | | | +---------+-------+-----+0x02 认识进程权限
进程去执行任务的时候需要得到相应的权限,实际上,每个进程维护如下6个ID:
RUID 真实身份: real UID, real GID
EUID 有效身份: effective UID, effective GID
SUID 存储身份: saved UID, saved GID
真实身份:我们登录使用的身份
有效身份:当该进程真正去操作文件时所检查的身份
存储身份:当我们将一个程序文件执行成为进程的时候,该程序文件的拥有者(owner)和拥有组(owner group)可以被,存储成为进程的存储身份
并不是所有的程序文件在执行的过程都设置存储身份的。需要这么做的程序文件会在其九位(bit)权限的执行位的x改为s。这时,这一位(bit)叫做set UID bit或者set GID bit。
$ls -l /usr/bin/uuidd
-rwsr-sr-x 1 libuuid libuuid 17976 Mar 30 2012 /usr/sbin/uuidd
当我以root(UID), root(GID)的真实身份运行这个程序的时候,由于拥有者(owner)有s位的设定,所以saved UID被设置成为libuuid,saved GID被设置成为libuuid。这样,uuidd的进程就可以在两个身份之间切换。
我们通常使用chmod来修改set-UID bit和set-GID bit:
$chmod 4700 file
我们看到,这里的chmod后面不再只是三位的数字。最前面一位用于处理set-UID bit/set-GID bit,它可以被设置成为4/2/1以及或者上面数字的和。4表示为set UID bit, 2表示为set GID bit,1表示为sticky bit (暂时不介绍)。必须要先有x位的基础上,才能设置s位。
开机后,linux内核加载的时候,首先开始执行进程init,而且是root权限运行的,然后通过
fork函数去加载其他用户进程。
而sudo这个程序,默认就设置了suid
0x03 限制进程所创建文件的权限属性
umask 表示操作系统不允许设置的权限位
037 --> --- -wx rwx
640 --> rw- r-- ---
不允许创建的文件有执行的权限
0x04 web应用系统可写目录的权限控制
Nginx
数据缓存目录 cache,这个目录的特点是需要777 权限,无须提供给用户访问
附件上传目录 attachments,此目录的特点是需要开放访问权限,但所有文件不能由php 引擎解析(包括后缀名改为 gif 的木马文件)
静态文件生成目录 public,这些目录一般都是php 生成的静态页的保存目录,显然与附件目录有类似之处,按附件目录的权限设置即可。可以预见的是,如果我们设置了较严格的权限,即使网站php 程序存在漏洞,木马脚本也只能被写入到权限为 777 的目录中去,如果配合上述严格的目录权限控制,木马也无法被触发运行,整个系统的安全性显然会有显著的提高。
Apache
建立安全的apache的目录结构。ServerRoot DocumentRoot ScripAlias Customlog Errorlog 均放在单独的目录环境中。以上主要目录相互独立并且不存在父子逻辑关系。
ServerRoot目录只能具有管理权限用户访问;DocumentRoot能够被管理Web站点内容的用户访问和使用Apache服务器的Apache用户和Apache用户组访问;只有admin组的用户可以访问日志目录。 各个目录设置独立的权限
上传目录设置php文件解析限制
配置Apache防止webshell上传
0x05 web服务进程的权限配置
以Nobody用户运行
一般情况下,Apache是由Root 来安装和运行的。如果Apache Server进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Apache Server进程以最可能低的权限用户来运行。通过修改httpd.conf文件中的下列选项,以Nobody用户运行Apache 达到相对安全的目的。
User nobody
参考链接:
1. linux用户与“最小权限”原则
2. linux文件管理
3. linux进程基础
4. 最小特权原则
5. 正确设置php-fpm子进程用户,提高网站安全性防挂马
6. linux下apache安全配置策略
7. 探秘linux权限控制
8. Linux 权限管理与访问控制详解(1)——基本概念和 DAC
9. Linux 权限管理与访问控制详解(2)——MAC 和 SELinux
10. apache运行机制剖析
11. Linux權限控制的基本原理
12. nginx、php-fpm、mysql用户权限解析
13. 企业级Linux系统下的进程安全管理方法
没有评论:
发表评论