直到今天早上一切都运转良好。 postgresql 服务已停止,无法启动。
当我运行该命令时sudo service postgresql start
,我收到一条 [FAILED] 消息。然后,我转到 /var/lib/pgsql/pgstartup.log 文件,并看到以下错误消息:
runuser: /bin/bash:/sbin/nologin: No such file or directory
然后我尝试 su 到 root,这是我过去能够做到的,但我收到了相同的错误消息。然后我尝试 su 用户 postgres,并收到相同的错误消息。
这些文件确实存在,我检查了它们(/bin/bash 和 /sbin/nologin)。
注意 - 我能够通过键入以下命令来解决该错误 - sudo chsh root -s $SHELL
。这实际上允许我在 su 到 root 后启动 postgresql 服务器。我想我现在的问题是 - 有谁知道什么会导致这种情况?我应该担心我的系统在安全方面受到损害吗?
答案1
无论出于何种原因,您的 root 用户的登录 shell 被设置为文字值/bin/bash:/sbin/nologin
。当以 root 身份运行时sudo
以及需要 root 登录 shell 时,系统将尝试执行文字命令/bin/bash:/sbin/nologin
,但由于显而易见的原因,该命令并不存在。/bin/bash
和/sbin/nologin
单独存在并不重要。
使用 修复后chsh
,您很可能需要检查 root 登录 shell 以确保它确实是/bin/bash
(Oracle Linux 上的默认登录 shell)。您应该能够通过简单地检查返回的条目来做到这一点
getent passwd root
应该有七个:
用 - 分隔的字段,最后一个应该是/bin/bash
。