我有两个 bash 脚本,它们是二进制相同的,具有相同的权限,在我的驱动器上是唯一的,并且在sudoers
.仍然有一个通过了 root 的 uid 测试,而另一个则没有。如果我./
在 bin 文件夹中调用第一个,它的行为就像第二个一样。
脚本(sync-samuel):
#!/usr/bin/env bash
echo "[$0]"
whoami
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root"
exit 1
fi
id -u
exit
输出:
samuel@xeon:~$ sync-samuel
[sudo] password for samuel:
[/home/samuel/bin/sync-samuel]
root
0
samuel@xeon:~$ sync-samuel2
[/home/samuel/bin/sync-samuel2]
samuel
This script must be run as root
samuel@xeon:~$ cd bin
samuel@xeon:~/bin$ ./sync-samuel
[./sync-samuel]
samuel
This script must be run as root
权限:
-rwxr-xr-x 1 samuel samuel 435 Feb 1 22:36 sync-samuel
-rwxr-xr-x 1 samuel samuel 435 Feb 1 22:37 sync-samuel2
文件:
samuel@xeon:~/bin$ file sync-samuel
sync-samuel: a /usr/bin/env bash script, ASCII text executable
samuel@xeon:~/bin$ file sync-samuel2
sync-samuel2: a /usr/bin/env bash script, ASCII text executable
有谁知道,是什么触发了这种行为,或者我如何查看这两个文件的扩展属性?我正在使用带有 bash 4.3.11(1)-release 的 Lubuntu 14.04 LTS。
编辑:G-Man 就是男人!第一个也是别名:
samuel@xeon:~/bin$ type sync-samuel2
sync-samuel2 is hashed (/home/samuel/bin/sync-samuel2)
samuel@xeon:~/bin$ type sync-samuel
sync-samuel is aliased to `sudo /home/samuel/bin/sync-samuel'
答案1
您的输出显示sync-samuel
发出sudo
提示,即使您在没有运行它sudo
并且脚本本身不调用sudo
.这没有任何意义。看起来,当您输入 时,您正在运行问题中显示的脚本sync-samuel
之外的其他内容。sync-samuel
这可能sync-samuel
实际上是一个别名sudo sync-samuel
或类似的东西。另一种可能性是您sync-samuel
在另一个目录中有另一个副本,并且您的 shell 正在查找(并运行)它而不是您正在查看的副本。要诊断此问题,请发出以下命令:
type sync-samuel sync-samuel2
type
是一个内置命令,显示 shell 如何解释每个命令。如果您得到两个文件的显着不同的响应(例如,sync-samuel
是别名而sync-samuel2
不是),您将知道如何继续使它们得到相同的处理(例如,sync-samuel2
也为 定义别名)。