分类: CMS

  • phpcmsV9加777权限后仍然不可写的原因

    phpcmsV9加777权限后仍然不可写的原因

    phpcmsV9安装过程中已经发现了文件或目录赋予777权限后仍然不可写的问题,当时,临时解决的方法是关闭了防火墙,挺有效的,但治标不治本啊。

    命令:setenforce 0回车;//临时关闭防火墙,重启后失效,当然也可以永久关闭,但总觉着还是不妥吧。
    命令:setenforce 1回车;//开启防火墙。

    防火墙开启后,在后台更新一下首页,发现仍然是不可写入:

    phpcmsV9权限不可写-无法生成首页
    无法生成首页,不可写。
    服务器上查看相关文件及目录权限为777
    服务器上查看相关文件及目录权限为777,如index.html

     

    这是为什么呢?接下来具体一步步研究测试一下:

    1、首先把phpcmsV9程序上传到一个阿里云主机上如下图,与之前phpcmsv9安装步骤一样,重新操作了一遍发现不用修改默认权限就可以通过权限检查,默认目录权限755,文件644,有没有什么发现?

    阿里云主机上phpcmsv9文件权限
    在FTP工具上可以很明显看出阿里云主机上的文件权限,目录默认755,文件默认644

    755=rwx r-x r-x
    644=rw- r– r–
    很直观,写权限w只有所有者有,所属组及其他人都没有写的权限;

    2、通过上面的分析,我们再到自己本地的服务器上测试一下:

    命令:setenforce 0回车;//问题还没解决,临时关掉;
    命令:cd /var/www/html/phpcmsv9回车切换到网站所在目录;
    命令:ls -l回车查看当前目录文件属性;
    这里仍然以index.html文件为例,现在index.html为777权限,后台可正常生成首页;接下来改一下index.html的权限测试一下;
    命令:chmod 644 index.html回车;//再切换到浏览器后台生成首页,提示不可写;
    命令:chmod 664 index.html回车;//再生成首页,提示仍然不可写;
    命令:chmod 666 index.html回车;//再生成首页,提示首页更新成功
    phpcmsV9权限不可写原因分析-权限测试
    这样容易理解了,自己服务器上需要其他人有写的权限才行,云主机上是所有者有写的权限就行。
    这权限太奇葩了,所有者都不行,非得其他人能写,有违常理啊。
    也可以这样理解吧,本机服务器要求写权限的用户与所有者并非同一用户,而是属于其他人,并非root在要求写入(这里文件目录的所有者所属组都是root),那么,这个其他人是何许人也?默认当然是apache咯,因为是在lamp环境下来运行网站程序的。可以使用命令查看一下:
    命令:cat /etc/httpd/conf/httpd.conf回车查看一下apache配置文件,会发现两行:
    User apache
    Group apache
    对了,就是它。

    既然默认是apache要求写入,那么这里有四种解决思路:

    a.直接将其他人添加写的权限,也就是之前测试安装phpcmsv9时的解决方法,这样明显有安全缺陷;

    b.将phpcmsv9目录及其子目录所有文件(或者仅程序要求写入的目录及文件)所有者改为apache;//命令:chown -R apache phpcmsv9回车递归修改根目录下所有目录及文件所有者为apache;

    c.将apache配置文件httpd.conf中的user改为相应所有者,这里是root,当然不建议以root权限运行,可以新建用户;//命令:useradd phpcmsv9回车新建一个用户,命令:vi /etc/httpd/conf/httpd.conf回车按a进入编辑模式,向下翻到User apache修改为User phpcmsv9按esc键退出编辑模式,输入:wq回车保存退出,命令:systemctl restart httpd回车重启apache服务,然后按照b的方式修改所有者为phpcmsv9即可。

    d.将程序要求写入的目录及文件添加apache用户的ACL权限(所有者、所属组、其他人之外的一个特殊权限);//不想改变所有者但又得给权限就只有这样咯,命令:setfacl -m u:apache:rwx test(新建的一个测试目录)回车,网站根目录就对apache用户添加了acl权限,网站根目录及子目录必须给rwx的权限,其它文件给rw即可,如下图权限多了一个+号说明添加了acl权限。
    phpcmsV9权限不可写原因分析-ACL权限设置

    四种方式都能解决权限问题,但一般的虚拟主机用户都不会出新类似问题,因为服务商基本都设置好了的。说了这么多虽然还没到重点,但对于linux的权限问题梳理学习了一下,还是值得的。

    权限解决后,命令:setenforce 1回车开启防火墙,然后再去更新一下首页,照常又出现了不可写的提示,所以最终还是得从setenforce这里入手。

    3、通过上面的权限分析,可以确定原因在于防火墙拦截了apache的写入请求,而setenforce是selinux的配置命令,那么我们先了解一下selinux,访问下面的链接阅读:

    a、SELinux安全系统基础
    b、SELinux入门

    文章a带实例很容易理解,主要讲了selinux安全策略之文件属性的上下文关系,

     

     

     

    4、总结,在/var/www/html/下新创建一个demo目录演示整个步骤;

    命令:unzip phpcms_v9.6.0_UTF8.zip回车;//解压phpcms官方安装ZIP包;
    命令:mv install_package demo回车;//将安装程序目录改名为demo;
    命令:chown -R apache demo回车;//将demo目录递归修改所有者为apache;
    命令:ls -Z回车;查看一下上下文关系,如果程序压缩包直接下载到html目录解压不会有问题,如果下载到www外其它目录再移动到html目录,那么其上下文关系就需要修改,不然selinuux防火墙会禁止访问;
    命令:restorecon -Rv demo回车;//递归修改上下文关系,直接下载到html文件夹的可省略;
    drwxr-xr-x. apache root unconfined_u:object_r:httpd_sys_content_t:s0 demo

     

     

     

     

  • CentOS7中安装phpcmsV9测试lamp环境

    CentOS7中安装phpcmsV9测试lamp环境

    在安装phpcms前,应该确保已经在CentOS7中搭建LAMP环境,然后继续下面的步骤:
    1、下载phpcmsV9(官网URL:http://download.phpcms.cn/v9/9.6/phpcms_v9.6.0_UTF8.zip):

    命令:yum -y install wget回车;//安装wget工具,centos7最小安装默认没有,提示没有wget命令先安装;
    命令:cd /var/www/html回车;
    命令:wget http://download.phpcms.cn/v9/9.6/phpcms_v9.6.0_UTF8.zip回车;//下载到当前目录html;
    命令:yum -y install unzip回车;//安装zip解压工具;
    命令:unzip phpcms_v9.6.0_UTF8.zip回车;//解压文件到当前目录;
    命令:ls回车可查看多出两个目录(install_package与readme);
    命令:mv install_package phpcmsv9回车;//重命名cms程序目录名称;

    2、访问服务器ip/phpcmsv9目录按步骤安装(如:http://192.168.3.250/phpcmsv9/)

    phpcmsV9准备安装-安装许可协议
    点击开始安装
    phpcmsV9正在安装-运行环境检测不通过
    MYSQLI扩展及GD扩展必须开启,环境监测不通过。

    命令:yum -y install php-mysql php-gd回车;//自动安装mysqli扩展及GD扩展,很方便。
    命令:systemctl restart httpd回车;//重启apache服务;然后去浏览器刷新页面

    phpcmsV9正在安装-运行环境检测通过
    运行环境检测通过,继续下一步
    phpcmsV9正在安装-选择模块-全新安装
    选择全新安装,继续下一步
    phpcmsV9正在安装-文件权限检测不通过
    文件权限检测不通过,逐个解决。

    命令:chmod 777 -R index.html caches/ html/ uploadfile/ phpsso_server/caches/ phpsso_server/uploadfile/回车,上图中的所需的权限除了网站根目录其它都改了,-R是对于后面加/的目录递归修改;
    命令:chmod 777 ../phpcmsv9回车,单独修改网站根目录权限,这里不需要-R递归修改;
    刷新浏览器,发现还是不行,还是全部打叉;怎么回事?
    命令:setenforce 数字0回车临时关闭防火墙,重启服务器后会失效。
    再刷新浏览器,发现就可以了。这里只是演示安装,我们继续下一步就可以。后期可以用setenforce 1打开防火墙再研究测试这个权限不可写的问题。

    phpcmsV9正在安装-文件权限检测通过
    通过文件权限检测,继续下一步
    phpcmsV9正在安装-填写数据库信息账号信息
    填写数据库信息、账号信息继续下一步
    phpcmsV9正在安装-安装成功
    恭喜你,安装成功。
    phpcmsV9安装成功-后台管理登陆
    点击上一步的后台管理直接进入后台管理登陆界面,或者在浏览器直接输入你的url/admin.php访问。
    phpcmsV9安装成功-后台登陆成功-后台界面
    后台登陆成功-后台界面

    整个的安装步骤到这里就结束了,重点就是权限问题需要注意一下,后期出现不可写之类的问题肯定就是setenforce防火墙开启了,接下来可以研究一下phpcmsV9文件chmod 777后权限仍然不可写的具体原因