xia*_*owl 4 linux bash ubuntu amazon-ec2
我已经附加了一个EBS块并将其安装在我的EC2实例的"/ data"上,该实例运行Ubuntu 12.04.有一个运行正常的备份脚本,但在我将脚本移动到"/ data/backup"文件夹后,它无法执行,错误:
-bash: ./db_backup.sh: Permission denied
Run Code Online (Sandbox Code Playgroud)
许可是:
-rwxr-xr-x 1 ubuntu ubuntu 2.3K Nov 22 03:25 db_backup.sh
Run Code Online (Sandbox Code Playgroud)
如果我用"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) = ?
Run Code Online (Sandbox Code Playgroud)
但是,如果我把这个脚本放在某个地方,比如说"/ tmp",它就没问题了.为了缩小根本原因,我还创建了一个测试脚本:
#!/bin/bash
echo "hello"
Run Code Online (Sandbox Code Playgroud)
可悲的是,如果我把它放在/ data文件夹中,这也不行.
最有可能的是它装有noexec旗帜.你可以确认:
mount | grep /data
Run Code Online (Sandbox Code Playgroud)
在输出中,您可能会看到类似于(rw,noexec)行末的内容.该noexec标志不是默认值,因此通常在明确配置为以这种方式安装时会发生这种情况.
我不知道你是如何安装它的,但是必须有一个配置.你可以改变它,但也许这不是一个好主意,这些默认值存在是有原因的.一个更好的选择是在bash或sh中显式运行脚本,如下所示:
sh db_backup.sh
Run Code Online (Sandbox Code Playgroud)
UPDATE
在某些情况下,@ Doc的评论也可能有所帮助:
我正在处理同样的行为.我注意到在我的/ etc/fstab中,即使我在那里明确地为我的分区"exec",我之后也有"用户"..一旦我删除了用户并重新安装了分区,我的用户就可以执行划分.