0

在 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)
4

2 回答 2

3

mount您可以以该用户身份从命令行调用吗?在 Linux 中,您通常至少CAP_SYS_ADMIN需要能够挂载文件系统。运行它时你有吗CAP_SYS_ADMIN,或者可执行文件是否CAP_SYS_ADMIN设置了它?您可以检查可执行文件是否具有 with 的功能getcap myexe,并将其设置为setcap cap_sys_admin+ep myexe(当然,您需要以 root 身份执行此操作),或者您可以将其设置为 suid root: chown root:root myexe; chmod u+s myexe

如果您没有CAP_SYS_ADMIN并且可执行文件不是 suid root,那么您只能挂载/etc/fstab使用该user选项定义的文件系统。例如:

/dev/cdrom  /cd  iso9660  ro,user,noauto,unhide
于 2013-10-11T16:34:05.960 回答
0

通常只允许超级用户“root”挂载文件系统,否则将是一个巨大的安全漏洞(除非采取预防措施,如使用“nodev”和“nosuid”挂载)。

于 2013-10-11T16:30:52.873 回答