再来讲解一个小问题:
我们学习Linux的目的最终是为了架设web应用,就是做网站。我们的网站程序源码都是在Windows上编写的,在开发以及后期维护中,会频繁使用winscp上传源文件到服务器的web根目录中。前面几节不是说了嘛,为了安全不让root账户使用ssh协议登录服务器。比如楠神会用“ubuntu”或者“nanshen”这样的普通账号winscp上传文件。处于安全的考虑,给nginx和PHP设置了单独的用户(比如www-data:www-data),而网站根目录和文件也会改成这样:
属主是“www-data”,未对其他组、其他普通账户开放写权限。
drwxr-xr-x 2 www-data www-data 4096 Jan 14 15:37 html |-- -rwxr-xr-x 1 www-data www-data 537 Jan 3 15:02 50x.html |-- -rwxr-xr-x 1 www-data www-data 612 Jan 3 15:02 index.html |-- -rwxr-xr-x 1 www-data www-data 17 Jan 10 15:40 info.php
所以用“ubuntu”等普通账户直接上传文件到网站根目录,必然报没有权限的错误。
解决的方法有很多,比如先把源码上传到“ubuntu”的主目录,再借助root用户修改文件属主为“www-data”,mv移到网站根目录。这样操作的话,比较麻烦繁琐。
最直接的办法:假设ssh普通登录账号是“ubuntu”,把nginx、PHP设置为“ubuntu”,网站文件也设置为“ubuntu”。
下面楠神介绍另一种方法,把“ubuntu”的用户标识号改成和“www-data”的用户标识号,让“ubuntu”与“www-data”变成同一用户。
1)查看passwd文件
2)直接修改passwd文件
把“ubuntu”账户的500改成33
3)修改下“ubuntu”主目录的属主
由于“ubuntu”账户的主目录还是500,目前已没有这个账户标识符了,ubuntu账户的用户标识符已是33。我们需要修改过来,不然的话“ubuntu”ssh公钥登录会失败。
这样我们就可以随时使用winscp方便地上传新文件、覆盖旧文件进网站根目录。
这种方法本质上和“ssh普通登录账号是‘ubuntu’,把nginx、PHP设置为‘ubuntu’,网站文件也设置为‘ubuntu’”一样的。
建议:
不要为了方便,而疏忽安全问题。
网站目录文件其实要和nginx、PHP目录文件一样设置为root用户(755)【需要注意下,有些目录必须保留PHP有写权限,如上传图片目录、生成网站缓存文件、日志文件的目录,这些目录就不宜设置为root(755)】,
每次更新文件时,可以先临时把网站根目录设置回“ubuntu”用户,上传完毕,立马修改回root用户。
这样有好处,哪怕web程序出现了bug,可以上传木马文件,PHP在网站根目录下是没有写权限,它也上传不了木马文件。
同时做好nginx的限定PHP脚本运行《nginx安全设置——限定PHP脚本运行》,即便上传到了有写权限的目录(比如上传图片目录),也执行不了。