CentOSからWin7の共有フォルダへアクセス
CentOSのNautilusからWindows 7の共有フォルダにアクセスできない。
(Nautilusは、ファイル閲覧ツール。Windowsのエクスプローラのこと。)
結論
まず、長くなるので結論を先に。
Windows 7のレジストリを変更するとアクセスできるようになる、というよくある解決策で試したところ、Everyoneに対して読み取り許可や読み/書き許可の共有フォルダにはアクセスできるようになる。
しかし、この方法でも、ユーザ制限した共有フォルダには、アクセスできない。
これは、気に入らないので、結局、mountで対処。
mountコマンドによるアクセスは、ユーザ制限した共有フォルダにも、全く問題なくアクセス可能なため。
よくある解決策で試す
いろいろ調べたら、次のようにすると、アクセスできるようだ。
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を再起動
また、次も追加するとよいという記事もあった。
ローカルポリシー→セキュリティオプション→ネットワークセキュリティ:LAN Manager認証レベルを変更
(おそらく未定義になっています。レベルはどれを選んでも良いようです)
全部ローカルセキュリティポリシーでできそうなので、それで設定してみる。
(ちなみ、Windows 7 Professional SP1 ワークグループ環境での話。)
左ペインのツリーは、すべて「セキュリティの設定」-「ローカルポリシー」-「セキュリティオプション」内。
- 上記Ubuntu日本語フォーラムの手順4: everyoneincludesanonymousを「0」→「1」
「ネットワークアクセス: Everyoneのアクセス許可を匿名ユーザに適用する」を「無効」→「有効」
- 上記Ubuntu日本語フォーラムの手順5: NoLmHash を「1」→「0」
「ネットワークセキュリティ: 次回のパスワード変更時にLan Managerのハッシュ値を保存しない」を「有効」→「無効」
- 上記Ubuntu日本語フォーラムの手順7:restrictnullsessaccess を「1」→「0」
「ネットワークアクセス: 名前付きパイプと共有への匿名のアクセスを制限する」を「有効」→「無効」
- 上記Hatena:Diary trashboxさんの手順4
「ネットワークセキュリティ: LAN Manager認証レベル」を「未定義」→適当な値に
で、この変更を行って、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」カテゴリの記事
- [Linux] ログイン画面のOS名表示など(2013.08.12)
- CentOSからWin7の共有フォルダへアクセス(2011.11.27)
- namazuのインストール手順(2011.09.02)
- mknmzで、エラー 'sh: line 1: no: command not found'(2011.08.30)
- PostgreSQL 8.1から7.3へデータ移行(2011.08.24)