如何以降低的权限运行脚本的一部分?

如何以降低的权限运行脚本的一部分?

我有以下问题:在每台运行 Postgresql 的机器上都有一个特殊用户postgres。该用户具有数据库服务器的管理访问权限。

现在我想编写一个 Bash 脚本,以 psql 作为用户执行数据库命令postgres(psql 应以用户身份执行postgres,而不是脚本)。到目前为止,这不是问题:我可以以用户身份运行脚本postgres

但是,我想将 psql 的输出写入以下目录中的文件:postgres没有写权限。

我怎样才能做到这一点?

然而,我考虑过更改脚本本身中的 EUID:

  1. 我找不到在 Bash 脚本中更改 EUID 的方法
  2. 使用类似的东西时如何更改 EUID
    psql -U postgres -c "<command>" > file

答案1

使用子外壳:(su -c 'psql -U postgres -c "<command>"' postgres) > file

在子 shell 内,您可以删除执行工作的权限,但输出将重定向到仍具有原始权限的原始 shell。

答案2

你可能想使用这个技巧:

{ anycommand } | su -c 'tee file' user

tee(1)是 POSIX 实用程序,因此您可以依赖它的可用性。


或者,与sudo

{ anycommand } | sudo -u user 'tee file'

答案3

您可以使用具有更好写入权限的用户(例如root)运行shell脚本,并且在输出数据时应写入数据库用户postgres可以写入的文件夹(例如/tmp)

数据写入完成后,将其移至您的shell脚本有权限写入的目录(如root用户可以在任何地方写入)

答案4

你为什么不这样做:sudo su postgres -c "psql ..." >/path/to/file

相关内容