sambaの設定とDebian(Linux)のファイル所有権
WindowsとDebian間でファイルを共有したい場合はsambaを使うと便利です。その際は、WindowsからDebianのファイルを参照する際は、Debian(Linux)にはWindowsとは違ったファイルの所有権というものがあるので、それを把握しておく必要があります。
Debian(Linux)でのファイルの権限や所有者
ファイル共有方法の説明の前に共有の際に必要になるLinuxのファイル権限や所有者について少しふれておきます。それらのことをすでに理解している方は読み飛ばしてください。
Linuxではファイルに所有者という概念があります。nanoアプリを使ってファイルを新規作成した時、起動したユーザがyamadaならyamada、ishinoならishinoが所有者になります。管理者権限で処理した場合、所有者は管理者を意味するrootとなります。
またファイルやディレクトリは、所有者、グループ、他という区別でアクセスを制限できるようになっています。yamadaが作ったファイルを自分しか見られないように設定すれば、ishinoはそれを読みだすことができません。
Linuxではユーザはグループに所属します。yamadaがclass1というグループに対してファイル読み出しを許可したとします。その際、ishinoは自分もclass1というグループに所属していればファイルを読み出すことができますが、そうでなければ読み出すことができません。
yamadaが誰にでも読み出し可能という設定をしてあれば、ishinoやほか誰でもファイルを読み出すことができます。
設定の種類には「読み出し」だけでなく「書き込み」と「実行」もあります。所有者、グループ、他に対して、読み出し、書き込み、実行という3×3のパターンで権限を設定できます。
「実行」権限が少しわかりづらいかもしれません。ファイルだったらプログラム(アプリ)として実行できるかという意味になります。ディレクトリ(フォルダ)だった場合はその中身をみられるかという意味になります。
ファイルやディレクトリの権限の確認方法
ファイルやディレクトリの権限確認はls -lコマンドにより可能です。実行すると次のように出力されます。
drwxrwxrwx | root root | 256 | Dec 1 1029 | filename | filename |
1 | 2 | 3 | 4 | 5 |
1の部分が権限を表しています。最初の1字がファイルの種類、- なら通常ファイル、d ならディレクトリ、l
なら(シンボリック)リンクといった具合です。2文字目からは順に3桁ずつ、所有者の権限、グループの権限、他の人の権限となっています。3桁の内訳ですが、r が読み出し(read)、w が書き込み(write)、x
が実行(execute)です。これらの位置は常に固定されていて、該当する権限がない時は-と表示されます。
2の部分は所有者 グループとなっています。ここではrootユーザかつrootグループという意味です。3はファイルサイズ、4が更新日、5がファイル名となっています。
ちなみに管理者になっている場合は所有者の権限に従います。なので書き込み権限のないファイルは書き込みができません。
ファイルやディレクトリの権限や所有者の変更の仕方
ファイルの権限の変更はファイルの所有者か管理者で行います。chmodというコマンドで変更します。
上記例ではfinenameというファイルに対して、u(user:所有者)、g(group:グループ)、o(other:他)に、r(read:読み出し)、w(write:書き込み)、x(execute:実行)の権限を与えています。
逆に権限を外したい場合は+の部分を-にします。
上の例では、グループと他から書き込みと実行権限を除去しています(読み出し権限は何も変更もしません)。
所有者の変更は管理者で行うのが通常です。chownというコマンドで変更します。
上記例ではfinenameというファイルの所有者をroot、グループをrootに設定しています。この時、存在しないユーザやグループを指定するとエラーになります。
samba
sambaは「さんば」と読みます。Windowsとlinux間のファイル共有に便利なアプリです。インストールはaptで行います。
$ su - ... # apt update ... # apt install samba
Debianでのsambaの設定ファイルは/etc/samba/smb.confになります。ここでは一番簡単な方法でWindowsとファイルを共有します。
例として/home/user/sample ディレクトリを読み書きできる状態で共有する方法を紹介します。
$ su ... # nano /etc/samba/smb.conf>
nanoエディタを起動させたら最下段に次のように記述します。
[share] path = /home/user/sample guest ok = yes guest only = yes writable = yes
変更した設定を反映するにはsambaを再起動させる必要があります。
# systemctl restart smbd
この時、実際に共有するディレクトリ名はsampleですが[share]と設定している為、外部から見えるディレクトリ名はshareとなります。
アクセスの仕方は、エクスプローラのロケーションバーに¥¥の後に共有ディレクトリを持つPCのIPアドレスを入力します。
しかし、いざフォルダを開こうとしたり、ファイルを編集しようとしたり、新しいファイルを作成しようとしても、できないようになっていることがあると思います。
それはsambaの設定とは別にDebian(Linux)OSのアクセス権の設定が存在するためです。
先のsambaの設定では、すべてゲストアクセス(ユーザnobody、グループnogroup)となります。なので「他者」に読み込みと書き込みの権限を与えてないと意図したように共有できません。
注意です。この方法での共有は第三者がネットワーク越しに到達することのできるPCで行うと、セキュリティ的な問題が生まれます。ですので目的の作業が終わったら共有を止めるようにしてくだい。先ほど記述した部分をコメントアウトすれば共有は止まります。
文字コードの違い
共有されたDebianのファイルをWindowsから編集する際に気を付けなければいけないことがあります。それは両者におけるOSが通常使用している「文字コード」に違いがあることです。
文字コードとは、簡単にいうと文字を内部でどのように保存しているかということです。たとえば「Shift-JIS」という文字コードでは「あ」という文字は16進数の「82A0」として保存されます。一方「UTF-8」という文字コードにおいては「あ」は「3042」として保存されます。
日本語のWindowsでは標準の文字コードはShift-JISで、Debianの標準の文字コードはUTF-8となっています。
また、記述の途中で先頭に折り返すことを「改行」というのはご存じだとは思いますが、文字コードとは別に改行をどのように保存するかという区別もあります。
それを「改行コード」といいます。改行コードは文字コードほど種類があるわけでなく、筆者の知る限りではCRLF、LF、CRの3種です。
WindowsOSが基本的に使う改行コードはCRLF、Debian(Linux)ではLFとなっています。
文字コードがOSの標準と違ってもそれと認識させればば正しく表示することはできます。また、Windowsのメモ帳などでファイルを開く際はエディタアプリが自動認識して正しく表示してくれたりもします。しかし、新規作成の場合は意識して指定して保存してやらないとOS標準の文字コードで保存されてしまいます。
文字コードや改行コードを意識しないと思わぬ不具合に遭遇することがあります。
たとえばDebian上のbashスクリプトファイルを、文字コードShift-JIS、改行コードをCRLFにしてしまうと、文字化けや改行コードの問題で稼働しなかったりします。
Windowsの標準のテキストエディタである「メモ帳」は文字コードや改行コードがわかりづらいので、サクラエディタ等のフリーツールを使うと便利です。
サクラエディタは改行コードのCRLFやLFといった違いを記号で示してくれますし、保存時に文字コードや改行コードの変換も可能です。
Debianでは通常、文字コードは「UTF-8」改行コードは「LF」ですので、それに合わせて保存するようにしてください。
バージョン
近年Sambaのバージョン1に脆弱性が見つかり、Windowsでもデフォルトでバージョン1は利用できなくなりました。
利用したい場合、Windowsでは「Windowsの機能の有効化または無効化」追加から「SMB1.0」の項目より有効にできます。
Linuxの場合はsmb.confのglobalセクションに設定を追加します。サーバーとしてバージョン1を受け入れるなら「 server min protocol = NT1 」、クライアントとして接続時にバージョン1で接続するなら「 client min protocol = NT1 」とします。文字通りminですので、それより上位の接続が可能ならそちらが有効になります。
バージョン1が無効になった経緯はセキュリティの問題に起因しますので、それを承知した上で利用し、可能なら上位のバージョンへ移行させるようにしましょう。