ファイル共有サーバーを構築するための 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 がすべてのデータベース テーブルを返す問題の簡単な分析

推薦する

HTML 5.1 学習: 14 の新機能とアプリケーション例

序文ご存知のとおり、HTML5 はインターネット コミュニティ全体に標準を提供する組織である Wor...

さまざまなターミナルで Mac が SSH 経由でリモート サーバーに接続する方法の説明

Macはシェル(ターミナル)SSHを使用してリモートサーバーに接続します前提条件: 接続する必要があ...

Nginx_geo モジュールを使用して CDN スケジュールを設定する方法

NginxのGeoモジュールの紹介geo ディレクティブは、ngx_http_geo_module ...

nginx を使用した負荷分散モジュールの解釈

目次負荷分散に nginx を使用するための 2 つのモジュール:アップストリームはロードノードプー...

丸い角や鋭い角の代わりに文字を使用することに関する研究経験の共有

1. フォントと文字表示の関係左側と右側の鋭角部分は Songti フォントで表示されます: &l...

Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

1.まずnpmをアンインストールする sudo npm アンインストール npm -g 2. ノー...

MySQL でタイムゾーンを表示および変更する方法

今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...

Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装

Docker は、ブリッジ、ホスト、オーバーレイなどの複数のネットワークを提供します。同じ Dock...

ReactでCSSスタイルを動的に変更する2つの方法の詳細な説明

最初の方法: デモとしてボタンをクリックしてテキストを表示または非表示にするクラスを動的に追加します...

TypeScript における列挙型の理解と応用シナリオ

目次1. 何ですか2. 使用数値列挙文字列列挙異種列挙自然3. 応用シナリオ要約する1. 何ですか列...

HTML チュートリアル: HTML 水平線分

<br />このタグを使用すると、画面上に水平線を表示して、ページのさまざまな部分を区切...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...

Vue フィルターの実装と適用シナリオの詳細な説明

1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...

Ubuntu16.04にCUDA9.0をインストールするための詳細なチュートリアル

序文:この記事は、CUDA 9.0 をインストールした経験に基づいています。CUDA 9.0 は現在...

Ubuntuはカーネルモジュールをコンパイルし、その内容はシステムログに反映されます。

目次1.Linuxログインインターフェース2. コードを書く3. Makefileを書く4. コンパ...