Samba

WindowsのSMB/CIFSプロトコルをLinux/UNIXで実装したファイルサーバー。Active Directory統合、プリンタ共有、ドメインコントローラー機能を提供。

ファイルサーバーSMBCIFSWindows共有Active DirectoryLinuxドメインコントローラー

サーバー

Samba

概要

SambaはWindowsのSMB/CIFSプロトコルをLinux/UNIX系システムで実装したオープンソースのファイルサーバーソフトウェアです。LinuxサーバーとWindowsクライアント間でシームレスなファイル共有を可能にし、Active Directory統合、プリンタ共有、ドメインコントローラー機能を提供します。GPL v3ライセンスで公開されており、企業環境におけるハイブリッドネットワークの標準的なソリューションとして幅広く採用されています。バージョン4でActive Directory Domain Controller機能を完全実装し、WindowsドメインとLinuxシステムの完全統合を実現しています。

詳細

Samba 2025年版は、クロスプラットフォームファイル共有の決定版として確固たる地位を維持しています。25年以上の開発実績により成熟したプロトコル実装と優れた安定性を誇り、エンタープライズ環境で広く信頼されています。SMB/CIFSプロトコルの完全な実装により、Windowsクライアントからは透明にLinuxサーバーのリソースにアクセス可能。Active Directory統合により、既存のWindowsドメイン環境に完全に統合でき、シングルサインオン(SSO)、集中認証、グループポリシー管理が実現できます。プリンタ共有、ファイルロック、アクセス制御リスト(ACL)、暗号化通信など、企業級のファイルサーバー機能を包括的にサポートします。

主な特徴

  • 完全なSMB/CIFS実装: Windows環境との透明な統合
  • Active Directory統合: ドメイン参加、SSO、グループポリシー対応
  • ドメインコントローラー機能: Samba 4による完全なAD DC実装
  • 高度なセキュリティ: Kerberos認証、LDAP統合、ACL制御
  • プリンタ共有: CUPS統合によるネットワークプリンタ共有
  • 柔軟な設定: 詳細なアクセス制御と共有設定オプション

メリット・デメリット

メリット

  • Linux環境でのWindowsファイル共有標準として圧倒的な普及率
  • 既存のWindows Active Directory環境への完全統合が可能
  • オープンソースライセンスによる低コストでの企業導入
  • 豊富なドキュメントとコミュニティサポート
  • 高い安定性と実績によるエンタープライズ環境での信頼性
  • ハイブリッドクラウド環境でのファイル共有標準

デメリット

  • 初期設定とActive Directory統合に専門知識が必要
  • Windowsドメイン環境に依存する機能が多い
  • 大規模環境でのパフォーマンスチューニングが複雑
  • バージョンアップ時の設定互換性に注意が必要
  • セキュリティ設定の複雑さによる設定ミスのリスク
  • 他のプロトコル(NFS等)との混在環境での管理複雑性

参考ページ

書き方の例

インストールと基本セットアップ

# Ubuntu/Debianでのインストール
sudo apt update
sudo apt install samba samba-common-bin

# CentOS/RHEL/Fedoraでのインストール
sudo dnf install samba samba-client samba-common

# サービス状態確認
sudo systemctl status smbd nmbd

# サービス有効化・起動
sudo systemctl enable smbd nmbd
sudo systemctl start smbd nmbd

# バージョン確認
samba --version

# 設定ファイルの構文チェック
testparm

基本的な共有設定(/etc/samba/smb.conf)

# グローバル設定
[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = fileserver
   security = user
   map to guest = bad user
   dns proxy = no
   
   # 日本語ファイル名対応
   unix charset = UTF-8
   
   # ログ設定
   log file = /var/log/samba/log.%m
   max log size = 1000
   log level = 0 auth:2 sam:2

# パブリック共有(認証不要)
[public]
   comment = Public Share
   path = /srv/samba/public
   browsable = yes
   writable = yes
   guest ok = yes
   read only = no
   force create mode = 0666
   force directory mode = 0777

# プライベート共有(認証必要)
[private]
   comment = Private Share
   path = /srv/samba/private
   browsable = yes
   writable = yes
   guest ok = no
   valid users = @sambausers
   force create mode = 0664
   force directory mode = 0775
   create mask = 0664
   directory mask = 0775

# ユーザーホームディレクトリ
[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = %S

ユーザー管理とセキュリティ設定

# Sambaユーザーグループ作成
sudo groupadd sambausers

# システムユーザー作成
sudo useradd -M -d /srv/samba/users/john -s /usr/sbin/nologin john
sudo usermod -a -G sambausers john

# Sambaパスワード設定
sudo smbpasswd -a john
sudo smbpasswd -e john  # ユーザー有効化

# ユーザー一覧表示
sudo pdbedit -L

# ユーザー詳細情報表示
sudo pdbedit -u john -v

# ユーザー削除
sudo smbpasswd -x john
sudo userdel john

# 共有ディレクトリ作成と権限設定
sudo mkdir -p /srv/samba/{public,private}
sudo chmod 777 /srv/samba/public
sudo chmod 775 /srv/samba/private
sudo chown -R root:sambausers /srv/samba/private

# SELinux設定(CentOS/RHEL)
sudo setsebool -P samba_enable_home_dirs on
sudo setsebool -P samba_export_all_rw on
sudo semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
sudo restorecon -R /srv/samba

Active Directory統合設定

# 必要パッケージインストール(Ubuntu)
sudo apt install krb5-user krb5-config winbind

# Kerberos設定(/etc/krb5.conf)
cat > /etc/krb5.conf << 'EOF'
[libdefaults]
    default_realm = COMPANY.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true

[realms]
    COMPANY.LOCAL = {
        kdc = dc1.company.local
        admin_server = dc1.company.local
    }

[domain_realm]
    .company.local = COMPANY.LOCAL
    company.local = COMPANY.LOCAL
EOF

# Active Directory参加設定(/etc/samba/smb.conf)
cat > /etc/samba/smb.conf << 'EOF'
[global]
   security = ADS
   realm = COMPANY.LOCAL
   workgroup = COMPANY
   winbind separator = +
   winbind enum users = yes
   winbind enum groups = yes
   winbind use default domain = yes
   winbind nested groups = yes
   winbind refresh tickets = yes
   winbind offline logon = true
   template shell = /bin/bash
   template homedir = /home/%D+%U
   idmap config * : backend = tdb
   idmap config * : range = 10000-299999
   idmap config COMPANY : backend = rid
   idmap config COMPANY : range = 300000-999999
EOF

# ドメイン参加
sudo net ads join -U administrator

# Winbind設定
sudo systemctl enable winbind
sudo systemctl start winbind

# NSS設定(/etc/nsswitch.conf)
sudo sed -i 's/passwd:.*compat/passwd: compat winbind/' /etc/nsswitch.conf
sudo sed -i 's/group:.*compat/group: compat winbind/' /etc/nsswitch.conf

# AD ユーザー確認
wbinfo -u
wbinfo -g
getent passwd COMPANY+administrator

高度な設定とパフォーマンスチューニング

# 高パフォーマンス設定(/etc/samba/smb.conf)
[global]
   # プロトコル設定
   min protocol = SMB2_10
   max protocol = SMB3_11
   
   # パフォーマンス調整
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=524288 SO_SNDBUF=524288
   read raw = yes
   write raw = yes
   max xmit = 65535
   dead time = 15
   getwd cache = yes
   
   # ロック設定
   kernel oplocks = no
   level2 oplocks = yes
   oplocks = yes
   
   # VFS モジュール
   vfs objects = acl_xattr, catia, streams_xattr
   
   # 暗号化設定
   smb encrypt = desired
   
   # ログ設定
   log level = 1 auth:2 winbind:2

# 高速共有設定例
[fastshare]
   comment = High Performance Share
   path = /srv/samba/fast
   read only = no
   browseable = yes
   
   # パフォーマンス最適化
   use sendfile = yes
   aio read size = 16384
   aio write size = 16384
   aio write behind = true
   
   # キャッシュ設定
   write cache size = 262144
   
   # 同期設定
   sync always = no
   strict sync = no
   
   # ACL設定
   inherit acls = yes
   inherit permissions = yes
   map acl inherit = yes

モニタリングとトラブルシューティング

# 接続状況確認
sudo smbstatus

# 共有一覧表示
smbclient -L localhost -U%

# 特定共有への接続テスト
smbclient //localhost/public -U%

# 設定ファイルテスト
testparm -s

# ログ監視
sudo tail -f /var/log/samba/log.smbd
sudo tail -f /var/log/samba/log.nmbd

# パフォーマンス統計
sudo smbstatus --processes
sudo smbstatus --locks

# ネットワーク診断
sudo netstat -tlnp | grep :445
sudo netstat -tlnp | grep :139

# ファイアウォール設定(UFW)
sudo ufw allow samba

# ファイアウォール設定(firewalld)
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

# プロセス管理
sudo systemctl reload smbd nmbd winbind
sudo systemctl restart smbd nmbd winbind

# Active Directory接続確認
net ads testjoin
wbinfo -t
kinit administrator
klist

セキュリティ強化とベストプラクティス

# SSL/TLS証明書設定
sudo mkdir -p /etc/samba/tls
sudo openssl req -new -x509 -days 365 -nodes \
    -out /etc/samba/tls/smbd.pem \
    -keyout /etc/samba/tls/smbd.key

# 証明書権限設定
sudo chmod 600 /etc/samba/tls/smbd.key
sudo chmod 644 /etc/samba/tls/smbd.pem

# セキュリティ設定追加(/etc/samba/smb.conf)
cat >> /etc/samba/smb.conf << 'EOF'

# TLS設定
tls enabled = yes
tls keyfile = /etc/samba/tls/smbd.key
tls certfile = /etc/samba/tls/smbd.pem

# セキュリティ強化
ntlm auth = disabled
lanman auth = no
client plaintext auth = no
client ntlmv2 auth = yes
client use spnego = yes

# アクセス制御
restrict anonymous = 2
null passwords = no
obey pam restrictions = yes

# 監査ログ
full_audit:prefix = %u|%I|%m|%S
full_audit:success = open opendir
full_audit:failure = all
full_audit:facility = LOCAL7
full_audit:priority = NOTICE
EOF

# 定期バックアップスクリプト例
cat > /etc/cron.daily/samba-backup << 'EOF'
#!/bin/bash
# Samba設定バックアップ
BACKUP_DIR="/backup/samba/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# 設定ファイルバックアップ
cp -r /etc/samba/ $BACKUP_DIR/
cp /etc/krb5.conf $BACKUP_DIR/
cp /etc/nsswitch.conf $BACKUP_DIR/

# ユーザーデータベースバックアップ
tdbbackup -s .bak /var/lib/samba/private/passdb.tdb
cp /var/lib/samba/private/passdb.tdb.bak $BACKUP_DIR/

# 古いバックアップ削除(30日保持)
find /backup/samba/ -type d -mtime +30 -exec rm -rf {} \;
EOF

chmod +x /etc/cron.daily/samba-backup