在 shell 脚本中包含 chmod - 它对每个人都有效吗?

问题描述

我有一个很大的 wrapper.sh 文件,它可以做很多事情,但最终运行的是 catalina.sh tomcat。

问题是运行此 wrapper.sh用户遇到错误:没有执行 catalina.sh 的权限。他们必须手动设置此权限,这是我不想要的。


在我的计算机上,chmod u+x catalina.sh 解决了这个问题,因此我在执行 wrapper.sh 之前将其包含在 catalina.sh 中:

#!/bin/sh
# <...>
# <...>
chmod +x catalina.sh
exec ./catalina.sh

但是这种改变对每个人都有效吗?例如,我可以想象它确实在我的计算机上运行良好,但其他人在隐式运行该 chmod 时会遇到一些与 sudo 相关的错误。我怎样才能让它适合所有人?

解决方法

如何通过 sh catalina.shbash catalina.sh 运行它(取决于脚本是用什么语言编写的)?在这种情况下,您不需要 x 权限。读权限就够了。

,

如果用户是 root 或 catalina.sh 的所有者,它会起作用。

非特权用户无法更改不属于该用户的文件的权限,即使该文件是可写的。

如果 catalina.sh 是同一用户解压的内容,或者您​​的脚本创建的内容,则应该没有问题。

一个问题可能是用户试图在挂载 noexec 的文件系统中执行此操作。但是 wrapper.sh 脚本本身将无法执行。然而,尽管 sh wrapper.sh 不可执行,但用户可以成功运行它,然后遇到 catalina.sh 问题。

请注意,您可以exec sh ./catalina.sh。仅仅因为脚本不可执行并不意味着你不能为解释器执行一个新的进程映像来处理它;您只需要明确地执行此操作,而不是依赖操作系统将解释器绑定到脚本。这就是需要执行权限。

,
  • 创建一个用户组“sudo groupadd new_group”。
  • 添加需要访问的用户 此组:单个用户的“sudo usermod -a -G new_group userA”,或:“userA userB userC 中的用户;执行 sudo usermod -a -G mygroup "$user"; done” 以循环添加多个用户.
  • 然后“sudo chown someone:new_group catalina.sh”