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

PostgreSQL用户默认在unix套接字上进行同等身份validation,其中unix用户必须与PostgreSQL用户相同。 所以人们经常用susudo来成为postgres超级用户。

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

 sudo su - postgres 

而不是

 sudo -u postgres -i 

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

 sudo su - postgres -c psql 

代替

 sudo -u postgres psql 

如果没有sudo那么su版本就会变得有意义。 但是为什么在一个比prehisoric的UNIX或者Linux更less的情况下,你会使用sudo su

使用sudo su没有任何好处,从人们习惯使用sudo su ,这是一个不合时宜的习惯。 当Linux发行版停止设置root密码并使sudo成为访问root帐户的唯一方式时,人们开始在前面加上sudo 。 他们不是改变习惯,而是使用sudo su 。 (我是其中的一个,直到最近使用sudoersconfiguration框迫使我改变我的习惯)。

对于loginshell, sudo -u postgres -isudo su - postgres更可取。 它不要求用户在/etc/sudoers拥有root用户权限,他们只需要成为用户postgres的权限。 它也可以让你执行更好的访问控制。

用于命令执行

 sudo -u postgres psql -c "SELECT 1" 

优于备选scheme:

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

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

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

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

最后,通过sudo设置环境variables更容易,例如

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

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

所以。 忘记su命令存在。 你不再需要它了。 要打破这个习惯,将其别名打印到一个会打印错误的地方。 (一些初始化和包安装脚本仍然使用su所以你不能删除它)。

也可以看看:

  • “sudo su – ”和“sudo -i”有什么区别?
  • 什么是“sudo su”的魔力?
  • sudo -i和sudo su有什么区别 –