我正在尝试编写一个 bash 脚本(在 Ubuntu 中),它将使用 tar 备份一个目录。
如何检查脚本,使其只能以 root 身份运行(或使用 sudo)?
例如,如果用户运行脚本,它应该说该脚本必须以 sudo 权限运行,然后退出。如果脚本以 root 身份执行,它将继续通过检查。
我知道必须有一个简单的解决方案,我只是无法通过谷歌搜索找到它。
我正在尝试编写一个 bash 脚本(在 Ubuntu 中),它将使用 tar 备份一个目录。
如何检查脚本,使其只能以 root 身份运行(或使用 sudo)?
例如,如果用户运行脚本,它应该说该脚本必须以 sudo 权限运行,然后退出。如果脚本以 root 身份执行,它将继续通过检查。
我知道必须有一个简单的解决方案,我只是无法通过谷歌搜索找到它。
要提取有效的 uid,请使用以下命令:
如果结果为“0”,则脚本要么以 root 身份运行,要么使用 sudo。您可以通过执行以下操作来运行检查:
我假设您知道通过将所有权更改为 root
chown root:root file
并将权限设置为 700
chmod 700 file
您将完成同样的事情 - 没有建议以 sudo 运行。
但为了完整起见,我会发布这个答案。
bash 变量
$EUID
显示脚本正在运行的有效 UID,如果要确保脚本以 root 身份运行,请检查是否$EUID
包含值 0:这比
/usr/bin/id
(对于 bash 脚本!)的解决方案要好,因为它不需要外部命令。您在这里的目标是什么,通知用户他们应该以 root 身份运行脚本或作为某种安全预防措施?
如果您只是想通知用户,那么任何 uid 建议都可以,但作为安全预防措施,它们就像马的轮胎一样有用 - 没有什么可以阻止用户复制脚本,取出 if 语句,并运行它。
如果这是一个安全问题,那么脚本应该设置为 700,由 root:root 拥有,这样任何其他用户都无法读取或执行它。
您也可以使用 whoami 命令。
使脚本只能由 root 运行的一种简单方法是使用以下行启动脚本:
#!/bin/su root
“#!/bin/su root”允许超级用户模式的用户不使用root密码运行脚本。如果您希望超级用户以 root 的结果运行脚本,则可以这样做。