ファイル共有サーバーを構築するための samba + OPENldap の詳細な説明

ファイル共有サーバーを構築するための samba + OPENldap の詳細な説明

ここでは、samba (ファイル共有サービス) v4.9.1 + OPENldap (バックエンド データベース ソフトウェア) v2.4.44 + smbldap-tools (バックエンド データベース管理ソフトウェア) v0.9.11 + CentOS7 を使用します。 相違がある場合は、部分的に問題がある可能性があります。

注記:

  • samba の機能はファイル共有だけではありません。Windows ドメイン メンバーや Windows ドメイン コントローラーとしても機能します。 samba は単なるファイル共有サービスだと考えないでください。
  • ファイルの権限に直接関係する samba のファイル共有機能を使用するため、samba で使用するユーザーは Linux で検索可能である必要があります。 OPENldap は samba のバックエンド データベースとして使用されるため、OPENldap 内のユーザー情報を照会するように Linux を構成する必要もあります。つまり、NSS を構成する必要があります。 NSS 設定に関しては、smbldap-tools が ldap データベースを初期化した後に NSS 設定を完了する必要があります。ご注意ください。 ! !
  • Samba は認証モジュールとして PAM を使用し、独自の認証プログラムを使用します。CentOS でコンパイルすると、独自の認証プログラムを使用するように設定されているため、PAM の設定は省略できます。
  • OPENldap でユーザーを設定してシステムにログインしたい場合は、この記事「LDAP ユーザー認証を使用するように Linux を設定する」を参照してください。この記事の設定はこの記事の設定と異なるので注意してください。 ! !

初期設定

yum リポジトリとネットワーク構成は省略されます。

yum -y samba openldap-servers openldap-clients smbldap-tools nss-pam-ldapd をインストールします

OPENldap サービスを構成する

ここでは、簡単なサービス設定のみを行います。データベース設定は、smbldap-tools を使用して行います。OPENldap についてよくわからない場合は、こちらの記事をお読みください: 「OPENLDAP サービスの構築と事後管理」

ここで、すべての OPENldap 構成をクリアし、再設定します。

# 復元できない場合に備えて、まずファイルをバックアップします mkdir /root/back
tar -Jcvf /root/back/slapd.config-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /etc/openldap/slapd.d/
tar -Jcvf /root/back/slapd.data-`date '+(%Y.%m.%d_%H:%M:%S)'`.tar.xz /var/lib/ldap/
# 次に設定ファイルを削除します rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
# samba スキーマ ファイルをコピーします cp /usr/share/doc/samba-4.9.1/LDAP/samba.ldif /etc/openldap/schema/

ここで、 /usr/share/openldap-servers/slapd.ldif share/openldap-servers/slapd.ldif から設定ファイルをコピーし、次のように変更しました。主な変更点は、baseDN(サフィックス)、OPENLDAPTLS、olcRootPW(パスワードはslappasswdによって生成され、この記事のパスワードは123456です)であり、以下が含まれます。

# ファイル: /tmp/slapd.ldif

dn:cn=設定
オブジェクトクラス: olcGlobal
cn: 設定
olcArgsファイル: /var/run/openldap/slapd.args
olcPidファイル: /var/run/openldap/slapd.pid

dn: cn=スキーマ、cn=構成
オブジェクトクラス: olcSchemaConfig
cn: スキーマ

インクルード: ファイル:///etc/openldap/schema/core.ldif
インクルード: ファイル:///etc/openldap/schema/cosine.ldif
インクルード: ファイル:///etc/openldap/schema/nis.ldif
インクルード: ファイル:///etc/openldap/schema/inetorgperson.ldif
インクルード: ファイル:///etc/openldap/schema/samba.ldif

dn:olcDatabase=フロントエンド、cn=config
オブジェクトクラス: olcDatabaseConfig
オブジェクトクラス: olcFrontendConfig
olcデータベース:フロントエンド

dn: olcDatabase=config、cn=config
オブジェクトクラス: olcDatabaseConfig
olcデータベース:config
olcアクセス: * 
 dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" で管理 
 * なし

dn:olcDatabase=モニター、cn=構成
オブジェクトクラス: olcDatabaseConfig
olcデータベース: モニター
olcアクセス: * 
 dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" で読み取り 
 dn.base="cn=Manager,dc=black,dc=com" による読み取り 
 * なし

dn:olcデータベース=hdb、cn=config
オブジェクトクラス: olcDatabaseConfig
オブジェクトクラス: olcHdbConfig
olcデータベース: hdb
olcサフィックス: dc=black、dc=com
olcRootDN: cn=Manager、dc=black、dc=com
olcルートパスワード: {SSHA}l1vBI/HOMKLEiQZgcm3Co+hFQI68rH1Q
olcDbディレクトリ: /var/lib/ldap
olcDbIndex: オブジェクトクラス eq,pres
olcDbIndex: ou、cn、メール、姓、名 eq、pres、sub、uid

構成に基づいてサーバー構成ファイルを生成する

slapadd -F "/etc/openldap/slapd.d/" -b "cn=config" -l /tmp/slapd.ldif
# ファイルの所有者はまだルートなので、openldapに戻す必要があることに注意してください。
chown -R ldap:ldap /etc/openldap/slapd.d/*
# 次にサービスを起動します systemctl start slapd

_#################### 100.00% 予想時間 経過なし 高速なし!
DBを閉じています...

注意: ここでは OPENldap のサービス設定部分のみ設定されており、OPENldap のデータベースは設定されていません。次の点を再度強調しておきます。

Sambaの設定

ここでは、samba と OPENldap の使用をテストするだけなので、複雑なファイル共有設定は行いません。テストでは、1 人のユーザーのホーム ディレクトリのみを共有します。

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

[グローバル]
 workgroup = MYGROUP #共有グループ名を指定します。
 サーバー文字列 = Samba サーバーバージョン %v
 ログファイル = /var/log/samba/log # ログセキュリティ = user # セキュリティレベルをUserとして指定します
 passdb backend = ldapsam:ldap://127.0.0.1 # ldapsam を使用するために passdb のバックエンドデータベースを指定します
 ldap suffix = dc=black,dc=com # ldapのサフィックスを指定します
 ldap user suffix = ou=People # ユーザーのサフィックス セグメント ou=People を指定します。これは前のサフィックスと結合されます。
 ldap group suffix = ou=Group # 上記と同じで、ユーザー グループを指定します。
 ldap admin dn = cn=Manager,dc=black,dc=com # ldap サービスのクエリに使用する管理者ユーザーを指定します。 ldap ssl = no # SSL 暗号化を使用しないように指定します。
 load printings = no #共有プリンターをロードしないように指定します。
[家]
 コメント = ホームディレクトリ
 閲覧可能 = いいえ
 書き込み可能 = はい
 マスクを作成 = 0600
 ディレクトリマスク = 700
smbpasswd -w 123456 # LDAP サービスへの接続に使用されるユーザー パスワードを保存します。 ! !これは非常に重要です。そうでないと、smb サービスを開始できません。

sambaサービスを開始する

systemctl スタート nmb
systemctl smb を起動する

smbldap-tools の設定

ここでは、smbldap-tools を使用して samba サービスに必要なデータ情報を迅速に完了し、smblda-tools を使用してユーザー セグメントを管理します。ただし、smbldap-tools の欠点の 1 つは、ローカル ユーザーが同じ UID または GID を持っているかどうかを考慮に入れないことです。競合が発生する可能性があるので、この点に注意してください。

smbldap は /etc/samba/smb.conf からいくつかの情報を読み取るので、最初に samba を設定し、次に smbldap-tools サービスを設定する必要があります。

smbldap-config # smbldap-tools の設定を構成します。ここでは、簡単な設定に smbldap-conifg を使用します。 

以下の設定手順はここでは省略しますので、わからない場合はデフォルトで問題ありません。

smbldap-populate # OPENldap データベースの設定を初期化します。 

後でテストするために、ここで別のユーザーを作成します。

smbldap-useradd -a -m User1 # ユーザー User2 を追加します
# -a: 追加されたユーザーの種類が Windows であることを指定して、samba がユーザーを認識できるようにします。
# -m: ユーザーのホームディレクトリを作成することを指定します。
smbldap-passwd User1 #ユーザーのパスワードを変更する

このユーザーのパスワード変更プロセスはここでは省略します。

これで、OPENldap のデータベースの初期化が完了し、OPENldap 内のコンテンツを照会できるようになります。下の図に示すように、これはsmbldap-populateによって作成されたコンテンツです。次の図はApache Directory Studioを示しています。興味があれば、「Apache Directory Studioの簡単な使い方」を学習してください。

図では、UID = root と nobody のユーザーが確認できます。これらの特別なユーザーにはサーバーにログインしてほしくないので、次の設定では、フィルターを使用してこれらの 2 人のユーザーを除外します。

NSS 構成

ここで主に設定する必要があるのは NSS 設定です。NSS は LDAP 要求を nslcd に転送し、nslcd は OPENldap でユーザー情報を照会します。

まず、NSS を設定します。passwd セクションと group セクションに ldap 認証を追加するだけです。

# ファイル: /etc/nsswitch.conf

passwd: ファイル ldap
シャドウ: ファイル
グループ: ファイル LDAP
ホスト: ファイル dns myhostname
ブートパラメータ: nisplus [NOTFOUND=return] ファイル
イーサ: ファイル
ネットマスク: ファイル
ネットワーク: ファイル
プロトコル: ファイル
rpc: ファイル
サービス: ファイル sss
ネットグループ: nisplus sss
公開鍵: nisplus
自動マウント: ファイル nisplus sss
エイリアス: ファイル nisplus

次に、nslcd を設定します。nslcd はデーモンとして実行されるため、設定後に再起動する必要があることに注意してください。

# ファイル:/etc/nslcd.conf

uid-nslcd
gid ldap
uri ldap://127.0.0.1/ # ldap URL アドレス base dc=black,dc=com # ベース dn パス binddn cn=Manager,dc=black,dc=com # 接続するユーザーを指定します bindpw 123456 # パスワードを指定します ssl no # SSL 暗号化接続を使用しないように指定します。
filter passwd (&(objectClass=posixAccount)(uidNumber>=1000)) # passwd のフィルター ルールを記述します。
filter group (&(objectClass=posixGroup)(gidNumber>=500)) # 上記と同じ、グループは次のように記述されます
コピー
chmod 600 /etc/nslcd.conf # 構成ファイルの権限は非常に重要です。権限がないと、サービスを開始できません。
systemctl start nslcd # nslcd サービスを開始します。

以下のNSS構成が利用可能かどうかをテストします

getent パスワード ユーザー1

ユーザー1:*:1001:513:システムユーザー:/var/smb/User1:/bin/bash

上記のように、設定した NSS および OPENldap サービスが有効になっています。次に、samba を設定して、利用できるようにしてみましょう。

Samba 権限設定

よく見ると、システム内のユーザーとの混乱を避けるために、ユーザーのホーム ディレクトリの場所を/var/smbに保存していることがわかります。このように、SELinux を介して samba を分離し、 /homeパス以下のリソースへのアクセスを禁止することができます。詳細については、次の操作を参照してください。

# ユーザーのホームディレクトリは、上記の smbldap-useradd コマンドによって作成されました。
# これで SELinux を直接設定できるようになりました。
semanage fcontext -a -t samba_share_t '/var/smb(/.*)?' # /var/smb パスのデフォルト タイプを変更します。ここでは、samba 共有で使用されるタイプを使用します。SELinux は、デフォルトでこのタイプへのアクセスを許可します。# samba が /home にアクセスできるようにするには、bool 値 samba_enable_home_dirs を有効にする必要があります。
# ただし、ここでは samba_share_t タイプを使用しているため、bool 値を有効にする必要はなく、samba は /var/smb と samba に必要なその他のファイルにのみアクセスできます。
restorecon -R /var/smb/ # 次に、/var/smb ディレクトリの下の SELinux タイプをリセットします。
コピー
# ここで samba をテストできます smbclient -L //127.0.0.1/ -U User1 

ここで、User1 はすでにログインして共有ディレクトリを照会できることがわかります。

次に、ここで直接ログインし、いくつかのファイルをアップロードしてテストを実行します。


これで、Samba ファイル共有が完了しました。


要約する

上記は、samba + OPENldap を使用してファイル共有サーバーを構築する方法の詳細な説明です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。

以下もご興味があるかもしれません:
  • Samba を使用して Linux サーバー上で共有ファイル サービスを構築する方法

<<:  要素のフォーム要素の使用の概要

>>:  MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析

推薦する

Vueデータ監視の原理の詳細な説明

<本文> <div id="ルート"> <h1&...

MySQL マスタースレーブ同期メカニズムと同期遅延問題追跡プロセス

序文DBA として、仕事中に MySQL マスターとスレーブの同期遅延の問題に遭遇することがよくあり...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

MySQLとNavicatプレミアムのインストールと設定の詳細な手順

前提条件: Mac、zsh がインストールされ、bash のときに mysql がダウンロードされ、...

MySQLインデックスに関する重要な面接の質問をいくつか共有します

序文インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取...

CentOSにDockerをインストールする方法

ここでは比較的簡単なインストール方法のみを紹介します。 1. yumを使用してインストールするyum...

JQueryはアニメーション効果の非表示と表示を実装します

この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...

ホストサービスにアクセスするDockerでのサービスの実装

目次1. シナリオ2. 解決策3. 結論4. 参考文献1. シナリオ日常の開発およびテスト作業には ...

CentOS7 で MySQL データベースにリモート接続できない理由と解決策

序文最近、仕事で問題が発生しました。 Centos7 システムでは MySQL にリモート接続できな...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)

上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject...

Vue でキープアライブを使用した後にキャッシュをクリアする方法

キープアライブとは何ですか?通常の開発では、コンポーネントによっては複数回初期化する必要のないものも...

ulとliの基本的な使用法の分析

ナビゲーション、少量のデータテーブル、中央揃え<!DOCTYPE html PUBLIC &q...

検索エンジンのウェブサイトの入り口の無料コレクション

1: Baiduウェブサイトログイン入口ウェブサイト: http://www.baidu.com/s...

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な ...

JavaScript はマウスのドラッグを実装して div のサイズを調整します

この記事では、マウスをドラッグしてdivのサイズを調整するJavaScriptの具体的なコードを参考...