【问题标题】:Weird "Permission denied" exception when running bash script on EC2 (Ubuntu)在 EC2(Ubuntu)上运行 bash 脚本时出现奇怪的“权限被拒绝”异常
【发布时间】:2013-12-06 23:17:14
【问题描述】:

我已附加一个 EBS 块并将其安装在我的 EC2 实例上的“/data”,该实例运行 Ubuntu 12.04。有一个运行正常的备份脚本,但是在我将脚本移动到“/data/backup”文件夹后,它无法执行,出现错误:

-bash: ./db_backup.sh: Permission denied

权限是:

-rwxr-xr-x 1 ubuntu ubuntu 2.3K Nov 22 03:25 db_backup.sh

如果我用“sudo”运行它,没有错误也没有输出,但应该有一些东西回显到控制台。

我也尝试使用“strace”来跟踪执行,得到:

execve("./db_backup.sh", ["./db_backup.sh"], [/* 19 vars */]) = -1 EACCES (Permission   denied)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =     0x7f354f010000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = 32
close(3)                                = 0
munmap(0x7f354f010000, 4096)            = 0
exit_group(1)                           = ?

但是如果我把这个脚本放在某个地方,比如“/tmp”,它就没有问题了。为了缩小根本原因,我还创建了一个测试脚本:

#!/bin/bash

echo "hello"

很遗憾,如果我将它放在 /data 文件夹中,这也不起作用。

【问题讨论】:

    标签: linux bash ubuntu amazon-ec2


    【解决方案1】:

    很可能它挂载了noexec 标志。您可以通过以下方式确认:

    mount | grep /data
    

    在输出中,您可能会在行尾看到类似(rw,noexec) 的内容。 noexec 标志不是默认的,所以当它被显式配置为以这种方式挂载时,通常会发生这种情况。

    我不知道你是如何安装它的,但必须有一个配置。您可能可以更改它,但也许这不是一个好主意,这些默认值的存在是有原因的。更好的选择是在 bash 或 sh 中显式运行脚本,如下所示:

    sh db_backup.sh
    

    更新

    在某些情况下,@Doc 的评论可能也会有所帮助:

    我正在处理同样的行为。我注意到在我的 /etc/fstab 中,即使我的分区明确地有“exec”,我也有“user”。一旦我删除用户并重新安装分区,我的用户就可以在分区。

    【讨论】:

    • 我正在处理同样的行为。我注意到在我的 /etc/fstab 中,即使我的分区明确地有“exec”,我也有“user”。一旦我删除用户并重新安装分区,我的用户就可以在分区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2012-08-29
    • 2018-05-26
    相关资源
    最近更新 更多