ファイル共有サーバーを構築するための 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プロジェクトでlessを使用するためのヒント

目次序文1. スタイルの浸透1. パターン浸透とは何ですか? 2. 使い方は? 2. ミキシング1....

CSS3セレクターの新機能の実装

目次基本的なセレクタ拡張属性セレクタ疑似クラスと疑似要素セレクター基本的なセレクタ拡張1. 子要素セ...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

フォームデータを取得するための Node.js メソッドの 3 つの例

序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...

HTML タグ マーキーを使用してスクロール効果を実現する簡単な方法 (必読)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

Linux ユーザー状態とカーネル状態間の通信方法の詳細な説明

CPU 権限の制限により、Linux ユーザー状態とカーネル状態間の通信は、プロセス間通信を使用した...

mysql-connector-java.jar パッケージのダウンロード プロセスの詳細な説明

mysql-connector-java.jar パッケージのチュートリアルをダウンロードします: ...

CSS でフッターの「下部吸収」効果を実現

よく遭遇する問題: 下部の要素を「下部に貼り付ける」効果を CSS でどのように実現するか。この記事...

JavaScript継承のさまざまな方法とメリット・デメリットを詳しく解説

目次1. プロトタイプチェーン継承2. コンストラクタの借用(古典的な継承) 3. 組み合わせ継承4...

プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...

あなたをエキスパートに見せるための 13 個の JavaScript ワンライナー

目次1. ランダムなブール値( true / false )を取得する2. 指定された日付が営業日で...

MySQL で浮動小数点データを文字データに変換するときに起こりうる問題の詳細な説明

序文この記事は主に、MySQL で浮動小数点型を文字型に変換するときに発生する問題を紹介します。これ...

ドロップダウンメニュー効果を実現するJavaScript

参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...

CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

序文最近、CentOS 7 で MySQL 5.7.23 をアップグレードする際に落とし穴を発見しま...