Raspberry piのファイルをSambaで共有してWindows10から編集する
Apacheで表示するhtmlをメインPCから編集したかったのでやってみました。
自分用備忘録を含むためApacheをインストールする所から書くので、メインPCに共有したいフォルダがRaspberry piにある場合は2.以降を参照してください。
今回使用したバージョン
- Raspberry pi 3 model B Raspbian 9.4 stretch
- Apache 2.4.25(Raspbian)
- Samba 4.5.12-Debian
1. Apache2のインストールと設定
取り敢えずapt-getをupdate、upgradeしてからapache2をインストールします。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install apahce2
apache2でのデフォルトディレクトリは /var/wwwです。この中にhtmlファイルを置くと、ブラウザから表示することができます。
apache2のディレクトリを変更する場合は、指定したいディレクトリを記述した設定ファイルを登録する必要があります。 私はこちらのサイトを参考にさせていただきました。 g2-girichan.hatenablog.com
confファイルを弄り私は /home/public/www をディレクトリに設定しました。
今回はSambaで/home/publicを共有することによって、メインPCから/home/public/www内のhtmlを直接編集することができるようにします。
2. Sambaのインストールと設定
ラズパイにSambaをインストールすることで指定したフォルダを共有することができるようになります。なので取り敢えずSambaをインストールします。
$ sudo apt-get install samba
Sambaをインストールした後にやることは3つあります。こちらを参考に進めさせていただきました。
Sambaにユーザーを登録する
Sambaには登録されたユーザーか、あるいはゲストとして接続する必要があります。今回はRaspberry piに専用のユーザーを用意してSambaに接続します。
まず新しくユーザーを作成します。このユーザーはSambaへの接続にしか使わないので、今回はhomeにディレクトリは作っていません。
$ sudo useradd hoge
このユーザーをpdbeditコマンドを使いSambaユーザーとして登録します。
$ pdbedit -a hoge
このコマンドを実行するとパスワードを入力するように求められます。このパスワードはSambaに接続する時にメインPCから入力するものです。
共有するフォルダのパーミッションを変更する
Linuxのフォルダやファイルにはパーミッションというものがあります。ファイルを閲覧したり編集する為の権限のことです。
メインPCから共有フォルダ内のファイルなどを編集する際には、Sambaに接続するユーザーと共有フォルダの権限が一致する必要があります。
自分のためにパーミッションがどういうものか覚え書きをするので興味のない方は ここ をクリックしてください。
mkdirで作ったディレクトリのパーミッションは親ディレクトリのパーミッションが操作ユーザーと異なる場合rootになるようです。例としてに /home/public/wwwのパーミッションを見てみましょう。パーミッションは ls -lで見ることができます。
:/home/public $ ls -l drwxr-xr-x 2 root root ~省略~ www
これがなにを表しているかはこちらにとても丁寧に記載されていました。
こちらを参考にls -lによるwwwの結果を読み取ると
- ディレクトリの所有者は読み取り書き込み実行の全てができる。
- 所有グループとその他のユーザーは読み取りと実行しか行うことができない。
- 所有者はroot、所有グループもrootである。
ということがわかります。つまりrootでないとディレクトリ内のファイルやフォルダを編集することができないということです。
したがって今回の場合では共有したいディレクトリのパーミッションをSambaユーザーにものにする必要があります。
ちなみにwwwディレクトリのパーミッションがrootに設定されたのはAというアカウントでrootパーミッションであるpublicディレクトリ下にmkdirしたからです。逆に/home/A/ など親ディレクトリのパーミッションと操作ユーザーが一致するディレクトリにmkdirすると、作られたディレクトリのパーミッションは操作ユーザーのものになるようです。
では共有するディレクトリをhogeで編集できるようにしましょう。パーミッションの所有者をhogeにしても良いですが、この先Sambaユーザーが増えるかもしれないことを考えてSambaユーザー全てが所属するグループ「groupS」を作ることにします。その後共有ディレクトリの所有グループをgroupSに設定します。
まず新しくグループを作り、そのグループにhogeを追加します。
$ groupadd groupS $ gpasswd -a hoge groupS
今回共有したいディレクトリは /home/publicです。chgrpコマンドを用いてpublicの所有グループをgroupSに設定します。
$ chgrp groupS /home/public/
所有グループに書き込みを行う権限がないので権限を与えます。
$ chmod -R 775 /home/public/
/homeでls -lを行うとpublicに対してこのように表示されます。
drwxrwxr-x 2 www-data groupS ~省略~ public
このように出たら成功です。Sanmbaユーザーでログインし共有ディレクトリに対して書き込みを行うことができるようになっています。ちなみに775にしている理由はその他のユーザーでも実行できるようにしておかないとApacheが読み込めなくなるからです。
Sambaの設定をする
Sambaはインストールすると設定ファイルを /etc/samba/smb.conf として生成します。
共有するフォルダなどの設定はこのファイルを弄ることで設定することができます。
$ sudo vi /etc/samba/smb.conf
でsmb.confを開き、ファイルの末尾に以下の文章を追記します。
[public] comment = apache directory path = /home/public #"指定したいディレクトリ" writable = yes hosts allow = 192.168.xxx.
[public]は共有した時に表示する名称です。
commentは共有先一覧を詳細表示で見た時にコメントに表示される文章です。
pathは共有したいディレクトリです。私の場合はApacheのディレクトリの一つ上のディレクトリを指定しています。
writableは共有するフォルダでの書き込みを許可します。これを記述しないとファイルが開けても書き込むことができません。read only = no と記述しても同様の効果を得ることができます。
host allowは接続できるIPアドレスを指定しています。ローカルネットワークのIPアドレスを指定することでLAN内からしか接続することができないように設定することができます。
これらの設定項目はこちらを参考にさせていただきました。
設定ファイルに記述して保存した後にはsambaのサービスを以下のコマンドで再起動する必要があります。
$ sudo service smbd restart $ sudo service nmbd restart
ここまで設定したらRaspberry pi側で行う操作は以上です。
3. Windows10での設定
さて、ここからは共有ディレクトリに接続するためにメインPCであるWindows10の設定を行っていきます。
ネットワークを開いてもRaspberry Piを見つけることができないと思います。これはWindows10があるアップデート以降SMB1をデフォルトでインストールしなくなったからです。詳しいことは本筋から外れるため記しませんが、とにかくSMB1を有効にしないとネットワークにSambaが表示されなくなっているようです。表示する方法があれば是非教えてください。
ネットワークで見つからないので直接ネットワークドライブとして割り振ることにします。
PCを右クリックして「ネットワークドライブの割り当て」を選択します。
割り当て画面で\\"Raspberry pi のIPアドレス"\public をフォルダーとして選択します。
完了を押しPCに出てきたpublicを表示しようとすると「ネットワーク資格情報の入力」というポップアップが表示されます。
ユーザー名に"hoge" パスワードにSambaにユーザー登録した時のパスワードを入力します。資格情報を記憶するにチェックを入れOKを押せば無事接続完了です。
4. おわりに
共有するフォルダのパーミッションあたりが詰まりやすいのではないかと個人的には思います。自分用メモとしての役割が大きいですが、参考になれば幸いです。