我有一个LEMP 堆栈(Ubuntu 20.04)它由我完美配置和优化。它没有任何网页面板。我最初只将它用于我自己的网站。后来我开始将一些客户网站添加到服务器中。
由于他们请求 SFTP 访问权限来管理网站文件,我决定确保他们无法访问/编辑服务器上的敏感文件。
为了尽可能隔离用途,我做了以下更改:
- 创建了一个 sudo 用户(我们称之为服务器管理员)并且 root 访问权限已被禁用
chmod 700 /home/serveradmin
(没有-R
)- 为我的客户创建普通用户帐户(例如客户端 1、客户端 2......),然后将其全部添加到服务器管理员团体
- 将 nginx 用户设置为服务器管理员
- 为每个客户端创建不同的 php-fpm 池。(例如所有者:client1 组:serveradmin,听众也一样)
- 使其他人无法访问敏感的网站文件(例如,wp-config.php 文件包含数据库凭据)
chmod -R 700
用于网站 SSL 文件夹。- 当然,为每个客户端创建了不同的 mysql 用户和数据库。
现在,我 100% 确定没有人可以访问其他 /home/clientX 文件夹。他们至少不能编辑或删除任何文件。但是,我不是经验丰富的 Linux 用户,也不是托管服务提供商。事实是,这些客户端是否会通过访问和编辑 /home 文件夹之外的任何系统文件来损坏/损害我的服务器?(例如,/etc、/var/run 路径可能很危险,我猜)。
我没有更改默认系统文件的文件夹/文件权限。
那么,我的服务器不安全吗?是否仍需要进行更改以提高安全性,还是我应该完全避免向他们提供 SFTP 访问权限?
亲切的问候。
答案1
至少第 3 点和第 4 点是无效/不安全的。
- 为我的客户创建普通用户帐户(例如客户端 1、客户端 2......),然后将其全部添加到 serveradmin 组
普通用户帐户与服务器管理员有什么关系?绝对没有关系,甚至命名也是如此。让每个站点用户都属于该serveradmin
组有什么意义?
- 将 nginx 用户设置为 serveradmin
同样。NGINX 应该在其自己的用户,通常为nginx
(CentOS/RHEL 发行版)或www-data
(基于 Debian 的系统)。它与服务器管理无关。
我无法详细说明当前设置如何不安全,因为这需要更多细节,例如 PHP 的套接字所有权、文件位置等。
真正安全的设置假设尽可能多地将用户分开,这适用于服务。因此,首先为 NGINX 分配(或使用包提供的用户)单独的用户,然后执行PHP-FPM 的安全权限。NGINX 的用户应该位于每个站点的用户组中,而不是相反:
usermod -a -G client1 nginx
usermod -a -G client2 nginx
...
现在nginx
用户属于client1
和client2
组。为什么呢?因为nginx
用户确实必须能够读取每个网站文件。
另一方面,PHP-FPM 池可以很好地绑定到client1:client1
运行时和套接字监听选项。