Nginx,uWSGI,Python,用户,组和权限。 关于安全的问题

好的,昨天我终于得到了在我的电脑上运行的nginx和uWSGI服务器。 Nginx和uWSGIconfiguration文件,新用户,组和他们的权限,以及基于Web上可用知识configuration的SSH的chrootdir。 不幸的是,我不太相信它,所以我想问问系统pipe理员,如果我没有在某个地方犯过一个很大的错误,那么总有一天我会告别服务器。

对于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文件夹中的每个单独文件包含新虚拟服务器的configuration。
/ srv / sockets文件夹仅包含uWSGI ang nginx使用的套接字文件,具有特权的示例文件已经存在。
/ srv / uwsgi文件夹中的每个单独文件都包含针对uWSGI服务器的每个实例的configuration。

现在是/ srv / www文件夹。 此文件夹包含子文件夹,每个SFTP用户都有chrootdir。 每个这个文件夹包含www子文件夹,其中包含Django和RoR项目。

现在,我有我的第一个问题:

  1. 文件夹的权限是正确的?
  2. 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服务器在priviliges下降之前不应该写套接字文件吗? 这是一个错误?
  3. Whats priviliges,所有者和/ srv / www / Site1 / www文件夹组是否正确?
  4. 如何为在/ srv / www / Site1已经拥有chroot目录的用户configurationSSH服务器,以便通过SFTP访问/ srv / www / Site1中的其他隐藏文件夹,例如日志或统计信息。

现在,用户和组。 我为服务器需求创build了以下用户和组:

 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) 

Nginx使用用户www。
用户Site1仅用于客户的SFTP访问,在/ srv / www / USER_NAME中拥有chroot目录,在passwd文件中拥有/ www目录。
用户Site1-www是“技术”用户,仅供服务器和用户使用的脚本使用,例如。 uWSGI。

下一个问题:

  1. 这个用户和组的configuration是否正确,不会造成任何安全问题?
  2. 我应该使用一个用户进行SFTP连接,一个用于服务器,为这个用户工作的脚本(Site1,Site1-www)?

Nginx服务器configuration。 我不粘贴所有的configuration,因为这不是关于如果服务器configuration良好的问题,而是关于它的安全性

主要的configuration是在/ etc / nginx文件夹中,我不对这个文件做任何特权修改。 服务器在www uid和group上运行。
虚拟服务器的configuration是在/ srv / nginx目录下,完全导入(包括/srv/nginx/*.conf;)。
服务器的主日志位于/ var / log / nginx文件夹中,用户日志将位于/ srv / www / USER_NAME / log文件夹中。

  1. 如果configuration是“正确的”,即文件夹,文件path不奇怪?
  2. 任何想法改变那里,使它更好? 🙂

现在是结束了。 uWSGIconfiguration:

每个实例的configuration,每个客户一个或多个(使用多个应用程序的情况/srv/www/USER_NAME/www/App1..App2文件夹)位于/ srv / uwsgi文件夹中。 uWSGI的所有实例都可以使用uid = USER_NAME-www和gid = www。

在uWSGIconfiguration中我有以下pythonpath:

 chdir: /srv/www/Site1/www pythonpath: /srv/www/Site/www 
  1. 我想用chroot监狱所有的uWSGI实例。 在哪个文件夹? 我应该做些什么来使Django,RoR正常工作?
  2. / srv / www / Site / www上的pythonpath是以任何方式限制帐户function?
  3. 正在使用一个用户和一个/ www文件夹为多个项目是正确的?

这就是全部。 感谢您的阅读,我真的很感激任何答案。 我知道我的英语不太完美,但我希望这一切都写得清楚,可以理解。 我在评论中回答所有问题,所以如果有任何不准确的地方,我可以马上解释:)