通过脚本执行的程序的权限和用户/组

通过脚本执行的程序的权限和用户/组

我很好奇,在下面的场景中,shell脚本或Java程序有什么样的权限(所有者/组/其他)?

有一个名为 的脚本run.sh,它依次调用一个 Java 程序a.java。该脚本和java属于用户A所有并具有-rwxrw-r--权限。当它们被用户A运行时,它们属于哪个权限组?他们是否获得了用户 A 作为所有者的许可?

还有一个用户B,与用户A同组,他执行run.sh并依次调用Java程序。现在他们属于哪个权限组?他们是否获得了用户 B 的集体许可?

也许程序会尝试在/common/abc具有 权限的目录上写入drwxrw-r--,如果程序具有“其他”权限,则会失败。

需要注意的一点是,它们都使用表达式sh run.sh来运行脚本,因此不需要执行权限。只需要读取权限吗?

答案1

所有进程开始以与调用它们的进程相同的用户和组的身份执行,除非它们是通过设定值或 setgid 可执行文件,即具有rwsr-s-ws--s在其权限中的可执行文件。位以外的权限位s无关。仅当脚本为 setuid(即s在用户列中设置了位)时,可执行文件的所有者才重要;并且仅当脚本为 setgid(即s在组列中设置了位)时,所属组才重要。

因此,在您描述的场景中,当用户 A 运行脚本时,脚本和 Java 程序都以用户 A 以及 A 所属的组的身份执行。当它们由用户 B 执行时,它们将以用户 B 以及用户 B 所属的任何组的身份执行。

运行本机可执行文件需要执行权限,仅此而已。运行脚本(以 开头的程序#!)需要执行权限(在机制接管之前开始执行#!)和读取权限(供解释器读取脚本)。如果显式调用解释器,则脚本不需要可执行:就系统而言,它只是另一个数据文件。

相关内容