« 「USB大容量記憶装置の取り外し中にエラーが発生しました」の原因? | トップページ | Visual Studio 既定の環境設定の選択 »

2011年11月27日 (日)

CentOSからWin7の共有フォルダへアクセス

CentOSのNautilusからWindows 7の共有フォルダにアクセスできない。
(Nautilusは、ファイル閲覧ツール。Windowsのエクスプローラのこと。)

結論

まず、長くなるので結論を先に。

Windows 7のレジストリを変更するとアクセスできるようになる、というよくある解決策で試したところ、Everyoneに対して読み取り許可や読み/書き許可の共有フォルダにはアクセスできるようになる。
しかし、この方法でも、ユーザ制限した共有フォルダには、アクセスできない。

これは、気に入らないので、結局、mountで対処。
mountコマンドによるアクセスは、ユーザ制限した共有フォルダにも、全く問題なくアクセス可能なため。

よくある解決策で試す

いろいろ調べたら、次のようにすると、アクセスできるようだ。

Ubuntu日本語フォーラムの記事より。

   1. Windowsのスタートメニューで、「プログラムとファイルの検索」へregeditと入れて、レジストリエディタを起動
   2. セキュリティ警告が出ます(出ない場合もある)がそのまま続行
   3. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\を選択
   4. 右側にeveryoneincludesanonymousがあるので、その数値を0から1へ
   5. NoLmHash を1から0へ
   6. 次に、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parametersを開く
   7. restrictnullsessaccessを1から0へ
   8. レジストリエディタを終了する
   9. PCを再起動

また、次も追加するとよいという記事もあった。

Hatena:Diary trashboxさんより。

4.Win7でローカルセキュリティポリシー(secpol.msc)を起動し、
 ローカルポリシー→セキュリティオプション→ネットワークセキュリティ:LAN Manager認証レベルを変更
 (おそらく未定義になっています。レベルはどれを選んでも良いようです)

全部ローカルセキュリティポリシーでできそうなので、それで設定してみる。
(ちなみ、Windows 7 Professional SP1 ワークグループ環境での話。)
左ペインのツリーは、すべて「セキュリティの設定」-「ローカルポリシー」-「セキュリティオプション」内。

  1. 上記Ubuntu日本語フォーラムの手順4: everyoneincludesanonymousを「0」→「1」
    「ネットワークアクセス: Everyoneのアクセス許可を匿名ユーザに適用する」を「無効」→「有効」
    Win7secpol01
  2. 上記Ubuntu日本語フォーラムの手順5: NoLmHash を「1」→「0」
    「ネットワークセキュリティ: 次回のパスワード変更時にLan Managerのハッシュ値を保存しない」を「有効」→「無効」
    Win7secpol02
  3. 上記Ubuntu日本語フォーラムの手順7:restrictnullsessaccess を「1」→「0」
    「ネットワークアクセス: 名前付きパイプと共有への匿名のアクセスを制限する」を「有効」→「無効」
    Win7secpol03
  4. 上記Hatena:Diary trashboxさんの手順4
    「ネットワークセキュリティ: LAN Manager認証レベル」を「未定義」→適当な値に
    Win7secpol04

で、この変更を行って、CentOSのNautilusからアクセスすると、PC内の共有フォルダ一覧までは表示されるが、共有フォルダをダブルクリックして開こうとすると、ユーザ名/パスワードの入力画面が表示され、どんなユーザ名/パスワードでもアクセスはできない。

試しに、Windows 7に、Everyone読み取り許可、とか、Everyone読み/書き許可の共有フォルダを作って、Nautilusからアクセスすると、これが見事、開くことができる。

ってことで、Everyoneにアクセス許可した共有フォルダは開けるが、
ユーザ制限した共有フォルダは開けない、ということが分かった。残念。

mountコマンドでユーザ制限した共有フォルダにアクセス

mountコマンドでWindowsの共有フォルダをマウントすると、ユーザ制限した共有フォルダにもアクセスできるという記事を見た(どこのページが忘れた)。

ちなみに、自分が利用しているCentOS5には、smbmountコマンドはなくなったが、mountコマンドでファイルシステムをcifsと指定することで代用できる。
(間接的に、mount.cifsコマンドが呼び出される。)

たとえば、次のような感じ。

# mount -t cifs -o user=ユーザ名 //192.168.0.1/share /mnt/win
Password: ********

こりゃいいねぇ。

あとは、一般ユーザでマウントできるように、fstabに書き込めば、OK。

# vi /etc/fstab
...
//192.168.0.1/share  /mnt/win  cifs  user,username=ユーザ名,...  0  0

オプションuserは一般ユーザでもマウントできる指定。
で、共有フォルダへアクセスするユーザの指定もuserオプションだったので、
mount.cifsをmanで調べてみたら、usernameオプションでも受け付けてくれるようなので、これでOK。

一般ユーザでのmountでエラー

で、一般ユーザでmountコマンドを実行してみると、エラーが表示された。

$ mount /mnt/win
Password: ********
mount error 1 = Operation not permitted
Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)

解決策はGo's WikiLogさんにあった。

  • mount自体がuserへのmountを許可していない。
    • これを解決するにはuserオプションをまず追加
  • mount.cifsのsビットをたてる
    • chmod +s /sbin/mount.cifs /sbin/umount.cifs

1番目はすでに設定済みなので、2番目を実行。

# ls -l /sbin/*.cifs 
-rwxr-xr-x 1 root root 27768  3月 31  2010 /sbin/mount.cifs
-rwxr-xr-x 1 root root 12336  3月 31  2010 /sbin/umount.cifs

# chmod +s /sbin/mount.cifs /sbin/umount.cifs 

# ls -l /sbin/*.cifs 
-rwsr-sr-x 1 root root 27768  3月 31  2010 /sbin/mount.cifs
-rwsr-sr-x 1 root root 12336  3月 31  2010 /sbin/umount.cifs

ちなみに、sビットは、実行可能ファイルに設定すると、
一般ユーザが実行しても、root権限で実行される属性。
詳細は、ウィキペディアのsetuid

これで、もう一度、一般ユーザでマウントしてみると、、、

$ mount /mnt/win
Password: ******** 

$ ls /mnt/win
...

$ umount /mnt/win

できた。
以上。

« 「USB大容量記憶装置の取り外し中にエラーが発生しました」の原因? | トップページ | Visual Studio 既定の環境設定の選択 »

Linux」カテゴリの記事

2021年6月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

Amazonリンク

ダイビング写真(swf)

ブログ内検索

  • Google
    WWW を検索
    ブログ内を検索

リンク(いつもお世話さま)

  • ソニーストア
     iTunes Store(Japan)
    Just MyShop(ジャストシステム)
    ブックオフオンライン
無料ブログはココログ