这是一个关于 Linux Web 服务器上文件权限的规范问题。
我有一个运行 Apache2 的 Linux Web 服务器,该服务器托管多个网站。每个网站在 /var/www/ 中都有自己的文件夹。
/var/www/contoso.com/
/var/www/contoso.net/
/var/www/fabrikam.com/
Run Code Online (Sandbox Code Playgroud)
基本目录 /var/www/ 归 root:root 所有。Apache 以 www-data:www-data 运行。Fabrikam 网站由两位开发人员 Alice 和 Bob 维护。两个 Contoso 网站均由一位开发人员 Eve 维护。所有网站都允许用户上传图片。如果网站遭到入侵,其影响应尽可能地有限。
我想知道设置权限的最佳方法,以便 Apache 可以提供内容,网站不受攻击,并且开发人员仍然可以进行更改。其中一个网站的结构如下:
/var/www/fabrikam.com
/cache
/modules
/styles
/uploads
/index.php
Run Code Online (Sandbox Code Playgroud)
应该如何对这些目录和文件设置权限?我在某处读到你永远不应该在网站上使用 777 权限,但我不明白这会导致什么问题。在繁忙时期,网站会自动缓存一些页面并将结果存储在缓存文件夹中。网站访问者提交的所有内容都保存在上传文件夹中。
这是一个关于文件权限的规范问题,以及为什么777 是“破坏性的”。
我不是在问如何解决这个问题,因为服务器故障(重新安装操作系统)上已经有大量的参考资料。为什么它会做任何破坏性的事情?
如果你曾经运行过这个命令,你几乎会立即破坏你的操作系统。我不清楚为什么取消限制会对现有流程产生任何影响。例如,如果我没有对某些内容的读取访问权限,并且在终端中快速输入错误后,我现在突然可以正常访问...为什么这会导致 Linux 崩溃?
我们正在尝试通过 Cloudfront 分发 S3 存储桶,但由于某种原因,唯一的响应是一个 AccessDenied XML 文档,如下所示:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>89F25EB47DDA64D5</RequestId>
<HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
这是我们正在使用的设置:

这是存储桶的策略
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *********"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::x***-logos/*"
}
]
}
Run Code Online (Sandbox Code Playgroud) 是否有一个班轮,授予SELECT权限给新用户的PostgreSQL?
将实现以下伪代码的东西:
GRANT SELECT ON TABLE * TO my_new_user;
Run Code Online (Sandbox Code Playgroud) 我刚刚将我的 Apache 服务器更新为在 Ubuntu 13.04 下运行的 Apache/2.4.6。我曾经有一个 vhost 文件,其中包含以下内容:
<Directory "/home/john/development/foobar/web">
AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)
但是当我运行时,我得到了一个“禁止。你无权访问 /”
在做了一点谷歌搜索后,我发现要让我的网站再次工作,我需要添加以下行“要求全部授予”,以便我的虚拟主机看起来像这样:
<Directory "/home/john/development/foobar/web">
AllowOverride All
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)
我想知道这是否“安全”并且不会带来任何安全问题。我在 Apache 的页面上读到,这“模仿了以前由“全部允许”和“全部拒绝”指令提供的功能。此提供程序可以采用“授予”或“拒绝”的两个参数之一。以下示例将授予或拒绝访问所有请求。”
但它没有说明这是否是某种安全问题,或者为什么我们现在必须这样做,而过去您不必这样做。
在过去的几个月里,我一直在使用 Linux(Fedora 10,然后是 11)(并且非常享受它——就像重新发现计算机一样,有很多东西要学习)。
我已将我的用户添加到/etc/sudoers文件的最后一行,如下所示,以便在执行sudo命令时不会要求我输入密码:
MyUserName ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)
现在,每次我使用 执行命令时sudo,它都会在实际执行任务之前暂停一段明显的时间(约 10 秒)。为什么会这样,我该如何解决这个问题?我在 Fedora 11 x86 64 上运行 Sudo 1.7.1 版。
我知道我可以通过以下简单的方式设置用户的权限:
grant all on [database name].[table name] to [user name]@[host name];
Run Code Online (Sandbox Code Playgroud)
但是我怎么能看到现有的特权呢?
我需要查看与授权中使用的数据类似的数据。换句话说,我想知道给定的用户可以从给定的主机访问给定数据库的给定表。
我怎么才能得到它?
我试图将给定数据库的所有表的所有权限授予新的 postgres 用户(不是所有者)。似乎GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;没有这样做。成功运行上述命令后(作为 postgres 用户),我以 new_user 的身份得到以下信息:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Run Code Online (Sandbox Code Playgroud)
两个问题:
1) 如果没有授予 my_db 上所有表的所有权限,那么上面的命令会做什么?
2)将所有表的所有权限授予用户的正确方法是什么?(包括将来创建的所有表)
我有一种感觉,这是一个愚蠢的问题,但这是我一直想知道的问题。
我有一个 VPS,这是我的第一个大型 Linux 企业。我是唯一可以访问它的人。我的问题是,仅以 root 身份登录而不是创建帐户并授予他们 sudo 访问权限有什么问题?如果 sudoer 可以做 root 可以做的一切,那么有什么区别?如果黑客可以破解我的标准非 root 帐户的密码,那么他也可以执行 sudo 命令,那么破解我的 root 帐户的黑客有什么关系呢?
permissions ×10
linux ×4
apache-2.2 ×2
postgresql ×2
sql ×2
users ×2
amazon-s3 ×1
apache-2.4 ×1
chmod ×1
git ×1
mysql ×1
security ×1
share ×1
ssh ×1
sudo ×1
web-server ×1