chmod a=rwx后出现Linux权限被拒绝

9

我有一个小小的Linux问题,这会教育我在Windows上花费这么多年时间。不管怎样,我写了一个小Java应用程序,并使用Java Service Wrapper脚本包装得很好。但是当我运行该脚本时:

sh ./wrapper.sh console

我立即收到了权限被拒绝的消息。权限被拒绝的信息如下:

eval: 1: /home/user1/MyApp/bin/wrapper: Permission denied

我的小包装器wrapper.sh位于MyApp/bin文件夹中。MyApp/bin/wrapper目录包含两个文件:

  • wrapper-linux-x86-32
  • wrapper-linux-x86-64

为了测试,我运行了以下chmod命令:

chmod a=rwx MyApp -R

我确认了所有的文件和子文件夹都有读、写、执行权限,然后再次运行脚本,但结果仍然是“权限被拒绝”。

请问还有什么办法可以让这个脚本正常运行吗?

谢谢, Lancelot


包装器的内容是什么?它可能调用一个名为_eval_的命令吗?我的同事告诉我有一个叫做eval的命令 - 通过连接参数构造命令。也许包装脚本存在问题。 - lothar
我相信您已经取消了文件和目录的公共写入权限。很少有理由让文件或目录保持公共写入权限 - /tmp是一个特殊情况,需要设置粘滞位以实现远程安全。 - Jonathan Leffler
6个回答

8
我注意到错误信息引用了托管文件的目录名称:
eval: 1: /home/user1/MyApp/bin/wrapper: Permission denied

我们知道这是一个目录,因为你提到了“The directory MyApp/bin/wrapper contains 2 files”。请检查你的脚本,看看是否有地方使用了目录名作为命令?比如使用wrapper(目录名)而不是wrapper/wrapper-linux-x86-32(文件名),或者类似的错误?在文件名中使用空格并忘记引用这些文件名时,常常出现类似的错误(虽然可能不是这种情况)。如果还是不行,能否编辑你的问题,包括所调用的wrapper脚本的内容?(新答案,因为它与之前的noexec想法完全无关,那个可以保留供参考。)

你真是太棒了。那正是发生的事情。系统混淆了文件夹和文件的执行。请注意,如果我的结构一开始就是无懈可击的,系统就不会混淆。机器只会按照我们告诉它们的去做!非常感谢你,moocha。 - Lancelot
不用谢,很高兴能够帮助。 - Mihai Limbășan

8
您的脚本所在的文件系统可能已经挂载了 noexec 标志。请检查该文件系统的 /etc/fstab 条目,如果存在 noexec ,请尝试删除它,然后通过 mount /path/to/mountpoint -o remount 重新挂载该文件系统。
另外,可以通过检查 mount 命令的输出来查找是否存在 noexec 实例,而不是查看 /etc/fstab(该文件系统可能已经动态挂载)。

没有任何文件系统上的“noexec”选项。但是感谢您指出该文件,知道该信息很有用。 - Lancelot
这是Ubuntu非常直观的安装过程。启动后没有挂载任何内容。系统引导时,磁盘驱动器和CD-ROM会自动挂载。 - Lancelot

1

你可以尝试执行其他用户家目录中的文件,你可以给用户"user"权限

chmod -R a+x /home/user1 或者 chmod -R o+x /home/user1 chmod -R g+x /home/user1


0

你可能还需要授予执行脚本的权限给你的包装器

chmod +x wrapper.sh

编辑:我刚刚注意到你的wrapper.sh位于你的MyApp文件夹中 /编辑

此外,如果您确保您有

#!/bin/sh

在你的 .sh 文件顶部,你可以像这样执行它:
.wrapper.sh

嗨Roy,当我在这里执行ls -Al时,我的wrapper.sh的输出如下: -rwxrwxrwx 1 user1 user1 19035 2009-04-07 15:32 wrapper.sh - Lancelot
使用“=”的chmod是完全可以接受的,因为它已经设置了可执行位。 - paxdiablo

0

首先,尝试在文本编辑器中打开它,以确保您具有读取访问权限。如果是这样,请执行以下操作

chmod +x wrapper.sh

确保你的脚本开头有#!/bin/sh


嗨Zifre,#!/bin/sh在那里,我刚刚检查过了。 - Lancelot

0

虽然我的问题有点不同,但在搜索类似问题时,我发现这个问题出现了几次,所以我会在这里发布我的发现。

我的问题是在执行chmod命令后无法访问storage/文件夹。

执行命令后:

sudo chmod -755 storage -R    //notice -755 is wrong, it should be 755

我无法再访问存储/文件夹了。

我尝试过ls -l

storage permissions d---------

在执行git status之后:

storage/.gitignore: Permission denied

执行正确的命令后:

sudo chmod 755 storage -R // without -

一切恢复正常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接