最近、常用のPCを5年使ったノートPCから、デスクトップに切り替えました。VisualStudioを動かすにはメモリ8GBではとても足りませんでしたし、
まして今時HDDではとても作業になりませんでしたから、大変快適な環境になりました。
結果として、使わないノートPCが1台自宅の置物となっているわけですが、せっかくなのでSSDに換装のうえOSをubuntu22.04にしてみました。
いろいろやってみたいことはありますが、まずは環境構築をせねばなりません。
今回は、ubuntu側をサーバーとしてWindowsとファイル共有をする設定を行いました。
ネット上には同趣旨の記事があふれていますが、なんだかんだ詰まったポイントもあったので以下に記しておこうと思います。
あと、初心者なので注釈も細かく書きます。
1.手順一覧
- ubuntuユーザの追加
- sambaユーザの追加
- 共有ディレクトリの作成とアクセス制限
- GUIから共有設定
2.実際にやってみる
2-1.ubuntuユーザの追加
まずはUbuntuにユーザを追加します。といってもLinuxの標準コマンドです。ctrl + alt + t でターミナルを開いて、
$ sudo adduser [任意のユーザ名] (*1)
入力するとパスワードの入力を求められるので、入力します。
*1 sudo 管理者権限でコマンドを実行するときに使用するコマンド
一応、追加されているか確認します。
$ cat ../../etc/passwd (*2)
今回は"ubuntu"というユーザ名にしました。
passwdファイルの最後の行に自分の入力したユーザ名が追加されています。
*2 cat ファイルの内容を標準出力するコマンド
2-2.sambaユーザの追加
WindowsとUbuntuの間で直接ファイルの送受を行うことはできません。
ファイルのやり取りを実現する方法として、Ubuntu側でSambaサーバー(*3)を立てる方法があります。
*3 Samba windowsと互換性のあるファイルサーバ機能などを提供するソフトウェア
楽しそうな名前でいいね
まずはSambaをインストールします。
$ sudo apt install samba (*4)
*4 apt パッケージのインストール・削除(remove)・更新(upgrade)に使うコマンド
Sambaにユーザ登録します。Ubuntuに追加したユーザと同じユーザ名にしないといけないらしいです。
$ smbpasswd [任意のユーザ名]
パスワードの入力も求められるので、適当に入力します。
一応、登録されているか確認。
$ sudo pdbedit -L -u [ユーザ名]
2-3.共有ディレクトリの作成とアクセス制限
共有のディレクトリは、今回は作成したユーザ"ubuntu"のホームディレクトリ内に作成します。
わかりやすくなるようルートディレクトリに移動。
$ cd /
ディレクトリの作成。今回は"share"という名前にします。
$ mkdir ./home/ubuntu/share
確認がてらlsコマンドを叩きます。-lオプションで詳細を表示できます。
$ ls -l ./home/ubuntu/share
一番右の列にそれぞれのディレクトリやファイル名が表示されているはずですが、一番左の列に謎めいた文字列が表示されているかと思います。
(ディレクトリ作成当時の画像がないので適当にルートディレクトリでlsしたものを使います)
左の列の文字列は、アクセス権限を表します。
d| rwx| rwx| rwx
① ② ③ ④
文字列には上記4つのセクションに分かれています。
まず、使用されている文字がそれぞれ意味するところは、
①のセクションでは、'd'はディレクトリ'-'はファイルを示します。
②~④においては、'r'は読み取り可能であること。'w'は書き込み可能であること。'x'は削除可能であることを示し、'-'は権限が与えられていないことを示します。
また、②は所有者の権限、③はグループの権限、③はグループ外のその他のユーザの権限です。
あらたに作成したshareディレクトリはたしかdwrx------だったと思いますので、所有者以外は権限が与えられていない状態です。そこで、権限を変更するコマンドを叩きます。
$ sudo chmod 777 ./home/ubuntu/share (*)
* chmod ChangeModeコマンドで、ディレクトリやファイルへのアクセス制限を行う。
今回はLAN内でサーバにアクセスするのは自分だけなので777ですべてのユーザに権限を与えます。またいずれ制限する練習もしたいですね。
ついでにSambaの設定ファイルも編集します。
$ gedit /etc/samba/smb.conf (*)
* gedit CUIのviとは違いGUIによるテキスト編集が行える。
[global]で始まるセクションに以下を追記。
dos charset = cp932
unix charset = UTF-8
また、workgroup = WORKGROUP
という記述が存在することを確認します。
####Networking####から始まるブロックに、
; interfaces = 127.0.0.0/8
という記述があるので、この部分に以下のように追記します。先頭のセミコロンは削除するらしいです。
interfaces = 127.0.0.0/8 [自身のネットワークアドレス]
ipアドレスはWindows側のコマンドプロンプトからでもUbuntuのターミナルからでもどちらから調べても可。
今回はWindowsから。
ipconfig /all
自分はIPv4アドレスが192.168.11.xでサブネットマスクが255.255.255.0なので、ネットワークアドレスは192.168.11.0として考えます。
最後にsmb.confの末尾に以下を追記。
[share]
browsable = yes
writable = yes
path = /home/ubuntu/share
force create mode = 0770
force directory mode = 0770
guest ok = yes
guest only = yes
2-4.GUIから共有設定
CUIだったりGUIだったりでマチマチになってしまっていますが、こういう設定も全部CUIでできるようになりたいですね。
共有フォルダを右クリック→「ローカルネットワーク共有」を選択。
「このフォルダー内でのファイルの作成・削除を他のユーザに許可する」
「ゲストによるアクセス」(本当に選択する必要があるのか確かめてない)を選択。Ubuntu側の設定はこれでおしまい。
一応、
$ sudo testparm
でsmb.confの記述にミスがないか確認。
Windowsからは、エクスプローラを開いて「ネットワーク」を右クリック→「ネットワークドライブの割り当て」を選択。
ドライブはなんでもいいので、フォルダー名を以下の通り指定
\\[Sambaユーザのドメイン]\[共有フォルダ名]
Sambaユーザのドメインは
$ sudo pdbedit -v [ユーザ名]
で出力される詳細情報の"Domain"の行に記載があります。
入力次第「完了」押下で設定完了です!
3.エラー対処
■'net usershare'がエラー255を返しました
net usershare add:cannnot share path/home/ubuntu as we are restricterd to only sharing directories we own.
"Ask the administrator to add the line "usershare owner only = false"
tothe [global] section of the smb.conf to allow this.
というガイドが出るので、それに従う。
smb.confの[global]セクションに"usershare owner only = false" を追記。
■WARNING: no network interfaces found
...?
インターフェース?ルーターかな?と思いましたがルータは生きている模様。
$ sudo smbstatus
を実行するとなぜかSambaサーバーが動いていない様子。
$ sudo system ctl restart nmdb
=>Failed to restart nmdb.service: Unit nmdb.service not found.
検索すると原因が多岐にわたるようなので削除後再インストールすることにしました。こういうのもうまく対処できるようになりたいですね。
$ sudo apt-get remove samba-common-bin
$ sudo apt-get remove samba-common
$ sudo apt-get remove samba
*よくよく調べたらsystem ctl restart nmdb は検索してもHITしないので間違っていたかも。やる気があったら調べて追記しようと思います。
【お世話になったサイト様】
http://ckenko25.jp/2016/02/post-2272(Samba再インストール)
https://chirorin.hatenadiary.com/entry/2021/06/21/132126(共有フォルダ作成の流れ)
http://www.linux-beginner.com/linux_kihon139.html(コマンド類)