sambaでファイルサーバーを構築していますが、誰がアクセスしてきても、見える共有フォルダは同じになっていました。 これを、ユーザーごとに見えるフォルダを変えたい。というか、特定のユーザーからは特定のファイル共有が見えないようにしたい。 これまでは browseable = Yes / No で制御していました。 ただこれだと、全てのユーザーから見えるか、見えないか、の二択になってしまう。 Noに設定した共有フォルダは、全員から見えなくなってしまいます。 (※見えなくとも共有は存在しているので、アドレス直打ちすればアクセスは可能です。Windows側でネットワークドライブに設定して使っていますが、設定した自分以外の人には分からないので不便ですよね。) browseable = Yes にした上で、アクセス制御を掛ける方法もあります。 ただこの場合は、権限を持たないユーザーがフォルダを開こうとするとアクセスが拒否されますが、フォルダの存在自体は見えてしまいます。フォルダ名によっては余計な興味を持たせてしまいかねないので、できれば権限を持たないユーザーにはそもそも見せたくない・・・。 これを実現する方法を四苦八苦してやっと実現できました。 分かってしまえば簡単な事だったのですが、解説が乏しく、あっても分かりづら!! なので覚書として書いておきます。(あとでまた自分が見てもきっと忘れていて困ってしまうと思うので。)
やりたいこと。 サーバー内に共有フォルダ「A」「B」「C」「D」があるとして 「user1」がアクセスしてきた場合には「A」と「B」のフォルダだけが見える。 「user2」がアクセスしてきた場合は「C」「D」だけが見える。 「user3」がアクセスしてきた場合には「A」「B」「C」「D」全てのファイルが見える。 ようにしたい。 やり方は簡単でした。 まず、共有設定を記述するファイルをユーザーごとにユーザー名で作ります。 user1.conf user2.conf user3.conf 場所はどこでもいいのですが、分かりやすくsambaの共有設定ファイル「smb.conf」と同じ場所にしておきました。 user1.conf には「A」と「B」の共有設定を記述します。 こんな感じですね。
[A] path = /****/**** browseable = Yes [B] path = /****/**** browseable = Yes
同様に、user2.conf には「C」「D」の共有設定を、そしてuser3.conf には「A」「B」「C」「D」全ての設定を記述しておきます。 次に、共有の設定ファイルである smb.conf に「 include 」を使ってこれらの設定ファイルを読み込ませる記述します。 書き方は include = /etc/samba/user1.conf という感じ。 このように書くと、この行の部分がそっくり指定したファイルの内容に置き換わります。 ただし、これだと、全てのユーザーからまだ見えている状態になります。 user1.conf の内容がそのまま smb.conf に記述されているだけの状態だからですね。 それを、変数を使って、このように書くと include = /etc/samba/%U.conf この「%U」の部分がアクセスしてきたユーザー名に自動的に置き換わってくれます。 user1 がアクセスしてきた場合は user1.conf を、 user2 がアクセスしてきた場合は user2.conf を、 user3 がアクセスしてきた場合は user3.conf を、 読み込んでくれるわけですね。 ※ここで「%u」と記述されている解説ページがあり、そのせいで上手く行かずハマっていました。「%U」と大文字で書かないとダメだったんですね・・・orz ユーザー事に設定ファイルを用意するのが大変なら、所属グループ事に分ける事も可能。 include = /etc/samba/%G.conf ※ただし、プライマリーグループしか読み込んでくれないようです。所属グループが複数設定されているユーザーは、一番最初のグループに置き換えられるという事ですね。 これで、アクセスしてきた人ごとに、見える共有フォルダを変える事ができるようになりました。 便利\(^o^)/
コメント