为什么为用户提供了用于PostgreSQL的外壳?


11

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 <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

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


1
@Jorge Castro我的问题是,为什么要为PostgreSQL的用户提供一个外壳,而不是为什么要为PostgreSQL的用户提供一个..因为我已经看到其他用户(如MySQL)不需要它。
Smile.Hunter 2012年

Answers:


4

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


那么,我们没有使用MySQL作为MySQL用户吗?我想可能是该用户用于内部系统,这意味着我不应该删除该用户/bin/bash以保持PostgreSQL正常运行。
Smile.Hunter 2012年

2

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

在类似Unix的操作系统(例如Linux和Mac OS X)上,该帐户的设置没有密码,用户通常无需再担心它。来源

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

sudo passwd postgres

2
谢谢,但是我想知道为什么PostgreSQL用户会有一个“ bash shell”,我了解到权限导致某人登录到postgresql,然后以某种方式获得了一个bash shell,对于我来说,这对服务用户来说是没有意义的从未登录。(我看到其他用户使用了apache2,mysql等其他服务,他们并不需要用户使用bash shell)
Smile.Hunter 2012年

2

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

通过为用户分配外壳程序,管理员可以以postgres身份登录并在该用户外壳程序上进行工作。搞清楚sudo是非特定服务器错误消息的来源将是一件令人头疼的事情。

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

usermod --shell /bin/false postgres

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

su --shell /bin/bash postgres

权威来源:

有时,您希望以该用户身份登录才能执行某些类型的特殊管理或修补程序。例如,如果您需要运行pg_resetxlog,除非您非常有信心su或sudo调用正确且不会以奇怪的方式弄乱数据库目录的权限,否则您可能希望以postgres身份登录。- 彼得Eisentraut,PostgreSQL的开发


这个答案比公认的答案要好。无需登录shell就能以特定用户身份运行命令(对于sudo而言)。许多Ubuntu子系统将/ bin / false或/ usr / sbin / nologin作为其登录外壳,它们工作得很好,但并未提供新的远程访问系统的方式。
arielf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.