一般ユーザがNFSにアクセスすることは出来ないのか
管理者権限なしにNFSにアクセスして他のユーザのファイルを読み取ることが出来ないのか以前から疑問があったので実験した。
$ rpcgen -DWANT_NFS3 /usr/include/rpcsvc/nfs_prot.x
行番号表示/非表示切替
1 #include <stdio.h>
2 #include <string.h>
3 #include <errno.h>
4 #include "nfs_prot.h"
5
6 #define HOSTNAME "core"
7 #define MOUNTPOINT "/jail/nest/home"
8
9 int main()
10 {
11 CLIENT *client;
12 LOOKUP3args lookupargs;
13 LOOKUP3res *lookupres;
14
15 client = clnt_create(HOSTNAME, NFS3_PROGRAM, NFS_V3, "udp");
16 if (client == NULL) {
17 printf("Error: clnt_create\n");
18 return 1;
19 }
20
21 lookupargs.what.dir.data.data_val = strdup(MOUNTPOINT);
22 lookupargs.what.dir.data.data_len = strlen(MOUNTPOINT) + 1;
23 lookupargs.what.name = strdup(".");
24 lookupres = nfsproc3_lookup_3(&lookupargs, client);
25 if (lookupres)
26 printf("OK\n");
27 else
28 clnt_perror(client, "nfsproc3_lookup_3");
29 return 0;
30 }
$ gcc -o nfstest nfstest.c nfs_prot_clnt.c nfs_prot_xdr.c
結果
$ ./nfstest nfsproc3_lookup_3: RPC: Authentication error; why = Client credential too weak
エラーメッセージから検索したところによれば、クライアント側がwell-knownポートを開いて通信する必要があるらしい。 これによってクライアントがroot権限を持っていることを確認しているわけだ。