以其他用户身份运行Shell脚本的好方法是什么。我正在使用Debian蚀刻,并且我知道我想模拟哪个用户。
如果我手动进行操作,则可以执行以下操作:
su postgres
./backup_db.sh /tmp/test
exit
由于我想自动化该过程,因此我需要一种将backup_db.sh作为postgres运行的方法(继承环境等)。
谢谢!
以其他用户身份运行Shell脚本的好方法是什么。我正在使用Debian蚀刻,并且我知道我想模拟哪个用户。
如果我手动进行操作,则可以执行以下操作:
su postgres
./backup_db.sh /tmp/test
exit
由于我想自动化该过程,因此我需要一种将backup_db.sh作为postgres运行的方法(继承环境等)。
谢谢!
Answers:
要将脚本作为另一个用户作为另一个用户运行,请运行:
/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres
Breaking it down:
/bin/su : switch user
-c "/path/to..." : command to run
- : option to su, make it a login session (source profile for the user)
postgres : user to become
我建议始终在这样的脚本中使用完整路径-您无法始终保证在执行su时您将位于正确的目录中(也许有人知道您更改了homedir)。我也总是使用su(/ bin / su)的完整路径,因为我很偏执。可能有人可以编辑您的路径并导致您使用su的受威胁版本。
-
(或--login
)--command, -c
并不会真正启动登录会话,因为-c
始终会强制使用非登录外壳程序。
- postgress
应当出现在命令末尾。从手册页:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
如果要运行的目标用户定义了nologin shelll,则可以使用-s选项指定shell:
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
看到以下问题: 以具有nologin shell的用户身份运行脚本
要按计划自动执行此操作,可以将其放在用户的crontab中。Cron作业虽然无法获得完整的环境,但是最好还是将所需的所有env变量放在脚本本身中。
要编辑用户的crontab,请执行以下操作:
sudo crontab -u postgres -e
这应该是内容丰富的读物- 有关shell脚本的setuid
如果使用“ ”参数序列运行su- username
,它将为用户提供一个登录shell,使其具有与用户相同的环境。通常,用于通过其他登录名在家庭环境中快速执行脚本。
您还可以使用:
须藤-u postgres script_run_as_postgres.sh