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

Smi*_*ter 13 security bash postgresql passwd-file

cat /etc/passwd |grep postgre

postgres:x:115:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
Run Code Online (Sandbox Code Playgroud)

apt-cache show postgresql

Package: postgresql
Priority: optional
Section: database
Installed-Size: 65
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PostgreSQL Maintainers <pkg-postgresql-public@lists.alioth.debian.org>
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
Run Code Online (Sandbox Code Playgroud)

我可以替换/bin/bash使用/bin/false

anx*_*anx 5

如果服务器管理员使用sudo并且不注意这会导致什么环境和 umask,则对数据库的操作最终可能会在意外位置或具有意外权限的情况下创建文件。

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

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

usermod --shell /bin/false postgres
Run Code Online (Sandbox Code Playgroud)

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

su --shell /bin/bash postgres
Run Code Online (Sandbox Code Playgroud)

权威来源:

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


小智 4

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