从Coding的WebHook到Linux用户的权限之旅

就在昨天公司迎来了历史性的一刻,代码从私有的SVN 服务器上,搬家到公有云代码管理平台Coding上。

本来以为这是一件很简单的事情,但是却迎来了我噩梦的开始。

第一步:把代码迁移到Coding上,很顺利,并没有什么毛病,一切都是那么的美好。

第二步:在服务器和本地都配置无密码访问Coding,一切又是那么的美好,没毛病。

第三步:在Coding上配置webhook。还是没有问题。一切又是那么的完美。

第四步:在Linux的服务器上配置webhook所访问的钩子。完了,噩梦从此开始。


我在服务器上写好了钩子的脚本,其实也就两句话话,总共三行代码[实现原理就是让PHP去执行一个系统的命令,然后更新代码]。

git_update.php

  <?php
    $cmd = "sudo git pull";
    shell_exce($cmd);

我直接放在了项目的外部访问目录下,心想直接访问链接就能更新代码了(我webhook上设置的就是这个地址)。

让后我进行了访问,没有任何鸟用。也没有任何报错,好像什么事情都没有发生过。

然后我又在项目的外部访问目录下去执行这个命令【git pull】,完全没有任何问题,一样能更新。

之后我又执行PHP文件命令【PHP git_update.php】,没有问题,一样也能更新。

最后我又在外部来访问。还是什么事情都没有发生。不执行。

至此,开始怀疑人生。。。。。。。。。


第一个解决方案:

遇到这样的问题肯定是先找“度娘”,疯狂找了一圈,大家写的基本上都是大同小异,貌似现在的博客基本上都是抄的,基本都是这样的

\微信截图_20180518201836.png

然后我开始按照步骤来,一步两步,三步四步,每次都是到了最后一步就是执行不了更新指令。

然后我又去“正确上网”了一下。看见有人说:可能是命令执行权限的问题。

这里要解释一下:linux之所以安全,就是因为它权限做的很死,只要你没有权限,对不起,你不能操作。


我又开始漫长的权限之旅。


首先检查权限。因为最开始的时候来公司就我一个人做开发,所以从我拿到服务器的那一刻起,我就一直用的超级管理员权限(root账户),从来没有创建过用户账户,每次装软件的时候也没有进行权限分配。都是软件的默认权限。

这里说一下:和web开发相关的几款软件

  1. nginx
  2. php-fpm(不知道这个的自行百度,还有一个php与nginx之间的东西叫fastcgi)
  3. mysql

这几个软件:我安装过后它们的自行创建了用户,然后都分别挂载自己的用户权限下面。 nginx创建的默认账户是nginx。

php-fpm创建的默认账户是apache,不要理解错了哦,这里的apache是指的账户。我也不知道为什么它会自己创建这个名字的账户。我是直接源码编译安装的。

mysql创建的默认账户是mysql。


本来这几个账户应该统一一下,挂载在www这个账户下面。然而我当时只是个linux的小白,并没有想那么多。只要老板一声令下,就直接干通宵了(小公司你懂得)。

所以现在面临着改权限的问题,我对权限又不熟悉,就跑去隔壁问我们公司做硬件的大牛。因为他们随时都在linux上编译东西,所以对linux很熟悉。用了一个上午的时间,终于搞的有点明白了:

使用linux正确的姿势应该是:

1.先用root账户创建一个用户账户。

2.然后你要进行内部的操作都在用户账户下操作,而不是管理员。

3.安装软件环境的时候可以直接使用root账户安装。但还是要给软件分配权限账户。

下午开始重新来审视自己的问题:

第一步: 检查日志,linux的日志一般都在/var/log/这个目录下面,当然,喜欢特立独行的我也没辙。

里面有很多日志:这里主要开secure和php-fpm的日志。 时至现在我才体会到原来日志真的很重要,特别是在关键的时刻

后面查看日志发现apache账户没有使用sudo提权的权利,要在/etc/shudoer里面加上一句话 “apache ALL=(ALL) ALL”,这句话是什么意思呢,我也还在学习中,大致意思就是加上这句话你就能使用sudo提权然后执行git pull了。

到此还没有完。


另外的问题出现了,就是之前所有的项目都没有创建文件的权限了。即时加了777权限也不行。

因为我之前一直是用的root权限去操作的所有文件,所有的文件都是属于root账户下面的,而php-fpm所执行的权限现在是apache这个。所以要操作,还必须得把所有web下的文件权限转到apache权限下面。再执行一个命令“chown -R apache:apache 文件” 。

好了,现在才是彻底的好了。腰也不疼了,心情也愉快了。。


得到的教训和经验:

1.用linux系统的时候千万不要用root账户去做一些基本文件的操作。要先创建用户账户,不要直接用管理员账户。

2.linux下面有很多的日志记录,一定要学会看日志记录,这样才能及时发现问题所在(PS:我最开始的时候就没有去看日志文件,导致浪费了两天的时间)

3.linux的权限真得好好去学习一下,要不然后面出了问题很严重。

4.遇到不会的问题要多向人请教,三人行必有我师。


                Thanks
                 [PHP程序员][1]

评论
...

小明

有来过,666666。

4楼  2017-08-08  23:15发表


BILL ZHANG

BILL ZHANG

管理员

热门文章

友情链接

PHP程序员

有事扫我↓↓

PHP程序员