我看到许多博客和文章建议我不要以 root 用户身份在 Linux 上运行网站。
我是否应该创建不同的账户来运行网站?像 MySql 这样的后端数据库怎么样?它们可以以 root 身份运行,但我仍然可以以非 root 用户身份运行网站吗?
Linux 是否允许我在不同的帐户上绑定本地主机端口?
我使用 Ubuntu 10.04 x64 服务器版本。
答案1
在任何情况下都应使用完成任务所需的最小权限。
Apache 以 root 身份启动,但会以其他用户身份生成子用户。这由 httpd.conf 指定User
,Group
默认情况下为非 root 用户。
非root用户可以绑定到端口>1024。
MySQL 不需要以 root 身份运行,并在端口 3306 上运行。
答案2
取自http://httpd.apache.org/docs/1.3/misc/security_tips.html#serverroot
在典型操作中,Apache 由 root 用户启动,并切换到 User 指令定义的用户来提供命中服务。与 root 执行的任何命令一样,您必须注意保护它免受非 root 用户修改。不仅文件本身必须只能由 root 写入,而且目录和所有目录的父目录也必须只能由 root 写入。
例如,如果您选择将 ServerRoot 放在 /usr/local/apache,那么建议您以 root 身份创建该目录,使用以下命令:
mkdir /usr/local/apache
cd /usr/local/apache
mkdir bin conf logs
chown 0 . bin conf logs
chgrp 0 . bin conf logs
chmod 755 . bin conf logs
假定 /、/usr 和 /usr/local 只能由 root 修改。安装 httpd 可执行文件时,应确保它受到类似的保护:
cp httpd /usr/local/apache/bin
chown 0 /usr/local/apache/bin/httpd
chgrp 0 /usr/local/apache/bin/httpd
chmod 511 /usr/local/apache/bin/httpd
您可以创建一个可由其他用户修改的 htdocs 子目录——因为 root 永远不会执行那里的任何文件,也不应该在那里创建文件。
答案3
您似乎正在运行 debian/ubuntu。默认情况下,至少 apache、mysql 和 postgresql 以较低权限用户身份运行。您仍然需要数据库用户;我使用一个用于常规站点访问,另一个用于架构迁移。
答案4
如果您使用官方 ubuntu 软件包进行安装 - 使用 aptitude 或 apt-get;您安装的服务(例如 apache2)的用户和权限将由软件包进行整理。您没有理由自行安装。自行安装实际上会破坏软件包升级过程,并导致您无法安装安全补丁。