为什么要为 PostgreSQL 提供用户一个 shell?

为什么要为 PostgreSQL 提供用户一个 shell?

cat /etc/passwd |grep postgre

postgres:x:115:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

apt-cache show postgresql

Package: postgresql
Priority: optional
Section: database
Installed-Size: 65
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian PostgreSQL Maintainers <[email protected]>
Architecture: all
Source: postgresql-common (136)
Version: 9.1+136
Depends: postgresql-9.1
Filename: pool/main/p/postgresql-common/postgresql_9.1+136_all.deb
Size: 5468
MD5sum: 34f5a1373ad5cd0b6f5aa3e7af06c9e7
SHA1: 6f271758bd51c23614b12fd63fb711ecfa43e9e5
SHA256: e8921a22b560e81f57a2a00001e31ba1036f67a8e7f151bf8f977b4919fc559a

我可以/bin/bash用替换它/bin/false吗?

答案1

如果服务器管理员使用sudo时不注意环境和 umask 的设置,则在处理数据库时可能会在非预期的位置或以非预期的权限创建文件。

为用户分配 shell 使管理员能够以 postgres 身份登录并在该用户 shell 上执行工作。找出sudo不明确的服务器错误消息的来源将是一件非常令人头疼的事情。

如果你不需要这个,并且确定你永远不会以这种容易出错的方式调用 postgres 二进制文件,那么你可以安全地删除 shell:

usermod --shell /bin/false postgres

请记住,除了能够成为 root 之外,您仍然可以成为任何人,包括没有有效 shell 的用户:

su --shell /bin/bash postgres

权威来源:

有时您希望以该用户身份登录,以便能够执行某些类型的特殊管理或修复。例如,如果您需要运行 pg_resetxlog,您可能希望以 postgres 身份登录,除非您非常确信您的 su 或 sudo 调用是正确的,并且不会以奇怪的方式弄乱数据库目录的权限。--Peter Eisentraut,PostgreSQL 开发人员

答案2

有一个 shell,因为我们以 PostgreSQL 用户身份从命令行使用 PostgreSQL。

答案3

出于安全原因,Postgres 在特殊的操作系统用户帐户下运行。安装程序运行时,此帐户会在您的计算机上创建,除非在命令行上被覆盖,否则它将被称为“postgres”。

在类 Unix 操作系统(例如 Linux 和 Mac OS X)上,帐户设置时无需密码,用户通常无需再担心这个问题。来源

另外,手动编辑 passwd 文件也不是一个好习惯。你应该使用以下命令:

sudo passwd postgres

相关内容