前言

网站搭建成功后,我逐渐意识到管理用户权限的重要性。特别是 Linux,作为一个多用户系统,为不同用户设置不同权限就更有必要。下面,简单讨论一下我在搭建网站时遇到的问题。

基础知识回顾

读、写和执行权限

这里简单回顾读(R)、写(W)、执行(X)权限。这里简单罗列两张表,想了解更多建议检索关键字。

目录权限对应数数值说明
4有无权限代表能否获取目录下包含哪些文件
2有无权限代表能否对目录下的文件进行删除或添加操作
执行1有无权限代表能否进入目录
文件权限对应数数值说明
4有无权限代表能否读取文件的内容
2有无权限代表能否修改文件的内容
执行1有无权限代表能否将文件视作可执行文件

说明一下,上述权限可以叠加,例如可读可写相当于 4 + 2 = 6,可读可执行相当于 4 + 1 = 5。

修改权限和所有者的方法

Linux 的文件和目录可以保存文件的权限和所有者信息。

权限用三位数表示,依次指代所有者、用户组、其他用户的权限。例如,想要让某个文件拥有者可读可写、用户组可读、其他用户可读,那么权限就是 640,使用 chmod 为文件或者目录赋权:

chmod {0-7}{0-7}{0-7} {文件或者目录}

使用 chown 变更文件或目录的所有人(组):

chown {用户}:{用户组} {文件或者目录}

网站根目录下文件权限管理

之前我们将服务器程序的运行用户设置为 www,这样服务器程序具备 www 的相关权限。要想让服务器返回某个文件,就必须保证服务器能够访问它。首先执行如下命令将网站根目录 wwwroot 包括里面的文件和目录的所有人设置为 www:

chown -R www:www wwwroot

下面分几种情况测试文件 wwwroot/pages/test.html 能否访问:

情况wwwrootpagestest.html服务器能否访问服务器能否修改
S1100100400×
S2100100200x
S3100100600
S4600777777××
S4777600777××

从上表可知 S1 是服务器返回 test.html 的必要权限,S2 是服务器编辑 test.html 的必要权限。

如何防止 Sqlite 数据库被下载

Typecho 安装程序在指定 Sqlite 数据库文件地址时,默认在 typecho 博客程序目录下的 /usr 内放置。为防止被下载,安装程序将数据库命名为 {随机字符串}.db。在默认情况下,如果我们知道数据库文件名,便可以通过浏览器下载整个数据库。

解决这个问题有很多思路,从服务器程序上来考虑,我们可以这样做,例如:

  • 拒绝客户端访问后缀名为 .db 的文件
  • .db 文件放置在网站根目录

我们也可以从权限的角度解决这个问题,例如:

  • 关闭服务器相关目录的读取权限,从而加大获取数据库名称的难度。
  • 将服务器和 php-fpm 运行用户分别设置为两个,数据库读写权限只给到 php-fpm 的运行用户。

当然这里不推荐使用权限来解决这个问题,只是作为一个例子抛砖引玉罢了。

最后修改:2024 年 03 月 02 日
如果觉得我的文章对你有用,请随意赞赏