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そのユーザーとしてコマンドラインから呼び出すことができますか? CAP_SYS_ADMINLinux では、通常、ファイルシステムをマウントできるようにするために少なくとも必要です。これを実行するときに持っていますかCAP_SYS_ADMIN、それとも実行可能ファイルがCAP_SYS_ADMIN設定されていますか? 実行可能ファイルに機能があるかどうかを確認しgetcap myexe、設定することsetcap cap_sys_admin+ep myexeができます (もちろん、これは root として行う必要があります)。または、単に suid root: にすることもできますchown root:root myexe; chmod u+s myexe

持っておらず、実行可能ファイルが suid root でない場合は、オプションCAP_SYS_ADMINで定義されているファイルシステムのみをマウントできます。例えば:/etc/fstabuser

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

通常、ファイルシステムをマウントできるのはスーパーユーザー「root」のみです。そうしないと、巨大なセキュリティ ホールになります (「nodev」や「nosuid」を使用してマウントするなどの予防策を講じない限り)。

于 2013-10-11T16:30:52.873 に答える