用户可以通过以下方式执行可执行文件: sudoing 允许用户以所有者身份运行可执行文件或通过设置执行位 chmod u+x (或者应该是 chmodA+x?)。
那么,鉴于它们具有相同的效果,即允许除所有者之外的其他人运行可执行文件,两者之间的真正区别是什么?
答案1
我怀疑您的意思是专门询问chmod o+x
,以允许other
(即既不是指定的user
也不是指定的成员的group
用户)执行该文件。chmod a+x
是 的超集,chmod o+x
因为它打开所有 3 个( 、 和 )的user
执行group
权限other
。
区别在于程序运行的上下文。程序在sudo
指定用户的上下文中运行;没有sudo
程序在当前用户的上下文中运行。对于某些脚本来说,这可能根本不重要,但如果涉及到任何涉及用户权限的内容,那就很重要了。也许用一个假设的恶意脚本来解释这一点会有所帮助,该脚本将删除用户主目录中的所有文件:
如果用户alice
运行sudo -u bob deleteHomeFiles.sh
,那么 bob 主目录中的文件将全部被删除。另一方面,如果直接alice
运行deleteHomeFiles.sh
,alice 的主目录中的文件将被删除。
答案2
一个相当大的区别是,如果你直接运行一个程序,它会使用你的用户 ID 的权限运行,但是使用sudo
,你正在使用其他人的用户 ID 和他们的权限:
考虑一下您常用的系统,/bin/ls
任何人都可以执行该系统,并且/root
只能由用户本身读取root
:
$ /bin/ls /root/test
/bin/ls: cannot access '/root/test': Permission denied
但
$ sudo /bin/ls /root/test
hello.txt
或id
与sudo id
.
请注意,用户 ID 不仅在访问文件方面很重要,而且在向进程发送信号等方面也很重要,当然还root
可以执行普通用户无法执行的许多其他管理工作。
当然,sudo
默认情况下以 root 身份运行程序,但即使您使用 root 权限,区别原则上是相同的sudo -u johnnie
。