第十七章:第54节Linux用户管理——更改用户标识号

更新于:2020-12-28 14:46:59

再来讲解一个小问题:


我们学习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”等普通账户直接上传文件到网站根目录,必然报没有权限的错误。


1.png


解决的方法有很多,比如先把源码上传到“ubuntu”的主目录,再借助root用户修改文件属主为“www-data”,mv移到网站根目录。这样操作的话,比较麻烦繁琐。


最直接的办法:假设ssh普通登录账号是“ubuntu”,把nginx、PHP设置为“ubuntu”,网站文件也设置为“ubuntu”。


下面楠神介绍另一种方法,把“ubuntu”的用户标识号改成和“www-data”的用户标识号,让“ubuntu”与“www-data”变成同一用户。


1)查看passwd文件


1.png


2)直接修改passwd文件


把“ubuntu”账户的500改成33


1.png


3)修改下“ubuntu”主目录的属主


由于“ubuntu”账户的主目录还是500,目前已没有这个账户标识符了,ubuntu账户的用户标识符已是33。我们需要修改过来,不然的话“ubuntu”ssh公钥登录会失败。


1.png


这样我们就可以随时使用winscp方便地上传新文件、覆盖旧文件进网站根目录。


这种方法本质上和“ssh普通登录账号是‘ubuntu’,把nginx、PHP设置为‘ubuntu’,网站文件也设置为‘ubuntu’”一样的。


建议:


不要为了方便,而疏忽安全问题。

网站目录文件其实要和nginx、PHP目录文件一样设置为root用户(755)【需要注意下,有些目录必须保留PHP有写权限,如上传图片目录、生成网站缓存文件、日志文件的目录,这些目录就不宜设置为root(755)】,

每次更新文件时,可以先临时把网站根目录设置回“ubuntu”用户,上传完毕,立马修改回root用户。

这样有好处,哪怕web程序出现了bug,可以上传木马文件,PHP在网站根目录下是没有写权限,它也上传不了木马文件。

同时做好nginx的限定PHP脚本运行《nginx安全设置——限定PHP脚本运行》,即便上传到了有写权限的目录(比如上传图片目录),也执行不了。