在RHEL6上,我正在尝试以非超级用户(abc_admin)挂载文件系统。我认为我已正确设置了所有权限,但我仍然收到权限错误。
以下是我的块设备的权限:
brw-rw----. 1 abc_admin abc_admin 8, 5 Oct 10 09:25 /dev/sda5
以下是安装目录的权限:
drwxr-xr-x. 2 abc_admin abc_admin 4096 Oct 8 12:49 mount
这是我的代码:
int main() {
int stat = mount("/dev/sda5", "/mount", "ext4", 0, "");
if (0 != stat) {
perror("mount failed");
exit(5);
}
return 0;
}
这是strace:
mount("/dev/sda5", "/mount", "ext4", 0, "") = -1 EPERM (Operation not permitted)
dup(2) = 3
fcntl(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
brk(0) = 0x1416000
brk(0x1437000) = 0x1437000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 6), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f479bf3e000
lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "mount failed: Operation not perm"..., 38mount failed: Operation not permitted
) = 38
close(3)
答案 0 :(得分:3)
您可以从该命令行调用mount
作为该用户吗?在Linux中,您通常至少需要CAP_SYS_ADMIN
才能安装文件系统。运行此文件时是否有CAP_SYS_ADMIN
,或者可执行文件是否设置了CAP_SYS_ADMIN
?您可以检查可执行文件是否具有getcap myexe
的功能,并将其设置为setcap cap_sys_admin+ep myexe
(当然,您需要以root身份执行此操作),或者您可以将其设置为suid root:{{1 }}
如果您没有chown root:root myexe; chmod u+s myexe
并且可执行文件不是suid root,那么您只能使用CAP_SYS_ADMIN
选项挂载/etc/fstab
中定义的文件系统。例如:
user
答案 1 :(得分:0)
通常只允许超级用户“root”挂载文件系统,否则会出现巨大的安全漏洞(除非采用“nodev”和“nosuid”挂载等预防措施)。