我正在编写一些bash代码,我想检查脚本是否具有 root 权限。我从其他人那里看到的所有代码都只检查$EUID == 0. 完全有可能让其他程序以 UID = 0 和 EUID > 0 运行。我的代码不应该检查这两者吗?或者 bash 有什么东西可以防止这种(奇怪的)情况发生吗?
对于那些想要看到这种情况的人,这里有一个概念证明:
[root@new-host bennett]# cp /bin/sleep .
[root@new-host bennett]# chown bennett sleep
[root@new-host bennett]# chmod 4755 sleep
[root@new-host bennett]# ll sleep
-rwsr-xr-x. 1 bennett root 32188 Sep 9 02:38 sleep
[root@new-host bennett]# ./sleep 1000 &
[root@new-host bennett]# ps -e -o user= -o ruser= -o comm= | awk '$1 != $2'
bennett root sleep
Run Code Online (Sandbox Code Playgroud)
回顾一下这个问题:在任何情况下bash都可能遇到这样的情况吗?(( $UID == 0 && …