我看到很多博客和文章都build议我不要在root用户下运行Linux上的网站。
我应该创build不同的帐户运行网站? 怎么样后端像MySql像数据库? 他们可以作为根运行,但我仍然可以运行该网站作为非root用户?
Linux允许我绑定不同帐户的本地端口?
我使用Ubuntu 10.04 x64服务器版本。
在任何情况下都应该使用完成任务所需的最less的特权。
Apache以root用户身份启动,但以不同的用户身份生成了子项目。 这由httpd.conf中的User和Group指定,默认情况下是非root用户。
非root用户可以绑定到端口> 1024。
MySQL不需要以root用户身份运行,并在端口3306上运行。
取自http://httpd.apache.org/docs/1.3/misc/security_tips.html#serverroot
在典型的操作中,Apache由root用户启动,并切换到User指令定义的用户来提供命中。 与root执行的任何命令的情况一样,您必须注意不受非root用户修改的情况。 文件本身不仅可以由root来写,而且可以是所有目录的目录和父目录。
例如,如果您select将ServerRoot放在/ usr / local / apache中,则build议您以root身份创build该目录,并使用如下命令:
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
你可以创build一个可由其他用户修改的htdocs子目录 – 因为root从不执行任何文件,也不应该在那里创build文件。
你似乎在运行Debian / Ubuntu的。 默认情况下,至lessapache,mysql和postgresql是作为less权限的用户运行的。 您仍然需要数据库用户; 一个用于正常站点访问,另一个用于模式迁移是我使用的。
通常,您应该尽可能多地运行非root用户的服务。 这是因为如果服务以某种方式受到攻击,系统上的进程可能能够以提升的权限启动。 我发现在非root用户不能在低于1024的端口上侦听的端口要求的最佳方法是使用IPTABLES,并使用NAT表中的PREROUTING链。 这样你就可以保持最低限度的权限,但仍然在stream行的端口上回答。
Table: nat Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 172.16.1.10 tcp dpt:80 redir ports 8080 Chain POSTROUTING (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 172.16.1.10 tcp dpt:80 redir ports 8080
如果你使用官方的ubuntu软件包进行安装 – 使用aptitude或apt-get; 您安装的服务(例如apache2)的用户和权限将被包装整理出来。 你应该没有理由推出自己的。 滚动您自己可以实际上中断程序包升级过程,并使您无法安装安全修补程序。