sudo su-postgres和sudo -u postgres有什么区别?


35

缺省情况下,PostgreSQL用户在unix套接字上对等身份验证,其中unix用户必须与PostgreSQL用户相同。因此人们经常使用susudo成为postgres超级用户。

我经常看到人们使用如下构造:

sudo su - postgres

而不是

sudo -u postgres -i

我想知道为什么。同样,我已经看到:

sudo su - postgres -c psql

代替

sudo -u postgres psql

如果您使用的是没有的旧平台,那么如果没有领先版本,sudo这些su版本将具有一定的意义sudo。但是,为什么您要在不到先行的UNIX或Linux上使用sudo su呢?


Answers:


39

忘记 sudo su

使用没有好处sudo su,从习惯到使用是一种过时的习惯susudo当Linux发行版停止设置root密码并成为sudo访问root帐户的唯一方法时,人们开始摆在前面。他们只是改变习惯,没有改变他们的习惯sudo su。(直到最近,我还是其中的一员,当时使用带有sudoers配置的工具箱迫使我改变了习惯)。

使用 sudo -u

对于登录shell,sudo -u postgres -i最好使用sudo su - postgres。不需要用户具有root访问权限/etc/sudoers,他们只需要成为用户的权限postgres。它还使您可以实施更好的访问控制。

用于命令执行

sudo -u postgres psql -c "SELECT 1"

优于替代方案:

sudo su - postgres -c "psql -c \"SELECT 1\""

因为您不必双引号和其他shell元字符,以及不需要root的其他安全优势。您可能会不小心落入书写中:

sudo su - postgres -c psql -c "SELECT 1"

有时,这将无法正常工作。

最后,通过设置环境变量更加容易sudo,例如

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

比通过su。(在这里,该PATH设置是必需的,以便initdb可以找到正确的postgres可执行文件)。

所以。忘记su命令存在。您不再需要它。要改掉习惯,将其别名为会显示错误的内容。(尽管有些init和package设置脚本仍在使用,su所以您无法删除它)。

也可以看看:

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.