我有一台airflow
服务器,airflow
用户将其主目录设置为与/opt/airflow.
应用相关的文件,并且配置存储在这里。现在,我有几个服务器,用户必须通过 SSH 进入并运行命令。这些其他服务器上没有安装 airflow 应用,但用户需要运行airflow
一些脚本。airflow
对于这些非 Airflow 服务器,适当的主文件夹应该设置为何?请注意,人们不能简单地以用户身份登录到该框中,airflow
也不应该将其用于几个脚本之外的任何事情。
答案1
提出一个安全模型需要比您在这里提供的更多的努力和信息。
(顺便说一下,SELinux 是最后的您应该寻找一个安全、可支持、经济实惠的解决方案)
对于这些非 Airflow 服务器来说,适当的主文件夹应该设置为何?
它应该遵循服务帐户的惯例。这应该基于所需的 I/O 特性以及与系统其他用户的隔离。在大多数情况下,只需将它们添加到 /home 中就足够了。
不能简单地以 airflow 用户身份登录到框中
我不明白你在这里想告诉我们什么。如果你想在远程系统上自动运行脚本,那么使用带有密钥对的 ssh 是迄今为止最简单的解决方案。在同一个 OpenSSH 服务器上同时使用密钥对和密码登录(如果需要)比只使用一种身份验证方法要棘手一些 - 但仍然可行。如果你不想让真正的用户使用该帐户,那么不要告诉他们密码并拒绝使用权限访问 ssh 私钥(openssh 默认这样做)。
如果您按照通过 ssh 隧道传输调用的路线前进,那么您应该查看受限 shell(rbash、rssh)的选项。
他们也不应该将它用于一些脚本之外的任何事情
这需要多认真地执行?设置所有可执行文件的权限将很难维护。您可以 chroot 登录 shell 以阻止用户访问大多数命令 - 并使用覆盖文件系统有选择地使脚本所需的命令可用。最好确保用户无权在任何地方读取/写入,并通过 sudo 定义对脚本的访问权限。
您可以与目标上运行的守护进程进行通信来执行任务,而不必使用 ssh 连接。
遗憾的是,很多“安全”指南都建议禁用 [x]inetd - 而特权分离是构建安全系统的关键工具。(我还没有开始喝 systemd 的 kool-aid,但它有自己的按需服务功能)。然而,这需要您构建自己的身份验证层。但解决身份验证问题的一个简单方法是配置一个隧道实例仅接受颁发给 airflow 服务器的客户端证书,并执行您的脚本-或多路复用脚本的方法:
#!/bin/bash
read USERCMD
USERCMD=`basename "${USERCMD}"`
if [ -x "${HOME}/bin/${USERCMD}" ]; then
"${HOME}/bin/${USERCMD}"
fi
exit
...并使用 airflow 服务器上的客户端 stunnel 或 openssl s_client 进行连接。
答案2
您可以将主目录放在您想要的任何位置。
为了简单和合理,我建议每个主机上给定用户的 home 都相同。您可以将其存储在中央 (LDAP) 目录中。
使用 SSH 密钥会导致潜在的敏感凭据存储在通常的 /home 之外的某个地方。请确保适当保护这些凭据。检查 sshd 是否可以访问它们,例如使用适当的 SELinux 策略标记它们。