「インストール - Samba」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
88行目: 88行目:
     unix charset = UTF-8
     unix charset = UTF-8
     dos charset = CP932
     dos charset = CP932
     workgroup = <ワークグループ名またはドメイン名(Windows等と同じ名前にする)  例. WORKGROUP>
     workgroup = <Windowsネットワーク名またはドメイン名)  例. WORKGROUP>
     server string = Samba Server
     server string = Samba Server %v
     passdb backend = tdbsam
     passdb backend = tdbsam
     printing = cups
     printing = cups
108行目: 108行目:
     socket options = <ソケットプオプション  例. TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192>
     socket options = <ソケットプオプション  例. TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192>
     dns proxy = No
     dns proxy = No
    # アクセス制限(許可する範囲)
    hosts allow = <許可するIPアドレスまたはドメイン名  例. 192.168.1. 127.0. myhost.mynet.edu.au>
  [homes]
  [homes]
     comment = Home Directories
     comment = Home Directories

2022年11月4日 (金) 07:47時点における版

概要

ここでは、Sambaを使用してファイルサーバを構築する。
ネットワークに接続していないと、Sambaをインストールしても外部からアクセスができないので、既存のネットワークに接続すること。
必ず、Linuxを固定IPアドレスに設定すること。(ここでは192.168.1.5とする)


Sambaのインストール

パッケージ管理システムからインストール

最新パッケージリストを取得する。

# CentOS
sudo yum update

# SUSE
sudo zypper update

# Raspberry Pi
sudo apt-get update


Sambaをインストールする。

# CentOS
sudo yum install samba samba-client

# SUSE
sudo zypper install samba samba-client

# Raspberry Pi
sudo apt-get install samba


ソースコードからインストール

Sambaのビルドに必要なライブラリをインストールする。
Kerberos 1.15.1以降が必要となることに注意する。

# CentOS
sudo yum install tar gcc gdb rpcgen docbook-style-xsl dbus-devel readline-devel zlib-devel gnutls-devel systemd-devel \
                 gpgme-devel keyutils-libs-devel krb5-workstation jansson-devel libacl-devel libaio-devel cups-devel \
                 libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools libxml2-devel libxslt \
                 lmdb-devel openldap-devel pam-devel perl perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel \
                 python36-devel python3-cryptography python3-dns python3-gpg python3-markdown

# SUSE
sudo zypper install tar acl attr autoconf bison flex ccache hostname gawk sed rsync pkgconfig htop lcov rpcgen rpcsvc-proto-devel \
                    tree patch procps psmisc rng-tools gcc gdb glib2-devel glibc-locale ncurses-devel readline-devel zlib-devel dbus-1-devel \
                    libicu-devel libcap-devel libpcap-devel libjansson-devel keyutils-devel krb5-server krb5-client krb5-devel \
                    libacl-devel libaio-devel libarchive-devel libattr-devel libblkid-devel libtasn1-devel systemd-devel \
                    libxml2-devel libxslt libxslt-devel docbook_4 docbook5-xsl-stylesheets lmdb lmdb-devel openldap2-devel pam-devel \
                    gnutls-devel gpgme-devel popt-devel cups-devel libbsd-devel libnsl-devel liburing2-devel libbd_dm-devel \
                    perl perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Archive-Tar-Wrapper perl-JSON perl-JSON-XS perl-Test-Base \
                    python3-devel python3-cryptography python3-dnspython python3-gpg python3-Markdown python3-semanage \
                    python3-talloc-devel python3-iso8601 python3-pyasn1 python3-setproctitle policycoreutils-python \
                    libtalloc-devel libcmocka-devel libtdb-devel tracker-devel libnscd-devel libuuid-devel libunwind-devel \
                    xfsprogs-devel glusterfs-devel libtirpc-devel libntirpc-devel libavahi-devel chrpath libcephfs-devel \
                    lsb-release system-user-nobody dnf-utils \
                    bind-utils  # 内部DNSサーバを使用する場合

# Raspberry Pi
# インストールには、BIND DNSサーバを含んでいる
# もし、Sambaにおいて、内部DNSサーバを使用する場合、BINDパッケージは省略できる
# ただし、ダイナミックDNSのサポートを有効にするため、nsupdateを含むパッケージが必要となる
sudo apt-get install acl attr autoconf bison flex pkg-config \
                     build-essential gdb libncurses5-dev libreadline-dev \
                     debhelper dnsutils docbook-xml docbook-xsl xsltproc krb5-user \
                     libacl1-dev libaio-dev libarchive-dev libattr1-dev libblkid-dev libbsd-dev \
                     libcap-dev libcups2-dev libgnutls28-dev nettle-dev libgpgme-dev libjansson-dev \
                     libldap2-dev libpam0g-dev libpopt-dev \
                     perl perl-modules libparse-yapp-perl libjson-perl \
                     python-all-dev python-dev python3-dev python-crypto python-dbg python-dnspython \
                     python3-dnspython python-gpgme python3-gpgme python-markdown python3-markdown \
                     zlib1g-dev liblmdb-dev lmdb-utilsa \
                     bind9utils  # 内部DNSサーバを使用する場合


Sambaの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf samba-<バージョン>.tar.gz
cd samba-<バージョン>


Sambaをビルドおよびインストールする。
ビルドディレクトリを作成する場合、Sambaのビルドに失敗することに注意する。

./configure --prefix=<Sambaのインストールディレクトリ> --enable-cups --with-systemd --systemd-install-services
make -j $(nproc)
make install


Sambaの設定ファイルを作成する。

vi /<Sambaのインストールディレクトリ>/etc/smb.conf


# /<Sambaのインストールディレクトリ>/etc/smb.confファイル

# smb.conf is the main Samba configuration file.
[global]
   unix charset = UTF-8
   dos charset = CP932
   workgroup = <Windowsネットワーク名またはドメイン名)  例. WORKGROUP>
   server string = Samba Server %v
   passdb backend = tdbsam
   printing = cups
   printcap name = cups
   printcap cache time = 750
   cups options = raw
   map to guest = Bad User
   logon path = \\%L\profiles\.msprofile
   logon home = \\%L\%U\.9xprofile
   logon drive = P:
   usershare allow guests = Yes
   security = USER
   smb passwd file = <Sambaのユーザパスワードファイルのパス(smbpasswdコマンドを使用する場合)  例. /<Sambaのインストールディレクトリ>/etc/samba/smbpasswd>
   guest account = nobody
   unix password sync = no
   log file = <Sambaのログファイルのパス  例. /var/log/samba/log.%m>
   max log size = 50
   socket options = <ソケットプオプション  例. TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192>
   dns proxy = No
   # アクセス制限(許可する範囲)
   hosts allow = <許可するIPアドレスまたはドメイン名  例. 192.168.1. 127.0. myhost.mynet.edu.au>
[homes]
   comment = Home Directories
   valid users = %S, %D%w%S
   browseable = No
   read only = No
   inherit acls = Yes
   guest ok = no
[profiles]
   comment = Network Profiles Service
   path = %H
   read only = No
   store dos attributes = Yes
   create mask = 0600
   directory mask = 0700
   guest ok = no
[users]
   comment = All users
   path = /home
   read only = No
   inherit acls = Yes
   veto files = /aquota.user/groups/shares/
[groups]
   comment = All groups
   path = /home/groups
   read only = No
   inherit acls = Yes
   guest ok = no
[printers]
   comment = All Printers
   path = /var/tmp
   printable = Yes
   create mask = 0600
   browseable = No
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/drivers
   write list = @ntadmin root
   force group = ntadmin
   create mask = 0664
   directory mask = 0775
[<共有ディレクトリ名  例. Share>]
  comment = Samba on SUSE
  path = <共有ディレクトリのパス  例. /home/user-name/Public>
  read only = no
  browsable = yes
  public = yes
  guest ok = yes
  #available = yes
  #valid users = <Sambaのユーザ名1> <Sambaのユーザ名2> <Sambaのユーザ名3> ...


SambaのSystemdサービスファイルを、/etc/systemd/systemディレクトリにコピーする。

sudo cp /<Sambaのインストールディレクトリ>/lib/systemd/system/* /etc/systemd/system


SambaのSystemdサービスファイルを読み込む。

sudo systemctl daemon-reload


Sambaを起動する。

sudo systemctl start smb nmb


もし、Sambaが起動しない場合、/<Sambaのインストールディレクトリ>/var/run/ncalrpcディレクトリを削除する。

sudo rm -r /<Sambaのインストールディレクトリ>/var/run/ncalrpc



Sambaの設定

ホームディレクトリにSambaで使用する共有ディレクトリを作成する。

mkdir ~/Common


Samba の設定ファイルであるsmb.confを編集する。

sudo vi /etc/samba/smb.conf


smb.confの末尾に以下の記述を追加して保存する。

# [global]セクションの直下に、以下の2行を追記する
unix charset = UTF-8
dos charset = CP932

# [global]セクションのworkgroupキー
# ドメインを設定している場合は変更する
workgroup = WORKGROUP

# [global]セクションのhosts allowキーおよび各共有設定のセクションに追記
# アクセス制限を行う場合は、アクセスを許可するIPアドレスを指定する
hosts allow = 192.168.2. 192.168.1.20/24

# 126行目あたり : 認証なしでアクセスする場合は追記する
security = <ユーザ名>
passdb backend = tdbsam
map to guest = Bad User

# 末尾に以下を追記する
[Common]
comment = Shared Directory on Samba
path = /home/<ユーザ名>/Common
read only = no
browsable = yes
public = no
guest ok = no
available = yes
valid users = <Sambaに登録したユーザ名1> <Sambaに登録したユーザ名2> <Sambaに登録したユーザ名3> ...
#force user = <サーバのユーザ名>


設定項目の意味を、以下に示す。

  • available, valid users
    以下の2つをセットで設定する時、hogeユーザ以外はログインできない。
    available = yes
    valid users = hoge

  • force user
    どのユーザでログインしても、内部的にhogeでログインして接続する。この時、そのユーザ名とパスワードが求められる。
    force user = hoge

  • public, guest ok
    パスワードなしでアクセスするためguestを許可する。publicキーとguest okキーは同じ意味のキーである。
    public = yes
    guest ok = yes

  • map to guest
    Sambaにアクセスする時、有効なユーザとして認証されなかった場合の動作を指定するパラメータである。

    設定値を以下に示す。
    • Never
      不正なパスワードによるユーザのログイン要求を拒否して、ゲスト認証は許可しない。
    • Bad User
      存在するユーザに対する不正なパスワードによるログイン要求は拒否する。
      存在しないユーザを指定された場合は、ゲスト認証であるとみなして、guest accountパラメータに定義されたユーザでログインする。
    • Bad Password
      存在しないユーザを指定された場合に加えて、存在するユーザに対する不正なパスワードによるログイン要求も、ゲスト認証であるとみなして、
      guest accountパラメータに定義されたユーザでログインする。
    • Bad Uid
      Sambaがドメインモードのセキュリティで構成されている環境において、認証が成功したにも関わらずUNIX側のユーザアカウントが存在しない場合に、
      guest accountパラメータに定義されたユーザでログインする。
      ただし、Sambaでwinbinddが機能している場合、WindowsのユーザがUnixのユーザとして動作できるようになるため、
      認証に成功したにも関わらずUNIX側のユーザアカウントが存在しない、ということは発生しない。
      そのため、winbinddが機能するSamba 3以降ではBad Uidはほとんど利用されていない。

      なお、Samab 2.x系では、Bad Uidがデフォルトとして設定されている。


Sambaを再起動する。

sudo systemctl restart smbd
sudo systemctl restart nmbd


ファイアーウォールを有効にしている場合は、Sambaサービスの許可が必要である。

sudo firewall-cmd --permanent --add-service=samba
または
sudp firewall-cmd --permanent --add-port=445/tcp

sudo firewall-cmd --reload


SELinuxを有効にしている場合は、SELinuxコンテキストの変更が必要である。

sudo setsebool -P samba_enable_home_dirs on
sudo restorecon -R /home/<ユーザ名>/Common



動作の確認

エクスプローラまたは[ファイル名を指定して実行]にて、
下記のように、IPアドレスまたはホスト名を入力して、共有ディレクトリが表示できるか確認する。

\\192.168.1.5
または
\\RASPBERRYPI



Sambaへのユーザ登録

Sambaは独自でユーザの管理をするので、Sambaへのユーザ登録をすることができる。

Sambaと通常サーバは、別々にユーザを管理するが、同一のユーザ名とパスワードで問題ない。
クライアントからSambaにアクセスしたときに、認証画面において、ユーザ名とパスワードを入力することになる。

Sambaのユーザ名とパスワードを登録する方法を、以下に示す。
ただし、登録できるユーザは、既にサーバに存在するユーザのみである。

また、Sambaのユーザ登録のコマンドは、Samba2.xではsmbpasswdコマンド、Samba3.xではpdbeditコマンドとなる。

# Sambaのユーザ名の一覧を表示
sudo pdbedit -L

# 詳細なユーザ名の一覧を表示
sudo pdbedit -L -v

# ユーザを登録する (パスワードを2回入力して設定する)
sudo pdbedit -a <ユーザ名>

# Sambaのユーザを削除する
sudo pdbedit -x <ユーザ名>


Sambaユーザのパスワードを変更する場合、smbpasswdコマンドを使用する。

sudo smbpasswd <ユーザ名>


次に、/etc/samba/smb.confファイルを以下のように編集する。

sudo vi /etc/samba/smb.conf


# /etc/samba/smb.confファイル

public = no
# force user = pi  # コメントする
valid users = <登録するユーザ名>


最後に、Sambaを再起動する。

sudo systemctl restart smbd
sudo systemctl restart nmbd


Sambaユーザのパスワードがサーバとは別管理になる理由は、
Linuxのパスワード管理の暗号化方式と、Sambaのパスワード管理の暗号化方式が異なるためである。
Sambaは、Windowsのパスワード管理の暗号化に合わせているため、同一のユーザ名とパスワードであっても、Sambaに登録をする。

暗号化方式を統一することもできるが、セキュリティ面から標準の設定の方がよい。