我已经在 Fedora 37 上安装了所有 LAMP 组件(Apache、MySQL 和 PHP),但目前我还没有将 SELinux 配置从强制更改为宽容,因为我不知道如果出现恶意软件或其他问题会导致什么问题。
当然,即使有必要的 sudo 权限,SELinux 中的强制配置也不允许我更改或配置任何这些程序。
虽然我确实在这里遇到了 SELinux 的 chcon 命令:https://www.thegeekstuff.com/2017/07/chcon-command-examples/,我不清楚这些命令是否能解决我的问题。是否有任何特定命令或其他路径可以避免 SELinux 中的宽松配置?
任何帮助都将不胜感激。提前致谢。
答案1
暂时关闭 selinux(setenforce 0 表示禁用,setenforce 1 表示重新启用)有助于查看问题是否与 selinux 有关。
查看 /var/log/audit.log 也可以显示问题是否与 selinux 有关。
如果与 Selinux 相关,将日志文件中的行复制到另一个文件并在该文件上运行 audit2allow 可以生成可用于修复问题的指令。
请记住——字里行间,如果您不是熟练的系统管理员,运行 SELinux 在早期阶段可能会适得其反。专注于更简单的最佳实践——如防火墙、最小访问和日志记录原则、监控和强大的备份可能是保持系统安全的更好方法,除非您运行的服务器与大多数服务器相比面临更高的攻击风险。值得记住的是,许多(甚至服务器)发行版不使用 SeLinux,并且默认情况下没有启用增强保护。
答案2
apache 和 php-fpm 将以类型运行。您可以为具有访问权限的httpd_t
文件和文件夹设置 3 种有趣的类型:(只读)、(读写)和(例如,也可以通过 logrotate 访问)。httpd_t
httpd_sys_content_t
httpd_sys_rw_content_t
httpd_log_t
然后,您可能希望允许某些文件夹和文件只读、存储/缓存读写以及日志记录。如果您的网站位于 /opt/website,则它将类似于以下内容(以 laravel 为例):
semanage fcontext -a -t httpd_sys_content_t "/opt/website/(public|resources|vendor)(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/opt/website/storage(/.*)?"
semanage fcontext -a -t httpd_log_t "/opt/website/storage/logs(/.*)?"
restorecon -RF /opt/website
此外,如果您使用 php-fpm 的 TCP 套接字与您的数据库进行通信并且它不起作用,则您可能需要允许使用httpd_t
来执行此操作setsebool httpd_can_network_connect_db 1 -P
。
如果你需要 apache 监听 12345 这样的外来端口,你可以使用以下命令添加它semanage port -a -t http_port_t -p tcp 12345
如果你使用 php-opcache,你还需要setsebool -P httpd_execmem 1
你不需要任何其他与 selinux 相关的软件来使你的 lamp 堆栈工作,但不要忘记设置权限并打开防火墙。