相关疑难解决方法(0)

在 bash 脚本中使用 sudo 的最佳实践

我有一个长时间运行的 bash 脚本,其中一些命令需要以 root 身份运行,而大多数命令需要在 sudo 之前以普通用户身份运行,因为它会弄乱文件所有权等。

我想出了一些方法,但每个方法都有一些问题

方法一:在文件中使用sudo

#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Run Code Online (Sandbox Code Playgroud)

从代码的编写方式来看,这看起来不错。sudo写在几条实际需要root运行的语句之前,但是如果每次sudo调用之间的时间太长sudo再次要求输入密码。此外,如果第一次执行sudo失败,例如由于密码无效,脚本的其余部分仍会执行。

方法二:使用sudo调用文件,需要时再改回原用户

#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must …
Run Code Online (Sandbox Code Playgroud)

bash sudo su

14
推荐指数
1
解决办法
1万
查看次数

使用sudo时如何找到哪个用户执行脚本?

我想要的是找到运行 bash 脚本的用户的名称,当这个脚本由sudo. 据我所知,唯一可能的方法是以这种方式解析who -m( who am i)的输出:

user@UbuntuServer:~$ cat who.sh 
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'

user@UbuntuServer:~$ sudo ./who.sh 
root
root
user
Run Code Online (Sandbox Code Playgroud)

问题是:在 Ubuntu Desktop 16.04.4 who -m(resp. who am i) 中什么都不做。为什么?

在此处输入图片说明

另一个问题是为什么 Ubuntu 的在线手册页与在 Ubuntu 桌面或服务器上执行who不同man who

但根据我的目标,这些问题并不是那么重要。正如标题中提到的,主要问题是:我如何找到哪个用户在使用时执行脚本sudo


实际上,原始标题 -如何在 Ubuntu 桌面上找到“我是谁”?- 是相同但错误地提出的问题。

command-line bash who 16.04

3
推荐指数
1
解决办法
3557
查看次数

标签 统计

bash ×2

16.04 ×1

command-line ×1

su ×1

sudo ×1

who ×1