如何更改我的pyramid / python web apps目录的权限?

时间:2013-02-08 20:44:11

标签: python filesystems pyramid chmod

现在我的网络应用程序在我的本地计算机上具有此文件结构

 env
    tutorial
        tutorial
            templates
                home.pt
            static
                pages
                    1.html
                    2.html
                    3.html
                     ....
            views.py
            __init__.py

页面目录下的html文件由表单生成。我想使这个页面目录可写,以便用户可以通过应用程序向其添加html文件,但使所有其他目录不可写并且只能读取。我一直在阅读关于chmod的内容,它看起来像是

chmod a+x env/tutorial/tutorial/static/pages

会使该页面目录可写。但是我怎样才能确保只有该目录是可写的(所有其他目录都是不可写的和只读的)?它只是

chmod a-x env

显然我会先执行这个命令。我执行它时应该在哪个目录中。如果我在我的本地机器上正确地执行了所有这些操作,我是否仍然可以开发(添加代码等)或者我应该等到我全部完成。当我将应用程序放在Web服务器上时,是否会继承这些权限,还是我必须以不同的方式再次执行此操作?

2 个答案:

答案 0 :(得分:2)

在生产环境中,Web服务器通常作为非特权用户运行,例如www-data或其他用户。此类用户通常没有登录shell设置,并且文件系统上没有文件,因此如果应用程序中的漏洞允许攻击者在计算机上运行任意代码,他们仍然无法修改任何文件。

因此,在生产环境中,确保Web服务器用户无法修改任何文件的最简单方法是将文件的所有权更改为其他用户比你的网络服务器的有效用户。您的普通登录用户或root是合适的候选人:

chown -R bigboy:bigboy /opt/where/my/code/is

sudo chown -R root:root /opt/where/my/code/is

正常umask设置将允许Web服务器读取文件但不允许写入任何内容。适用于典型的Web应用程序。

因此,要为网络服务器提供对某个目录的写入权限,您可以将目录的所有权更改为网络服务器的有效用户:

sudo chown -R www-data /opt/where/my/static/directory/is

开发环境中,您通常以正常登录用户身份运行pserve命令,因此撤销用户的读取权限是不切实际的,因为您不会能够编辑任何文件。最简单的方法是将另一个用户添加到系统,chown将静态目录添加到该用户,以该用户身份打开终端shell并从那里运行服务器。

sudo chown -R testuser:testuser env/tutorial/tutorial/static/pages
sudo su testuser
env/bin/pserve ...

或者,在开发环境中,您可以继续以普通登录用户身份运行所有内容,因为您通常是唯一可以访问服务器的人。

答案 1 :(得分:1)

不,

chmod a+x env/tutorial/tutorial/static/pages

设置该目录的执行位。您想要的是根据rails将运行的用户(或可能的组)设置该目录上的写入位。对于当前用户,请执行:

chmod +w env/tutorial/tutorial/static/pages

从chmod手册页 - 查看底部的符号模式表(Mac OSX):

MODES
 Modes may be absolute or symbolic.  An absolute mode is an octal number constructed from the sum of one or more
 of the following values:

       4000    (the set-user-ID-on-execution bit) Executable files with this bit set will run with effective uid
               set to the uid of the file owner.  Directories with the set-user-id bit set will force all files
               and sub-directories created in them to be owned by the directory owner and not by the uid of the
               creating process, if the underlying file system supports this feature: see chmod(2) and the
               suiddir option to mount(8).
       2000    (the set-group-ID-on-execution bit) Executable files with this bit set will run with effective gid
               set to the gid of the file owner.
       1000    (the sticky bit) See chmod(2) and sticky(8).
       0400    Allow read by owner.
       0200    Allow write by owner.
       0100    For files, allow execution by owner.  For directories, allow the owner to search in the directory.
       0040    Allow read by group members.
       0020    Allow write by group members.
       0010    For files, allow execution by group members.  For directories, allow group members to search in
               the directory.
       0004    Allow read by others.
       0002    Allow write by others.
       0001    For files, allow execution by others.  For directories allow others to search in the directory.

 For example, the absolute mode that permits read, write and execute by the owner, read and execute by group mem-
 bers, read and execute by others, and no set-uid or set-gid behaviour is 755 (400+200+100+040+010+004+001).

 The symbolic mode is described by the following grammar:

       mode         ::= clause [, clause ...]
       clause       ::= [who ...] [action ...] action
       action       ::= op [perm ...]
       who          ::= a | u | g | o
       op           ::= + | - | =
       perm         ::= r | s | t | w | x | X | u | g | o