ラズパイで特定のユーザーだけがアクセスできる共有フォルダを作成しよう

0. はじめに

先日の記事では、誰でもアクセスできる共有フォルダを作成しました。実際に共有フォルダを使用する場合、特定のユーザーだけがアクセスできるように制限をかけたい場面も多いかと思います。

そこで今回は、特定のユーザーだけがアクセスできる共有ファルダをラズベリーパイで作成してみましょう。

具体例があった方が分かりやすいと思うので、4人家族を例にとって説明していきたいと思います。家族構成はお父さん、お母さん、ムギーク、弟の4人とし、ムギークと弟だけがアクセスできる共有フォルダを作成します。

1. Linuxユーザーの作成

登場人物となる4人のユーザーアカウントを作成しましょう。
お父さん(father)を新規作成します。

sudo useradd -m father

  
オプション -m を付けることで、ホームディレクトリを作成することができます。
お母さん(mother)、ムギーク(mugeek)、弟(brother)のアカウントも同様に作成します。

アカウント作成後は、パスワードも設定しておきましょう。

sudo passwd father

 
father の部分に、パスワード設定をしたいアカウント名を入力します。
新しいパスワードの入力は2回求められます。入力中のパスワードは画面上に表示されないため、打ち間違いに気を付けてください。

2. Sambaユーザーの作成

今回は特定のユーザーのみがSambaを使用するため、そのユーザーのSambaアカウントを作成する必要があります。

ここで注意点が1つあります。
Sambaユーザーを作成する際は、既に同名のLinuxユーザーが存在していなければなりません。例えば、fatherというSambaユーザーを新規作成するためには、先にfatherというLinuxユーザーを作っておく必要があります。

それでは、実際にSambaユーザーを作成しましょう。

sudo pdbedit -a father

 
Sambaユーザーを作成するためにはオプション -a が必須となります。
新しいパスワードの入力を2回求められますが、このパスワードはLinuxユーザーのものとは別でも問題ありません。
ただし、共有フォルダにアクセスする際はSambaユーザーのパスワードを入力しないといけないので、忘れないようご注意を。

同じ要領で、残り3人分のSambaユーザーも作成しておきましょう。

3. グループの作成

今回作成する共有フォルダにアクセスできるのはムギークと弟だけですが、この2つのアカウントにアクセス権をそれぞれ設定するのは少し面倒です。2人だけならまだ負担は少ないですが、もしアクセス権を設定する対象が10人や50人などと多数の場合、個別に設定するのは大変です。

Sambaでは、ユーザーアカウントだけではなく、Linux上のグループにもアクセス権を付与することが出来ます。なので、対象となるユーザーアカウントを1つのグループに入れてしまい、そのグループに対してアクセス権を付与すれば1回の設定作業で済むので楽になります。

グループ自体は以下のコマンドで作ることができます。

sudo groupadd geekgroup

 
geekgroupの箇所に、作成したいグループ名を記入します。

4. グループにSambaユーザーを追加

以下のコマンドでグループにユーザーを追加しましょう。

sudo gpassed -a mugeek geekgroup

 
ユーザーをグループに追加するには、オプション -a が必須となります。
mugeekの箇所にユーザー名を、geekgroupの箇所にはグループ名を入力します。

5. 共有用フォルダの作成

ギークと弟で共有するフォルダを用意します。
フォルダのパスは任意ですが、今回はムギークのホームディレクトリ配下に作成します。

sudo mkdir /home/mugeek/shared

 

6. 共有用フォルダへのアクセス権設定

上記で作成したsharedフォルダの所有グループは現在「root」になっているので、これをgeekgroupに変更します。

sudo chgrp geekgroup /home/mugeek/shared

 
geekgroupの箇所に所有者にしたいグループ名を、/home/mugeek/sharedの箇所に該当フォルダのパスを入力します。

続いて、フォルダに対するアクセス権(パーミッション)の設定を行います。
アクセス権の設定にはchmodコマンドを使用します。

sudo chmod 770 /home/mugeek/shared

 
770という数字の箇所は、「所有者」・「所有グループ」・「その他」に対して、どのレベルのアクセス権をそれぞれ付与するかを意味しています。アクセス権のレベルとしては、「内容の閲覧」「内容の変更」「内容へのアクセス」の3種類があります。
数字とアクセス権のレベルの関係は以下の通りです。

数字 アクセス権のレベル
4 内容の閲覧
2 内容の変更
1 内容へのアクセス


上記数字の合計値を、「所有者」・「所有グループ」・「その他」の順で割り振ることで、アクセス権を設定することができます。
たとえば、今回指定した「770」は以下のような設定になっています。

数字 ユーザーの種類 アクセス権のレベル
7 所有者 内容の閲覧、内容の変更、内容へのアクセスが可能
7 所有グループ 内容の閲覧、内容の変更、内容へのアクセスが可能
0 その他 アクセス権なし


Linuxにおけるアクセス権の設定は、上記の数字で割り振る以外にも、アルファベットで指定することも可能です。
この辺りの詳細については、下記サイトが詳しく参考になります。
qiita.com

7. 設定ファイルの編集

Sambaの設定ファイルの編集を行います。
まずは設定ファイルを開きましょう。

sudo nano /etc/samba/smb.conf

 
ファイルの一番下までスクロールし、空いているスペースに以下のように入力します。

[Geekgroup]
path = /home/mugeek/shared
valid users = @geekgroup
writable = yes
browseable = yes

 
各パラメータの意味を簡単に説明します。
"valid users"は、Sambaサービスにアクセスできるユーザーを指定します。
グループを指定するときは、グループ名の前に"@"を付けます。

"writable"は、ファイルの作成や修正許可を指定します。許可する場合、パラメータを yes とします。

"browseable"は、フォルダを共有リソースの一覧に表示するか指定します。
例えば、パラメータがyesの場合、Windowsの「ネットワーク」セクションにフォルダが表示されます。

入力が終わったら、設定ファイルは上書き保存して閉じます。
閉じたら、Sambaを再起動しておきましょう。

sudo service smbd restart
sudo service nmbd restart

 
再起動完了後、自分のPCから共有フォルダにアクセスできたら成功です!

f:id:mugeek:20190620232125p:plain
 

8. 共有フォルダにアクセスできない場合の対処法

ユーザー名とパスワードを入力して共有フォルダにアクセスしようとした際、下記のようなメッセージが表示されることがあります。
f:id:mugeek:20190620232147p:plain

エラーメッセージにもある通り、どうやらWindowsでは、既にあるユーザーで共有フォルダに接続している場合、他のユーザー名で同時に接続することはできない仕様のようです。

つまり今回の例でいえば、「お父さん」アカウントで既に共有フォルダにアクセスして使用している場合、「弟」アカウントとして共有フォルダにアクセスすることはできない、ということですね。

解決法としては、現在の接続を削除し、新しい接続を確立することで対応できます。

まず、いまの接続状況を確認するため、コマンドプロンプトで以下のコマンドを実行してみましょう。

net use

 
現在の接続情報が表示されていますね。

f:id:mugeek:20190620232637p:plain

こちらの接続を削除します。複数の接続がある場合は、リモート名を指定することで、個々の接続を削除することができます。今回は1つの接続しかないため、*(アスタリスク)を入力して削除します。

net use * /delete

削除対象の接続を確認されるため、「Y」と入力し操作を続行します。

削除後に再度ユーザー名とパスワードを入力することで、別ユーザーとして共有フォルダにアクセスすることができます。

9. まとめ

今回は特定のユーザーだけがアクセスできる共有フォルダを作成しました。
Sambaユーザーの新規作成や共有フォルダへのアクセス権の設定など、やることが色々あり手間がかかる部分もありますが、慣れてしまえばさくさくと作れるようになるかと思います。