![Nginx、uWSGI、Python、用户、组和权限。有关安全性的问题](https://linux22.com/image/574652/Nginx%E3%80%81uWSGI%E3%80%81Python%E3%80%81%E7%94%A8%E6%88%B7%E3%80%81%E7%BB%84%E5%92%8C%E6%9D%83%E9%99%90%E3%80%82%E6%9C%89%E5%85%B3%E5%AE%89%E5%85%A8%E6%80%A7%E7%9A%84%E9%97%AE%E9%A2%98%20.png)
好的,昨天我终于在我的 PC 上运行了 nginx 和 uWSGI 服务器。我根据网上的知识配置了 Nginx 和 uWSGI 配置文件、新用户、组及其权限以及 SSH 的 chrootdir。不幸的是,我不太信任它,所以我想问问系统管理员我是否在某个地方犯了一个大错误,这将导致有一天我会和服务器说再见。
对于 HTTP 服务器,我仅使用 /srv 目录,其结构和权限如下:
drwxr-xr-x 2 root root 4096 2012-02-03 04:16 nginx
-rw-r--r-- 1 root root 411 2012-02-03 04:25 Site1.conf
-rw-r--r-- 1 root root 170 2012-02-02 23:59 Site2.conf
drwxrwxr-x 2 root www 4096 2012-02-03 04:25 sockets
srw-rw---- 1 Site1-www www 0 2012-02-03 04:25 Site1.socket
drwxr-xr-x 2 root root 4096 2012-02-03 04:09 uwsgi
-rw-r--r-- 1 root root 190 2012-02-03 04:10 DjangoAutoreload.py
-rw-r--r-- 1 root root 1477 2012-02-03 04:13 Site1.yaml
drwxr-xr-x 5 root root 4096 2012-02-03 03:44 www
drwxr-xr-x 3 root root 4096 2012-02-03 03:49 Site1
drwxr-xr-x 11 Site1 www 4096 2012-02-03 03:48 www
... all files with Site1 user, sftponly group and rw-r--r--
/srv/nginx 文件夹中每个单独的文件中都包含新虚拟服务器的配置。/srv/sockets
文件夹仅包含 uWSGI 和 nginx 使用的套接字文件,具有权限的示例文件已经存在。/srv/uwsgi
文件夹中每个单独的文件中都包含 uWSGI 服务器每个实例的配置。
现在是 /srv/www 文件夹。此文件夹包含子文件夹,每个 SFTP 用户都有子文件夹,子文件夹上有 chrootdir。每个文件夹都包含 www 子文件夹,其中包含 Django 和 RoR 项目。
现在,我的第一个问题是:
- 文件夹的权限是否正确?
- Nginx 使用 uid=www gid=www,并且 uWSGI 的每个实例使用 uid=USER-www 和 gid=www。套接字文件夹及其文件是否具有正确的所有者、组和权限?
2.1. 如果将组的写入权限设置为 true,这不会造成安全问题吗?
2.2. uWSGI 服务器的每个实例是否应该使用相同的 uid,还是每个实例都使用相同的 uid?
2.3. uWSGI 实例是否应该与 HTTP 服务器(nginx)使用相同的 uid?
2.4. uWSGI 服务器是否不应该在权限删除之前写入套接字文件?这是一个错误吗? - /srv/www/Site1/www 文件夹的权限、所有者和组是什么?
- 如何为已经在 /srv/www/Site1 拥有 chrootdirectory 的用户配置 SSH 服务器,使其看不到并且无法通过 SFTP 访问 /srv/www/Site1 中的其他隐藏文件夹(例如日志或统计信息)?
现在,用户和组。我为服务器创建的需要以下用户和组:
uid=1003(www) gid=1003(www) grupy=1003(www)
uid=1005(Site1) gid=1004(sftponly) grupy=1004(sftponly)
uid=1006(Site1-www) gid=100(users) grupy=100(users),1003(www)
用户 www 由 Nginx 使用。
用户 Site1 仅用于客户的 SFTP 访问,在 /srv/www/USER_NAME 和 passwd 文件中的 /www 目录中有 chroot 目录。
用户 Site1-www 是“技术”用户,仅供为该用户工作的服务器和脚本使用,例如 uWSGI。
下一个问题:
- 这个用户和组的配置是否正确,不会产生任何安全问题?
- 我应该使用一个用户进行 SFTP 连接,另一个用户进行服务器连接,脚本为该用户工作(Site1、Site1-www)?
Nginx 服务器配置。我没有粘贴所有配置,因为这不是关于服务器是否配置良好的问题,而是关于它的安全性。
主要配置位于 /etc/nginx 文件夹中,我不会对这些文件进行任何权限更改。服务器在 www uid 和 group 上工作。
虚拟服务器的配置位于 /srv/nginx 目录中,该目录已完全导入(包括 /srv/nginx/*.conf;)。
服务器的主要日志位于 /var/log/nginx 文件夹中,用户日志位于 /srv/www/USER_NAME/log 文件夹中。
- 如果该配置是“正确的”,即文件夹、文件路径不是很奇怪吗?
- 有什么想法可以改变什么,使它变得更好吗?:)
现在就结束了。uWSGI配置:
每个实例的配置(每个客户有一个或多个实例,多个应用程序时使用 /srv/www/USER_NAME/www/App1..App2 文件夹)位于 /srv/uwsgi 文件夹中。uWSGI 的所有实例都使用 uid=USER_NAME-www 和 gid=www。
在 uWSGI 配置中我有以下 python 路径:
chdir: /srv/www/Site1/www
pythonpath: /srv/www/Site/www
- 我想用 chroot 将所有 uWSGI 实例关起来。在哪个文件夹?我应该怎么做才能让 Django、RoR 正常工作?
- /srv/www/Site/www 上的 pythonpath 是否会以某种方式限制帐户功能?
- 对多个项目使用一个用户和一个 /www 文件夹是否正确?
就这些了。感谢您的阅读,我非常感谢您的回答。我知道我的英语不是很完美,但我希望这一切都写得清楚易懂。我会在评论中回答所有问题,所以如果有任何不准确的地方,我可以立即解释 :)