level 10
1楼,感谢两位吧主的支持,也感谢百度贴吧管理员。申请吧主终于成功了。
这篇教程,时间有点赶,从昨天晚上开始测试,今天早上才完成,内容上可能会有点瑕疵,如果你们发现什么错误,或者不足,请联系我们。
本教程是对于linux平台上的PHPer的。
2012年06月21日 03点06分
1
level 10
很多在PHPer在Linux上开发时,感觉必须获取root权限才能顺利的操作,比如更改配置文件,使用相关的工具,在/var/www/html下添加文件和编码。
但是新版本的Linux是不允许直接使用root登陆桌面环境的。这就迫使大家使用命令行工作。难以体会到linux平台开发的乐趣。
也许有人想到了在自己的家目录下添加一个虚拟机,也有人想到开启家目录下的私人网站设置。
但是在启用这两种方法的过程中,总是碰到SElinux的问题和没有访问权限的问题,也许通读本文,能够给你一些启示和指导。
2012年06月21日 03点06分
2
开终端第一条就是sudo -s
2013年09月18日 13点09分
回复 q404629487 :其实可以改owner也可以。
2013年09月18日 13点09分
level 10
首先测试环境是Fedora 17 gnome桌面环境,我的用户名为maimu,所以家目录也就是/home/maimu
1、apache配置文件httpd.conf
找到<IfModule mod_userdir.c>配置段(或者称为容器)下的UserDir disabled指令,
或者直接查找UserDir disabled指令。
如下修改:
注释掉UserDir disable,注释符号是#,
因为默认apache安装时为了安全起见,家目录的用户网站配置是不启用的。
去掉UserDir public_html前的注释符,启用这段配置。
在UserDir public_html指令下添加UserDir disable root指令,
目的是为了系统的安全,因为除了root自己能访问/root目录外,其他任何形式的访问授权都是及其危险的,不可靠的。
找到
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
这一段被注释的指令,复制这一段后去掉注释,本人并不赞成直接在原文上修改,因为那样不便于出错后恢复。
保存设置,并重启apache服务,
# service httpd restart
//此处的#号为root命令提示符。
其实这一段在很多的教程上都有叙述,所以一般都能
正确的
开启配置。
2012年06月21日 04点06分
4
level 10
3、下面介绍相关目录的权限设置。
清注意,权限的层次和关系。
首先,大家应该明白Linux的权限设置,是针对与不同的用户和用户组。
apache的用户为apache用户,属于apache用户组。
而大家的家目录的下的文件和目录,比如为我的/home/maimu/public_html目录,所有者是maimu,用户群组是也是maimu,而在maimu这个群组里也只有maimu一个用户,一般情况只有这一个用户,但是不排除人为添加的可能。
为public_html目录配置权限 ,
$ cd $ chmod 755 public_html
用户maimu具有r(可读权限,代表数字为4),w(可写权限,代表数字为2),x(可执行权限,代表数字为1);
其他maimu用户组用户获得r权限和x权限
其他用户组用户获得r权限和x权限
不要告诉我,你不知道apache群组就是其他用户组中的一个,apache用户就是其中的一个用户。
如果此时访问,很可能仍然不能成功。因为apache读取不能访问/home/maimu这个目录。
使用如下命令获取权限。
$ chmod 755 maimu
2012年06月21日 04点06分
7
level 10
4、设置相关目录的selinux安全上下文
首先更改家目录的安全策略:
# setsebool -P httpd_enable_homedirs 1
然后更改家目录的读写安全策略:
# setsebool -P httpd_read_user_content 1
setsebool 是用来切换由布尔值控制的 SELinux 策略的,当前布尔值策略的状态可以通过 getsebool 来获知。
默认情况下 setsebool 的设置只保留到下一次重启之前,若是想永久生效的话,需要添加 -P 参数,如上面的命令。
如果不进行设置的话,在使用apache访问家目录下的私人网站时,提示无访问权限,访问失败。SElinux故障排除工具一般会给出警告给出提示的。
httpd_enable_homedirs的值设置为1,是允许apache的httpd服务进程能够访问家目录;
httpd_enable_homedirs的值设置为1,是允许apache的httpd服务进程能够读取家目录。
这样设置应该没有问题了。
测试一下,如有问题,请联系我,方法不限。
2012年06月21日 04点06分
8
level 10
5、关于SElinux的一点知识引导。
1,软件的缺陷不可避免(无论过去,现在,或将来);
2,没有底层操作系统的支持就无法真正实现上层软件的安全性;
- D. Baker, 《Fortresses Built Upon Sand》
对于软件系统的安全,特别是操作系统的安全,几代黑客和技术人员,提出了访问控制模型的理论。比较古老和普遍的就是DAC(Discretionary Access Control)
DAC 的本质是由文件的属主定义其它用户对该文件的许可访问方式,也就是我们上面所说的文件或者目录的访问权限。
其“owner-group-world”模型如下:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 37084 2009-04-04 13:49 /usr/bin/passwd
其中的world也就是我们提到的other.
系统中所有文件属主给各自文件所定义的“owner-group-world”模型的总和,即为 DAC 下访问规则库的实现。
DAC 的开发环境(相对封闭的开发社区,或大学实验室)和对软件使用环境的假设(软件没有缺陷且运行环境友好)注定了 DAC 存在着天生缺陷:进程和文件的安全属性都基于(且总是基于)uid/euid 和gid/egid,无论进程执行什么应用程序,其 uid/euid 都不改变(暂不考虑 setuid 类程序),无法将进程所执行程序的行为和可靠性(安全性)标识到进程的安全属性中,导致操作系统无法有针对性地对进程施加访问控制。
随着这些问题的的发现,0-day安全漏洞和攻击日益普遍,人们提出了MAC模型。
针对 DAC 的缺点,在 MAC 中不再由访问对象的属主定义不同用户对其的许可访问方式,而是由固定的规则库决定SELinux 作为 MAC 的一种实现,通过中央规则库(policy.X,二进制数据文件)给所有进程、所有文件、内核数据结构定义各自的安全标识(标签,label/type),明确定义被访问对象所支持的访问方式,并规定进程标签对被访问对象的合法的访问方式。在配置 SELinux 时给整个文件系统上的所有文件设置标签,在系统启动过程中 init 进程经由 selinuxfs 接口装载 policy.X 到内核空间,由内核中的 SecurityServer 在处理用户态系统调用时实时查询(注,这里所说的“Security Server”,即为 SELinux 内核驱动中定义的各种数据结构,比如 sidtab, policydb, AVC cache,以及在 services.c 文件中定义的各种以“security_”开头的函数)。总之,在 SELinux 中进程和文件的安全属性都不再是 uid/gid 信息,而是其 SecurityContext;同一个进程在执行不同的程序时,其 Security Context 通常会发生相应地改变(从而和被执行程序的安全属性、所需要的能力相对应);进程的能力也不再由被访问的文件的属主决定,而是由固定的规则库明确地定义。
简单说,在安装有SELinux的系统中,SELinux会根据配置文件中的安全策略,为整个文件系统的所有目录和文件添加一些SElinux标签,这些标签也称为文件的安全上下文。无论是用户还是其他访问形式,其实都是通过进程来访问的,所以SELinux也会根据安全策略的内容,为系统的所有进程添加一些属性SecurityContext,如前面提到的httpd_enable_homedirs等,这些SecurityContext和文件的系统中的Selinux标签相互对应,只有当属性的值设置为1,且和需要访问的文件的标签相对应时,才能访问成功。
2012年06月21日 04点06分
10
level 10
不错,虽然有点看不懂,初步看过一点,好麻烦就没看了
2012年06月21日 14点06分
13
擦,我多加了那么多解释内容就是为了能看懂内部原理。
2012年06月21日 23点06分
不复杂,写的很清楚啊!
2013年09月18日 09点09分