「Samba(サンバ)」を使い、共有環境を構築する。
簡易で構築する方法は以前に紹介した。
せっかくなので、セキュリティを意識したい。
アクセス制御としては、組み合わせで様々パターン設定ができるので、環境に応じて取捨選択する。
①共有ディレクトリを隠しディレクトリにする
ディレクトリがわかっていれば意味はないが、Windowsエクスプローラ上でパッと見、アクセス先が見えないので、誤魔化すことができる。
smb.confの設定
共有ディレクトリのセクションへ記述。
browseable
"no"を指定することで、「ネットワークコンピュータ」に表示させず、隠し共有ディレクトリになる。(参考:Samba ドキュメント)
([Share]セクションがあったとする)
[Share]
・・・
browseable = no
・・・
・・・
②接続インターフェースの制限
SambaサーバーのPCが複数のNICを使ってネットワークを構築している場合に、特定のNICだけでSambaを有効としたい場合に制限できる。
smb.confの設定
以下、[global] セクションへ記述する(セクションのどこかに記述してあればよい)。
interfaces
Sambaのデフォルトではデータをプライマリのネットワークインタフェースにしか送出しない。複数のNICが存在する環境の場合は、期待したネットワークをプライマリネットワークとして選択するとは限らないので、送信したいインタフェースリストを正しく指定する。(参考:Samba ドキュメント)
bind interfaces only
interfacesと組み合わせて設定する。このパラメータに"yes"が指定されているとき、指定されたネットワークのみ利用可能となる。このパラメータを指定するときは必ずlocalhost(127.0.0.1)のIPアドレスをinterfacesに含むようにすること。
(参考:Samba ドキュメント)
interfaces = 127.0.0.1 eth0
bind interfaces only = yes
③接続IPアドレスの制限
Sambaサーバーに接続してくるIPアドレスを使って制限をかける。
smb.confの設定
以下、[global] セクションへ記述する(セクションのどこかに記述してあればよい)。
hosts allow
接続を許可するIPアドレスを指定する。localhost のアドレスである 127.0.0.1 からのアクセスは、
hosts deny パラメーターで明示的に禁止されない限り、常にアクセスを許可されている。
(参考:Samba ドキュメント)
この設定をするのであれば、次の hosts deny と合わせて設定し、許可するアドレスを明確にし、わかり易くしておくほうが良い。
hosts deny
このパラメーターで指定されたものは、アクセスが拒否される。"all"を指定することで、デフォルトアクセス禁止となる。
これを使う場合は、localhost のアドレス を hosts allow に指定することを忘れないこと。
(参考:Samba ドキュメント)
hosts allow = 192.168.1. 127.
hosts deny = all
ユーザー設定
以降のアクセス制限ではユーザー設定が必要となるので、先にユーザー設定について説明する。
Sambaユーザー登録
Sambaを利用するためだけでも、Linuxユーザーの作成が必要。
Linuxユーザーに登録されているユーザーと照合して、Sambaユーザーが登録される。
(対象となるLinuxユーザーは、/etc/passwd ファイルで確認できる)
Linuxユーザーを登録をする。
sudo useradd hogehoge -s /bin/false
Sambaを使うためだけに作成するユーザーの場合、-s オプションで、"/bin/false" を付けて登録するとよい。(ログインシェルを使わないように指定)sudo passwd hogehoge
新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました |
ログインシェルを使わないとしても、ユーザーを作成しているのでパスワードの設定もしておく。
登録対象となるユーザーを確認できたら
Sambaユーザーを登録する。
※pdbeditコマンドはSamba3.0以降の対応
ユーザーをデータベースに追加する -a オプションを指定する。
ユーザー名を -u オプションで合わせて指定する。
sudo pdbedit -a -u hogehoge
対話式でパスワードを設定する。
new password: retype new password: |
Sambaユーザーの一覧を確認
-L オプションを使う。
sudo pdbedit -L
さらにユーザーの詳細情報も表示したいのであれば、-v オプションをつける。
sudo pdbedit -L -v
Sambaユーザーを削除する
-x オプションを使う。
sudo pdbedit -x -u hogehoge
Sambaユーザーのために、Linuxユーザーを追加したのであれば、合わせて削除しておく。sudo userdel hogehoge
Sambaユーザーのパスワード変更
パスワード変更は、pdbeditコマンドでは変更できない。
smbpasswdコマンドを使う。
sudo smbpasswd -U hogehoge
グループ設定
ユーザー設定を行ったら、合わせてグループ設定も行っておくとよい。
(ここで扱うグループ設定は、Linuxで管理するグループのこと)
ユーザー単位だけではなく、グループ単位でアクセス制御ができるようになる。
グループ新規作成
例として、-g オプションでIDを500番で指定し、グループを新規作成した。
IDの指定は必須ではないが、
例えば「共有ディレクトリのアクセス権を管理するグループIDは500番台とする」とルールを決めておけば、後々グループが増加しても整理し易いと思う。
sudo groupadd -g 500 filegrp
ユーザーをグループに追加
$ id hogehoge uid=1001(hogehoge) gid=1001(hogehoge) groups=1001(hogehoge) |
sudo gpasswd -a hogehoge filegrp
$ id hogehoge uid=1001(hogehoge) gid=1001(hogehoge) groups=1001(hogehoge),500(filegrp) |
"usermod" コマンドでも良いが、誤ったオプション指定をすると所属グループが置き換わるので、"gpasswd" コマンドを使っている。
グループからユーザーを削除
sudo gpasswd -d hogehoge filegrp
$ id hogehoge uid=1001(hogehoge) gid=1001(hogehoge) groups=1001(hogehoge) |
グループを削除
不要となったグループを削除する。
sudo groupdel filegrp
④Guest接続を拒否
以前に紹介した設定は、アクセス制限せず、すべてをGuest接続としてSambaへのアクセスを許可したが、これとは逆に、ユーザー登録していない接続をすべて拒否する。
smb.confの設定
[global] セクションへ記述。
map to guest
"Never"を指定する。ユーザー認証に失敗した場合にアクセスが拒否される。(参考:Samba ドキュメント)
デフォルトの設定でGuest接続を拒否する。
サーバーアクセス時にユーザー認証が行われ、許可された場合のみ接続できる。
####### Authentication #######
~ 省略 ~
# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
map to guest = Never
⑤共有ディレクトリ単位でGuest接続を拒否
Guest接続を拒否とは違い、デフォルト設定ではGuest接続を許可しておき、共有ディレクトリ単位で許可・禁止を設定する。
smb.confの設定
[global] セクションへ記述。
map to guest
"Bad User"を指定する。ユーザーが存在しなかった場合はGuestでログインすることを許可。####### Authentication #######
~ 省略 ~
# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
map to guest = Bad User
共有ディレクトリのセクションへ記述。
guest ok
Guest接続を許可する場合に"yes"を指定。"map to guest"が有効な場合のみ有効。(参考:Samba ドキュメント)
例えば、複数の共有ディレクトリが用意されており、
Guest接続を許可しないディレクトリには、"guest ok = no" を指定する。
こうすると、共有ディレクトリ・アクセス時にユーザー認証が行われる。
([Share]セクションと、[Data]セクションがあったとする)
[Share]
・・・
guest ok = yes
・・・
[Data]
・・・
guest ok = no
・・・
⑥特定のユーザー(グループ)だけアクセス許可
共有ディレクトリへのアクセス権を特定のユーザー(グループ)に設定する。
smb.confの設定
共有ディレクトリのセクションへ記述。
valid users
指定されたユーザー(グループ)だけが共有ディレクトリにアクセスできる。グループを指定する場合は、"@"をつけグループ名を指定する。(複数指定する場合は、半角スペースか、カンマ(,)で区切る)
(参考:Samba ドキュメント)
([Share]セクションがあったとする)
[Share]
・・・
valid users = hoge2 @filegrp
・・・
・・・
⑦特定のユーザー(グループ)だけアクセス拒否
特定のユーザー(グループ)だけアクセス許可の逆。
共有ディレクトリへのアクセス権を特定のユーザー(グループ)だけ禁止にする。
smb.confの設定
共有ディレクトリのセクションへ記述。
invalid users
指定されたユーザー(グループ)だけを共有ディレクトリへのアクセスを禁止する。グループを指定する場合は、"@"をつけグループ名を指定する。(複数指定する場合は、半角スペースか、カンマ(,)で区切る)
invalidとvalidが同時に指定されている場合はinvalidの設定を優先。
(参考:Samba ドキュメント)
([Share]セクションがあったとする)
[Share]
・・・
invalid users = hoge2 @filegrp
・・・
・・・
⑧特定のユーザー(グループ)だけ読み書き許可
共有ディレクトリで、特定のユーザー(グループ)だけ読み書きを許可に設定する。
smb.confの設定
共有ディレクトリのセクションへ記述。
read only
"yes"を指定することで、共有ディレクトリを読み取り専用に設定する。(参考:Samba ドキュメント)
write list
指定されたユーザー(グループ)だけが読み書きを許可される。グループを指定する場合は、"@"をつけグループ名を指定する。(複数指定する場合は、半角スペースか、カンマ(,)で区切る)
read onlyパラメータへの例外設定として用いる。
(参考:Samba ドキュメント)
([Share]セクションがあったとする)
[Share]
・・・
read only = yes
write list = hoge2 @filegrp
・・・
・・・
⑧特定のユーザー(グループ)だけ書き込み禁止
共有ディレクトリで、特定のユーザー(グループ)だけ書き込みを禁止に設定する。
smb.confの設定
共有ディレクトリのセクションへ記述。
read only
"no"を指定することで、共有ディレクトリを読み書き許可に設定する。read list
指定されたユーザー(グループ)だけが読み込み専用に設定される。グループを指定する場合は、"@"をつけグループ名を指定する。(複数指定する場合は、半角スペースか、カンマ(,)で区切る)
read onlyパラメータへの例外設定として用いる。
(参考:Samba ドキュメント)
([Share]セクションがあったとする)
[Share]
・・・
read only = no
read list = hoge2 @filegrp
・・・
・・・
まとめ
パラメータを組み合わせて、様々なアクセス制御が可能。
結局どうすればよいのか?と悩ましい。
家庭内で使う程度であれば、④Guest接続を拒否だけでも十分だと思う。
あと、①共有ディレクトリを隠しディレクトリにするのも有効だと思う。
Ubuntu サーバの設定 Windowsファイルサーバー