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