确保 Linux、Apache、MySQL、PHP 服务器(甚至 Perl)的安全以供生产使用的程序是什么?
除了设置 MySQL 密码和 Linux 的 root 密码之外,还应采取哪些其他(可能不那么明显)的步骤?
此外,如果我变得格外偏执,我该采取什么措施呢?这些措施通常可能没有必要?
这是针对基本的单站点使用但必须是安全的。
答案1
这些建议都是我临时想到的,并不旨在面面俱到。
查看 Bastille,它是一系列在 Linux 中实现最佳实践的脚本。
不要通过纯文本协议发送身份验证数据。例如,禁用 FTP。如果通过 Apache 发送身份验证数据,请使用 SSL。
禁用并删除任何不必要的软件,包括 GUI 界面。
审核任何设置了 SUID 位的文件并将其删除。(这将严重限制非 root 权限。了解每个单独更改的含义。)
审核公共可写目录并删除可写位。(保留 /tmp。)
避免以 root 身份运行任何守护进程。
详细研究所有监听套接字的多用户软件,以获得最佳的安全实践。
避免向系统添加用户是最好的方法之一。多用户系统需要更加注重细节。
强制执行密码标准。例如:最少 10 个字符,非字母数字字符,使用字母和数字。这是为了让暴力破解变得更加困难,以防密码文件被泄露。通过系统强制执行。
5 次身份验证失败后锁定用户,锁定时间至少为 10 分钟。保留密码历史记录,以便用户无法使用过去 5 次的密码。
如果您的环境较大,则绝对需要使用具有多个子网的网络隔离来隔离风险。如果环境较小,建议在本地系统上运行防火墙以限制暴露。例如,仅允许 SSH 访问您的 IP。tcpwrappers 也可用于额外的一层。(/etc/hosts.allow、/etc/hosts.deny)
当然,还要保持所有软件都是最新的。特别是面向公众的守护进程。
使用 SSH:
- 禁用 SSH 协议 1
- 仅允许根身份验证
without-password
(仅密钥对)
使用 Apache:
- 禁用不需要的任何模块
- 禁用 .htaccess 和公共目录
- 禁用 FollowSymlink 和任何不必要的选项
- 如果您不需要 PHP,请不要安装。
使用 MySQL:
- 禁用默认用户。
- 不要使用通配符主机。
- 确保为每个用户设置唯一的主机。
- 除非必要,否则不要监听 tcp。(通常无法避免。)
- 尽可能限制应用程序用户权限。(SELECT、INSERT、UPDATE、DELETE 适合写入,SELECT 适合读取)
我建议专门研究 php.ini 的安全性调整。默认情况下,它是风险较高的软件。
答案2
这是一篇很好的文章,您可以将其用作设置的基础,并根据您的发行版进行相应的更改:http://it.toolbox.com/blogs/rayheffer/how-to-build-a-secure-lamp-web-server-with-centos-5-36786