ubuntu 21.04 β & mint mate 20.1 で試験
ubuntu 20.04 でも標準で上手くWindowsから接続できませんでしたが21.04 β でも同じ
19.10 ?までは問題なく接続できたが
現象
1.ubuntu でguiでアクセスフリー状態にしてもホルダーの存在は確認できるがアクセス権が無しとなる。
sudo pdbedit -a [ユーザー名]
を行なう(sambaが有効か確認するためにパスワードはSAMBA用に別にする)&「このホルダーを共有するのみにチェック」後、再起動→[ユーザー名]がWindowsのユーザー名が同じ場合ユーザー認証なしに接続&フルアクセス状態になる。
次に一旦GUIで共有を解除後
smb.conf の最終行に下記を記述( sudo gedit /etc/samba/smb.conf )
[公開]
path = /home/[ユーザー名]/公開
writeable = yes
create mode = 0660
directory mode = 0770
guest ok = no
valid users = @[グループ名] #グループは[ユーザー名]を入力
smb.confの編集を反映させるため下記コマンド実行
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd
アクセスできない状態が発生 (/home/[ユーザー名]/配下は /etc/samba/smb.confとは別にコント―ロールされている模様)
色々設定を変更しているうちにフルアクセス状態から設定を変更しても制限付きにならず(マシン自体の再起動を行ったにもかかわらず) 翌日になったら反映された
おそらくどこかに情報が残っていた可能性あり
原因調査中
解決策
/home/[ユーザー名]/公開 は使用しない
理由:GUIで細かなアクセス権が設定できない。(GUI 設定で不用意に変更出来てしまう)
インストール
アップデート
sudo apt update
ここで「アップグレードできるパッケージが〇個あります。」的な表示が出たら以下のコマンドを実行
sudo apt upgrade
samba
sudo apt install samba
sambaにユーザーを登録します
sudo pdbedit -a [ユーザー名]
[ユーザー名]には自分が使っているユーザー名を入れてください。(Ubuntu上に存在するユーザーならどれでも大丈夫です。)
sambaのポート445の解放 (ubuntuは不要?確認中 samba をコマンドからのインストールを次回行う)
sambaは標準でTCPの445番ポートを使用しますので、ファイアウォールを設定しアクセスできるようにします。
ufwを利用してファイアウォールの設定します。
ufwが有効になっていない場合はまず、以下のコマンドで有効化します。
sudo ufw enable
ufwを有効にしたら、次は445番ポートを開放します。
sudo ufw allow 445/tcp
statusコマンドで445番がALLOWとなっていることを確認します。
udo ufw status
状態: アクティブ
To Action From
-- ------ ----
42000 ALLOW Anywhere # WARPINATOR
445/tcp ALLOW Anywhere
42000 (v6) ALLOW Anywhere (v6) # WARPINATOR
445/tcp (v6) ALLOW Anywhere (v6)
設定に問題がなければ、reloadコマンで再読込を行い設定を有効にします。
sudo ufw reload
共有用ディレクトリの設定
すでに存在する mnt 配下にNAS1 を作成
sudo mkdir /mnt/NAS1
LINUX上のアクセス権変更 「所有者」と所有グループ」「その他」にアクセス権)
現状 「所有者」が root の為
sudo chmod 777 /mnt/NAS1
「所有者」を ログインユーザーに変更すれば下記の設定でOK
詳細はこのページの最後の「パスワード付き共有ディレクトリを作る」を参照してください
単純に「所有者」と所有グループ」を変更するには root → ユーザー名 に変更は、
「Linuxコマンド【 chown 】ファイルの所有者やグループを変更 - Linux入門 - Webkaru」
https://webkaru.net/linux/chown-command/ ←詳細
chown -hR ユーザー名:ユーザー名 ディレクトリ名
sudo chmod 770 /mnt/NAS1
sambaの共有ディレクトリの設定
smb.conf の最終行に下記を記述(
sudo gedit /etc/samba/smb.conf (ubuntuの場合)
sudo xed /etc/samba/smb.conf (mintの場合)
[NAS1]
path = /mnt/NAS1
writeable = yes
create mode = 0660
directory mode = 0770
guest ok = no
share modes = yes
valid users = @[グループ名] #グループは[ユーザー名]を入力
smb.confの編集を反映させるため下記コマンド実行
sudo systemctl restart smbd nmbd
Ubuntuの起動時に自動で実行させる
sudo systemctl enable smbd nmbd
IPアドレス認識はすぐ認識するがコンピューター名はパスワード認識がなかなかしない現象が発生します。ルーターの自動登録?… 原因不明
2.「Windowsの共有ホルダ」のアイコンをクリックすると「要求された場所にアクセスできません」と表示される。
/etc/samba/smb.confファイルを編集(root権限が必要)
[global]セクションに以下の行を追加
client min protocol = NT1
ファイルを保存してエディターを終了します。
その後
sudo systemctl restart smbd
でも上手くいかず
3.SMB://名前/ で接続できない SMB://192.168.■.■ では接続可能
解決方法
/etc/resolv.conf が外部の DNS リゾルバを直接参照するようにする
/etc/resolv.conf を /run/systemd/resolve/resolv.conf へのシンボリックリンクとすればよいです。
/run/systemd/resolve/ には resolv.conf と stub-resolv.conf という2種類のファイルが含まれています。resolv.conf は外部の DNS リゾルバを直接参照するような設定が書かれており、stub-resolv.conf は「外部の DNS リゾルバを参照するように設定された local DNS stub listener」を参照する設定(すなわち 127.0.0.53)が書かれています。これらのファイルの内容は systemd-resolved により管理されているので、間接的に、netplan の設定ファイルに書かれた内容が反映されるようになっています。
要するに、以下のようにすればよいです。
$ cd /etc
$ sudo ln -sf ../run/systemd/resolve/resolv.conf resolv.conf
あとは systemd-resolved を再起動して local DNS stub listener を止めます。
$ sudo systemctl restart systemd-resolved
参考先
以下はテストしたときの設定です
smb.conf の 内容が相違します 検証中
参考 https://beightlyouch.com/blog/programming/ubuntu-fileserver-nas/
https://nanjib.com/archives/476
http://www.coffeespark.com/samba/ mint これから内容確認&試験
https://snowsystem.net/other/linux/samba-install/
http://honana.com/samba/setting
force create mode → create mode が現状では正解です
force directory mode → directory mode 同上
アップデート
sudo apt update
ここで「アップグレードできるパッケージが〇個あります。」的な表示が出たら以下のコマンドを実行
sudo apt upgrade
sambaのインストール
sudo apt install samba
sambaがインストール出来たら、pdbeditというコマンドでsambaにユーザーを登録します。
sudo pdbedit -a [ユーザー名]
[ユーザー名]には自分が使っているユーザー名を入れてください。(Ubuntu上に存在するユーザーならどれでも大丈夫です。)
共有用のディレクトリを作る
ファイルサーバーで共有するディレクトリを作成します
sudo mkdir /home/ubuntu/share
ディレクトリが作れたら以下のコマンドで誰でもアクセスできるよう権限を変更
sudo chmod 777 /home/ubuntu/share
sambaの設定
sambaをつかうために、「smb.conf」というファイルを編集します。
sudo gedit /etc/samba/smb.conf
ubuntu 22.10 から gedit → gnome-text-editor が標準エディターになっています
また、sudo ではアクセス権の関係でエラーになって開けません スーパーユーザーで行う必要があります
vi ではsudo でも行えます。
sudo vi /etc/samba/smb.conf
gnome-text-editor の場合 スーパーユーザー権限
# gnome-text-editor /etc/samba/smb.conf
24行目あたりに[global]という記述があるので次のようになるよう追記します。
記述しなくても大丈夫
#======================= Global Settings =======================
[global]
dos charset = CP932 # 追記部分
unix charset = UTF-8 # 追記部分
基本的にはそのままで大丈夫です。しかし、ファイルサーバーにアクセスしたい Windowsによっては設定が必要です。
Windows側で「コントロールパネル->システムとセキュリティ->システム->コンピュータ名、ドメインおよびワークグループの設定」で調べることができます。
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = WORKGROUP # 必要があれば書き換える
次は35行目あたりからあるNetworkingの項目です。
記述しなくても大丈夫
#### Networking ####
# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
interfaces = 192.168.XX.0/24 eth0 # 行の初めについていたセミコロンを消す、127.0.0.0/8となっていた部分をネットワークアドレスに書き換える
# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself. However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
bind interfaces only = yes # 行の初めについていたセミコロンを消す
map to guest = bad User # 追記部分
ここで、「interfaces = 192.168.XX.0/24 eth0」という部分をちゃんと書くために「ネットワークアドレス」というものを調べます。ついでに後で使うのでUbuntuを入れているPCのIPアドレスも調べておきます。(ネットワークアドレスとはネットワークそのものを表す特別なIPアドレスです。)
IPアドレスは、Ubuntuのコマンドラインで
ip a
下記はワイヤレス wlp4s0
省略
3: wlp4s0: 省略
省略
inet 192.168.■.■■■/24 brd 192.168.■.255 scope global dynamic noprefixroute wlp4s0
例えば「192.168.11.15/24」のような形で書かれていると思います。.(ドット)で区切られた4組の数字の部分がIPアドレスに相当します。詳しくは説明しませんが、/(スラッシュ)の後の数字は「サブネットマスク数」を表します。
サブネットマスク数が16だったら、IPアドレスの後ろ2組を0にしたものがネットワークアドレス、サブネットマスク数が24だったら、IPアドレスの後ろ1組を0にしたものがネットワークアドレスとなります。
例えば、上のコマンドで調べたIPアドレスが「192.168.11.15/16」だったらネットワークアドレスは「192.168.0.0/16」、「192.168.11.15/24」だったらネットワークアドレスは「192.168.11.0/24」となります。このネットワークアドレスを「interfaces =」のところへ追記するようにしてください(デフォルトでは「127.0.0.0/8」となっていると思います)。
最後に、smb.confの末尾に共有ディレクトリの設定を追記します。
これを記述するとGUIによる共有の変更が出来なくなります。(マシンの再起動後 又は sudo systemctl restart smbd nmbd 後 sudo systemctl enable smbd nmbd)
この記述をすることによりWindows側でドライブ割り当てできるようになります。(共有がhome 配下のみなら問題なく割り当てできるようです。再確認中)
ない場合は、ubuntu側のGUIの制御が有効でWindows側はネットワーク参照からのアクセスのみとなりドライブ割り当てでユーザー認証が出来ません。
[share]
path = /home/ubuntu/share
writeable = yes
guest ok = yes
guest only = yes
create mode = 0666 #0777 を変更 実行可能ファイルになってしまう為
directory mode = 0777
一番上の[share]は表示名です。Windowsなどからアクセスするときに表示される名前で、何に設定しても大丈夫ですがわかりやすいものにしましょう。
次のpathは共有用ディレクトリのパスです。先ほど作ったディレクトリのパスを記入します。
他の部分は説明しませんが、この設定で「同じローカルネットワーク上にあるコンピュータ(同じWi-Fiに繋いでいるコンピュータ)なら誰でもアクセスできる」共有ディレクトリが完成しました。
終了後、コマンドラインへ
testparm
sambaの実行
上記設定が完了したら
sudo systemctl restart smbd nmbd
というコマンドを実行してください。これで smb.confの編集が反映されます。
さらに、Ubuntuの起動時に自動で実行してほしいなら (すでになっている様なので不要かも?)
sudo systemctl enable smbd nmbd
を実行してください。ここまで出来たら一度再起動しましょう。
これで完成です!
Windowsから確認
Windowsのエクスプローラへ、下図のように「¥¥[IPアドレス]」または、¥¥[デバイス名]」と入力し Enterキーを押してください。
で繋がらない場合は ¥¥[IPアドレス]¥share としてみてください
エクスプローラ上に先ほど作成した「share」が出ていれば成功です!
追加の設定:パスワード付き共有ディレクトリを作る
〇グループの作成
※またUbuntuのコマンドラインを使います。
まず以下のコマンドで「グループ」というものを作成します。
sudo groupadd [グループ名]
そして、上記の「sambaのインストール」でpdbeditコマンドを使ってsambaに登録したユーザーを作ったグループに追加します。
sudo usermod -aG [グループ名] [ユーザー名]
〇共有用ディレクトリの設定
sudo mkdir /home/ubuntu/share2
ここでは先ほどまでの例と区別するために新しく share2というディレクトリを作ります(さっきのを流用しても大丈夫です)。
この share2の「所有者」と「所有グループ」を先ほど設定したユーザーとグループに変更します。次のコードを実行。
sudo chown -hR [ユーザー名]:[グループ名] /home/ubuntu/share2
さらに次のコードも実行し、ディレクトリの「アクセス権限」をオーナーとグループのみにフルアクセス権限を付加にします。
sudo chmod 770 /home/ubuntu/share2
〇 smb.confの修正
「sambaの設定」でやった smb.confの編集のうち、最後にやった共有ディレクトリの設定を少し修正します。
[share2]
path = /home/ubuntu/share2
writeable = yes
create mode = 0660 #変更 0770 → 0660
directory mode = 0770
guest ok = no
valid users = @[グループ名]
ちょっとだけ変わっていますが、重要なのは最後の行。この設定によって、「アクセスできるのは[グループ名]に所属しているユーザーのみ」という制限をかけることができます!
ここから先はパスワードなしの時と同じでOKなので省略します。
Windowsから開こうとしたときに「ユーザー名」と「パスワード」を求められたら成功!