现在我的网络应用程序在我的本地计算机上具有此文件结构
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服务器上时,是否会继承这些权限,还是我必须以不同的方式再次执行此操作?
答案 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