使用 sudo 执行 shell 脚本

使用 sudo 执行 shell 脚本

我有一个脚本,它可以启动多个 C++ 程序的执行。我必须使用 sudo 来执行这些程序,因为它们使用了一些“受限制的”Linux 库/文件(可能不是正确的命名法,但您明白我的意思)。现在我想编写一个 shell 脚本来依次调用这些二进制文件,但我不知道如何执行此操作:

#!/bin/bash
./main a > out/output2DFloat.csv

./main a a > out/output3DFloat.csv

./main a a a > out/output2DDouble.csv

./main a a a a > out/output3DDouble.csv

并使用 sudo 调用它?或者在每个前面附加 Sudo 并使用 sudo 调用它...

我担心的是,sudo 计时器在一个完成之前就用完了,如果下一个需要 sudo 权限,这将导致大问题...

答案1

您可以sudo在每条需要 sudo 权限的命令前面写上。如果“sudo 计时器用完”,系统会再次提示您。如下所示

#!/bin/bash
sudo ./main a > out/output2DFloat.csv

sudo ./main a a > out/output3DFloat.csv

sudo ./main a a a > out/output2DDouble.csv

sudo ./main a a a a > out/output3DDouble.csv

然后。

答案2

您可以使用suid具有特权的程序root(无需每次都输入密码):

通常,当程序在 Linux 下运行时,它会继承运行它的用户的权限,因此如果我在我的帐户下运行程序,该程序将以与我本人相同的权限运行。因此,如果我无法打开某个文件,我正在运行的程序也无法打开该文件。

如果我为某个文件设置了 SUID 或 SGID 位,这将导致运行该文件的任何人或进程都可以访问系统资源,就好像他们是该文件的所有者一样阅读更多...

因此您可以轻松更改脚本文件的所有权:

chown root:user <script file>

输入你的用户名而不是user。然后像这样更改脚本文件的权限:

chmod g+s <script file>

答案3

为了避免输入 sudo 密码两次或更多次,您可以使用 subshel​​l 和 heredoc,如下所示:

#!/bin/bash
sudo /bin/bash <<EOF
  ./main a > out/output2DFloat.csv
  ./main a a > out/output3DFloat.csv
  ./main a a a > out/output2DDouble.csv
  ./main a a a a > out/output3DDouble.csv
EOF

相关内容