ログイン
編集不可のページディスカッション情報添付ファイル

2011-09-10 07:20:34時点のリビジョン1

メッセージを消す
ytoku/daily-record/2011-09-10

MMA

一般ユーザが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権限を持っていることを確認しているわけだ。