それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Sambaのアクセスできないフォルダへの対処法。(Symbolic link問題、Samba脆弱性対策)

Sambaの脆弱性対策がUbuntuの公式パッケージに取り込まれました。自動更新したらSambaのフォルダにアクセスできなくなったので。Ubuntuの公式パッケージ更新が影響しています。

2011-06-24 追記

わかりにくいって言われたので。

Sambaでアクセス出来ないフォルダがあるとき,それはシンボリックリンクではありませんか?

シンボリックリンクは濫用されると危ないので,ホームディレクトリから外へのシンボリックリンクが張れないようになっています。

/home/takuya/test -> /var/www/test

の場合Samba側からはアクセス許可されません。(最近のSambaデフォルトでは)

これは管理者が不用意に777にしているファイルへショートカット作ってSambaからアクセス出来ちゃうかららしいです。Samba管理者は「うちは[Home]だけ許可してる、他のファイルの権限は僕が適当に使えれば居いや」 って油断しがちなのでこうなってるみたい

解決策は簡単。

/etc/smb.conf
[global]
unix extensions = no

を追記する。

再起動
takuya@v1046r:~$ sudo /etc/init.d/samba restart
 * Stopping Samba daemons
   ...done.
 * Starting Samba daemons
   ...done.

解決法は簡単。だけど、なぜエラーになったか。この設定は何なのか。気になりませんか?私は気になりました。調べてみました。

サイトを見た感じでは

これは、脆弱性対策の一環のようでした。

マニュアルを読んで理由を探りましょう。

前回の記事で紹介したmanpageを早速活用してみます。

sambaの設定マニュアルを探します。

マニュアルをよman の利用例そのままですね。

takuya@v1046r:~$ man -k samba | grep conf
smb.conf (5)         - The configuration file for the Samba suite
takuya@v1046r:~$ man 5 smb.conf
smb.conf (5)より抜粋
unix extensions (G)

This boolean parameter controls whether Samba implements the CIFS UNIX extensions, as defined by HP. These extensions enable Samba to better serve UNIX CIFS clients by supporting features such as symbolic links, hard links, etc... These extensions require a similarly enabled client, and are of no current use to Windows clients.

YES/Noで設定されるこの項目は、CIFS*1Unix拡張機能(HPが提案しました)をSambaサーバー側で有効にするかを設定します。この拡張機能を有効にすると、CIFSクライアントがUNIXの場合、シンボリックリンクやハードリンクなど、各種の機能をクライアント側から使うことが出来ます。また、サーバ側のCIFS拡張機能を使うには、同じくCIFSのUnix拡張を有効にしたクライアントが必要です。ちなみにWindowsはこの拡張機能を使うことが出来ません。

Note if this parameter is turned on, the wide links parameter will automatically be disabled.

Default: unix extensions = yes

wide links (S)

This parameter controls whether or not links in the UNIX file system may be followed by the server. Links that point to areas within the directory tree exported by the server are always allowed; this parameter controls access only to areas that are outside the directory tree being exported.

この設定項目は、Unixファイルシステム内のリンクをSamba共有フォルダでも使えるかどうかの設定です。初期設定では、共有フォルダ内同士のシンボリックリンクは許可しますが、共有フォルダ外部へのリンクは許可しません。この設定で、共有フォルダ外部へのリンクを許可することが出来ます。

Note: Turning this parameter on when UNIX extensions are enabled will allow UNIX clients to create symbolic links on the share that can point to files or directories outside restricted path exported by the share definition. This can cause access to areas outside of the share. Due to this problem,
this parameter will be automatically disabled (with a message in the log file) if the unix extensions option is on.

Default: wide links = yes

脆弱性対策の内容。

20分ほど考えてみましたが、どうも次のような感じでした。。

次のような共有をフォルダを定義しているとします。
[samba_share]
  path = /var/share/samba
共有内部で、リンクを作成します。

共有フォルダ内で、共有フォルダ外部へリンクを作成しました。

/var/share/samba/sites  ---> /var/www/sites/

すると、/var/www/sitesは、Sambaアクセス許可が無い。そのためリンクを先を見せて良いか?。それがSambaに判断が付かないわけです。

SSHでユーザーがログインして、リンク作っても見れないとして、Sambaでログインしたら見れたりしちゃうわけで。。。

さらに cifs unix extensionsはリンク作成できる。

どうやら、cifs unix extensionsが有効だと、サーバ外部からCIFSでシンボリックリンクが作れるっようです。ですのでリンク先をたどる機能がOFFにされているようです。
 CIFSのUnix拡張を使えば、クライアント側から、シンボリックリンクを操作できるので、ユーザーが次のようなシンボリックリンクを張ることが出来る可能性が出てきてしまうようです。*2

/var/share/samba/hoge  ---> /etc/hosts
個人的には便利で重宝してるのですが。

個人的にはシンボリックリンクで共有をどんどん増やせる機能が便利で活用させていただいています。しかし、使い方を誤ると脆弱性になる諸刃の刃のようです。

追記2010-05-17

Ubuntu10.4にアップグレードしたら上記でまた動かなくなった。Sambaの設定を次のようにした。

[global]
unix extensions = no
wide links = yes #Ubuntu10.4のSambaから追加。


理由は今度考える。たぶんSambaのバージョンがあがってデフォルト値が変わったんだろう。

*1:cifsとはWindowsファイル共有のプロトコル

*2:合っているか自信ないけど、どうやらそういうことみたい