はじめに
管理するサーバが多くなってくるとユーザ管理の手間が増えます。
3台以上は管理コストが無視できなくなったので、OpenLDAPを導入して設定することにしました。
OpenLDAPとの連携にSSSDを使い、sudoとLDAPS(LDAP over SSL/TLS)を使えるようにします。
環境
Debian bullseye 64bit OpenLDAP(slapd) 2.4.57 SSSD 2.4.1-2
Tree構成は以下の通りです。
nd ┣ -- user ┣ -- testuser ┣ -- group ┣ -- testgroup ┣ -- SUDOers ┣ -- defaults ┣ -- testuser ┣ -- policies ┣ -- defaults
サーバの設定
OpenLDAPをインストールして、管理者パスワードとドメイン構成要素(dc)を設定します。
今回はドメイン構成要素を簡単にするためにndにしています。
また、簡単な追加や修正はldapviを使います。
ldapviについては「debianmeetingresume201303.pdf」が参考になるのでググってください。
sudo apt install slapd ldap-utils ldapvi
再設定する場合は、以下のコマンドを実行します。
sudo dpkg-reconfigure slapd
ldapviで呼び出すデフォルトのエディタをviに変更します。
update-alternatives --config editor
設定の確認や細かな修正はldapviで行います。
ldapviで更新すると即時反映されるのでslapdの再起動が不要です。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config
アクセス権の設定
Debianの場合、管理者adminが設定されています。
このadminとテストユーザのアクセス権などを設定します。
ldapviで編集後にwqで終了してから「y」を選択すると保存して終了します。
その他には「e」でエディタに戻る、「q」でキャンセルなどがあります。
今回は「debianmeetingresume201303.pdf」と同様に以下のポリシーで設定します。
・パスワード以外のデータ参照はanonymousで可能
・データの更新はrootDNのみ行える
・パスワードのみ自身で変更可能
sudo ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config
viで編集するので「Shift + g」で最下行まで移動します。
「11 olcDatabase={1}mdb,cn=config」の項目に「olcAccess」があるので、以下のように修正します。
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=nd" write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=nd" write by * read olcAccess: {3}to dn.subtree="dc=nd" by self read by * read olcAccess: {4}to * by * none
設定を確認します。
このコマンドではldapsearchを実行しなくても、全ての設定を確認することができます。
sudo slapcat
Schemaの登録
インストール時のデフォルトは以下です。
'cn={0}core.ldif' 'cn={1}cosine.ldif' 'cn={2}nis.ldif' 'cn={3}inetorgperson.ldif'
パスワードのSchemaを登録します。
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif
設定を確認します。
sudo ls /etc/ldap/slapd.d/cn\=config/cn\=schema/ 以下、結果。 'cn={0}core.ldif' 'cn={2}nis.ldif' 'cn={4}ppolicy.ldif' 'cn={1}cosine.ldif' 'cn={3}inetorgperson.ldif'
ouの追加
user、group、policiesを追加します。
policiesはパスワードのポリシーのことです。
sudo mkdir /etc/ldap/myldif cd /etc/ldap/myldif sudo vi /etc/ldap/myldif/init.ldif dn: ou=user,dc=nd objectClass: organizationalUnit ou: user dn: ou=group,dc=nd objectClass: organizationalUnit ou: group dn: ou=policies,dc=nd objectClass: top objectClass: organizationalUnit ou: policies
反映させます。
sudo ldapadd -x -D cn=admin,dc=nd -W -f init.ldif
確認します。
ldapsearch -x -LLL -b "dc=nd" "(objectClass=*)"
cnの追加
テスト用のユーザとグループを追加します。
初めにユーザのパスワードを生成し、「testuser-add.ldif」のuserPasswordの項目に貼り付けます。
slappasswd
設定ファイルを作成します。
sudo vi /etc/ldap/myldif/testgroup-add.ldif dn: cn=testgroup,ou=group,dc=nd objectClass: posixGroup cn: testgroup gidNumber: 10000 memberUid: testuser sudo vi /etc/ldap/myldif/testuser-add.ldif dn: uid=testuser,ou=user,dc=nd objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: myoji sn: namae userPassword: {SSHA}xi/hSH/NC2tfbmtmtuHjlyDPL290PG loginShell: /bin/bash uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/testuser
反映させます。
sudo ldapadd -x -D cn=admin,dc=nd -W -f testgroup-add.ldif sudo ldapadd -x -D cn=admin,dc=nd -W -f testuser-add.ldif
ユーザの編集は以下のように行います。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=nd -b ou=user,dc=nd
グループの編集は以下のように行います。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=nd -b ou=group,dc=nd
ユーザが所属しているグループや登録済みのグループを表示して確認します。
id testuser groups testuser getent group
ユーザのパスワード変更
ldapviで行えば簡単ですが、以下のコマンドでも可能です。
「-W」オプションで管理者のパスワードの入力待ちになります。
管理者がユーザのパスワード変更する場合は下記となります。
sudo ldappasswd -x -h localhost -D "cn=admin,dc=nd" -S -W "uid=testuser,ou=user,dc=nd"
ユーザがログイン先で自分で変更する場合です。
最後に尋ねられる「Enter LDAP Password:」は、現在のパスワードを入力します。
「192.168.10.11」はLDAPサーバのIPアドレスです。
ldappasswd -x -h 192.168.10.11 -D "uid=testuser,ou=user,dc=nd" -S -W "uid=testuser,ou=user,dc=nd"
パスワードのポリシー設定
最小文字数や有効期限などを設定します。
はじめにモジュールを登録して反映させます。
sudo vi /etc/ldap/myldif/ppolicy-module.ldif dn: cn=module{0},cn=config changeType: modify add: olcModuleLoad olcModuleLoad: ppolicy.la sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ppolicy-module.ldif
確認します。
sudo slapcat -n 0 | grep -i module
ouを登録して反映させます。
sudo vi /etc/ldap/myldif/ppolicy_ou.ldif dn: ou=pwpolicy,dc=nd objectClass: organizationalUnit objectClass: top ou: pwpolicy sudo ldapadd -x -D cn=admin,dc=nd -W -f ppolicy_ou.ldif
オーバーレイを登録して反映させます。
sudo vi /etc/ldap/myldif/ppolicy_overlay.ldif dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config objectClass: olcOverlayConfig objectClass: olcPPolicyConfig olcOverlay: ppolicy olcPPolicyDefault: cn=default,ou=pwpolicy,dc=nd olcPPolicyHashCleartext: TRUE sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase | grep mdb sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ppolicy_overlay.ldif
ポリシーを登録して反映させます。
各パラメータの詳細はググってください。
sudo vi /etc/ldap/myldif/ppolicy_ldif.ldif dn: cn=default,ou=pwpolicy,dc=nd objectClass: top objectClass: inetOrgPerson objectClass: pwdPolicyChecker objectClass: pwdPolicy cn: pwpolicy sn: pwpolicy pwdAttribute: userPassword pwdMaxFailure: 10 pwdMustChange: FALSE pwdMinLength: 10 pwdInHistory: 1 pwdCheckQuality: 1 pwdReset: FALSE pwdLockoutDuration: 60 pwdGraceAuthNLimit: 10 sudo ldapadd -x -D cn=admin,dc=nd -W -f ppolicy_ldif.ldif または sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ppolicy_ldif.ldif
確認します。
sudo ldapsearch -x -LLL -H ldap:/// -D cn=admin,dc=nd -W -b dc=nd "(objectClass=pwdPolicy)"
sudoの設定
sudoをOpenLDAPで管理するために設定を行います。
sudoのschemaはsudo-ldapパッケージに含まれているので、クライアントでインストールしてからサーバに持ってきます。
該当ファイルは「/usr/share/doc/sudo-ldap/schema.olcSudo」になります。
sudo cp ~/schema.olcSudo /etc/ldap/myldif/ cd /etc/ldap/myldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f schema.olcSudo
確認します。
sudo ls /etc/ldap/slapd.d/cn\=config/cn\=schema/
ouを登録して反映させます。
sudo vi /etc/ldap/myldif/sudo_ou.ldif dn: ou=SUDOers,dc=nd objectClass: top objectClass: organizationalUnit ou: SUDOers sudo ldapadd -x -D cn=admin,dc=nd -W -f sudo_ou.ldif
cnを登録して反映させます。
sudo vi /etc/ldap/myldif/sudo_ldif.ldif dn: cn=defaults,ou=SUDOers,dc=nd objectClass: top objectClass: sudoRole cn: defaults sudoOption: env_keep+=SSH_AUTH_SOCK sudo ldapadd -x -D cn=admin,dc=nd -W -f sudo_ldif.ldif
ldapviでユーザとグループを登録します。
全てのホストで全ての操作を許可する設定です。
sudo ldapvi -h ldap://localhost -D cn=admin,dc=nd -b ou=SUDOers,dc=nd add cn=testuser,ou=SUDOers,dc=nd objectClass: top objectClass: sudoRole cn: testuser sudoUser: testuser sudoHost: ALL sudoCommand: ALL add cn=%testgroup,ou=SUDOers,dc=nd objectClass: top objectClass: sudoRole cn: %testgroup sudoUser: %testgroup sudoHost: ALL sudoCommand: ALL
自己証明書の作成
LDAPSで使う自己証明書を作成します。
はじめに秘密キーを作成します。
su - cd /etc/ssl/private openssl genrsa -aes256 -out server.key 2048 openssl rsa -in server.key -out server.key
証明書リクエストを発行します。
openssl req -new -days 36500 -key server.key -out server.csr
CA証明書と対応するキーとファイルで証明書リクエストに署名してサーバーの証明書を生成します。
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 36500 cp /etc/ssl/private/server.key /etc/ssl/private/server.crt /etc/ssl/certs/ca-certificates.crt /etc/ldap/sasl2/ cd /etc/ldap/sasl2 chown openldap.openldap server.crt server.key ca-certificates.crt chown openldap. /etc/ldap/sasl2/server.key /etc/ldap/sasl2/server.crt /etc/ldap/sasl2/ca-certificates.crt
ファイルのオーナーとパーミッションに注意します。
-rw-r--r-- 1 openldap openldap 200313 1月 1 14:51 ca-certificates.crt -rw-r--r-- 1 openldap openldap 1318 1月 1 14:51 server.crt -rw------- 1 openldap openldap 1679 1月 1 14:51 server.key
ldifファイルを作成します。(ハイフンは必要です。)
cd /etc/ldap/myldif sudo vi mod_ssl.ldif
dn: cn=config changetype: modifyll add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ldap/sasl2/server.crt - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/sasl2/server.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/sasl2/server.key
登録します。
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
SSL対応のためにプロトコルを追加します。
sudo vi /etc/default/slapd SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" sudo systemctl restart slapd
ポートはldap:389、ldaps:636になります。
それぞれポートが開いているか確認します。
ss -nl | egrep '389|636'
接続テストを行います。
ldapsearch -x -LLL -b "dc=nd" "(objectClass=*)" -W -H ldaps:///
Teratermや他の端末からクライアントにログインする過程をtcpdumpで閲覧します。
クライアントの/etc/sssd/sssd.confで「ldap_id_use_start_tls = true」の場合、ldaps(ポート686)を使います。
サーバでコマンドを実行して、ldap_id_use_start_tlsがtrueのときは686ポート、falseのときは389ポートでdumpが取れます。
また、686ポートでは暗号化されているのでdumpで取得したデータは判別できません。
sudo apt install tcpdump ldapの場合 sudo tcpdump -s0 -A -i any port 389 LDAPSの場合 sudo tcpdump -s0 -A -i any port 636
マルチマスターの設定
冗長な構成にするために2台のOpenLDAPサーバで構成します。
マルチマスターにすることで、どのサーバで情報を更新しても全てのサーバに反映されます。
クライアントのSSSDでは、設定した複数のサーバを参照するように設定します。
全てのサーバでデータ以外の設定を同様に行います。
SSLの自己証明書(3個のファイル)は1代目のマスターからコピーします。(オーナーとパーミッションに注意。)
cd /etc/ldap/myldif sudo vi syncprov_add.ldif dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib/ldap olcModuleLoad: syncprov.la sudo vi syncprov_overlay.ldif dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpSessionLog: 100
設定を反映させます。
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_add.ldif sudo ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_overlay.ldif
他のサーバを参照するための設定ファイルです。
sudo vi master.ldif
providerからintervalまでの項目は行の先頭に半角スペースを2個挿入します。
Master01は「192.168.10.100」、Master02は「192.168.10.200」とします。
下記はMaster01の設定です。
Master02では「olcServerID」、「olcSyncRepl」、「provider」だけが異なります。
SSLで通信させようと思い「provider=ldaps://192.168.10.100:639/」と指定しましたが、私の環境ではできませんでした。
「man slapd-config」を参照。
dn: cn=config changetype: modify replace: olcServerID # Master01の識別子。 # Master02の設定ファイルでは「002」とする。 olcServerID: 001 dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSyncRepl # Master01の識別子。 # Master02の設定ファイルでは「002」と指定する。 olcSyncRepl: rid=001 # Master02のアドレス。 # Master02の設定ファイルでは「ldap://192.168.10.100/ 」と指定する。 provider=ldap://192.168.10.200/ bindmethod=simple binddn="cn=admin,dc=nd" credentials=adminの平文パスワード # クライアントの/etc/sssd/sssd.confにある「ldap_search_base」の値と揃える。 searchbase="dc=nd" scope=sub schemachecking=on type=refreshAndPersist retry="30 3 300 3" interval=00:00:05:00 - add: olcMirrorMode olcMirrorMode: TRUE dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov
設定を反映させます。
片側でデータを追加、修正、削除を行うと他方に反映されます。
Master01側 cd /etc/ldap/myldif sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f master01.ldif sudo systemctl restart slapd Master02側 cd /etc/ldap/myldif sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f master02.ldif sudo systemctl restart slapd
SSSDのキャッシュ削除(クライアント側)
新規にユーザやグループを追加して、クライアント(SSSD)で正しく登録されたかを確認するときに、キャッシュが残っていると邪魔になるので削除します。
sudo認証はLDAPで管理しているためsssdを停止するとsudoできないのでsuして行います。
su systemctl stop sssd rm /var/lib/sss/db/*.ldb systemctl restart sssd
ユーザーレコードの削除 sudo sss_cache -u testuser グループレコードの削除 sudo sss_cache -g testgroup 確認 id testuser group testuser getent group
SambaとOpenLDAPの連携
ワークグループとWindows Domainの2通りがあります。
今回はWindowsパソコンを対象とせず、複数のSambaサーバを管理するのでワークグループで行います。
/usr/share/doc/smbldap-tools/README.Debian.gzも参照すると良いです。
はじめにLDAPサーバでSambaのSchemaをLDAPに登録します。
Sambaがインストールされたパソコンからsamba.ldifを持ってきます。
sudo cp /usr/share/doc/samba/examples/LDAP/samba.ldif /etc/ldap/myldif/ 追加 sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/myldif/samba.ldif 確認 sudo ls /etc/ldap/slapd.d/cn\=config/cn\=schema/
LDAPに登録してあるアクセス権を修正します。
「sambaPwdMustChange,sambaLMPassword,sambaPwdLastSet,sambaNTPassword」の属性値を追加します。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaPwdMustChange,sambaLMPassword,sambaPwdLastSet,sambaNTPassword by dn="cn=admin,dc=xxx,dc=xxx" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=nd" write by * read olcAccess: {3}to dn.subtree="dc=nd" by self read by * read olcAccess: {4}to * by * none
複数台のSambaサーバを運用する場合、共通のSID(sambaSID)を使います。
代表とするSambaサーバで「sudo net getlocalsid」コマンドを実行してSID(sambaSID)を調べます。
sudo net getlocalsid S-1-5-21-xxx-xxx-xxx
LDAPにSambaサーバを登録します。
例えばホスト名が「ほげほげ.example.com」の場合は以下となります。
全てのSambaサーバを登録します。
ldapviで新規登録するので、番号の部分を「add」とすると自動で番号を割り振ってくれます。
登録するSambaサーバのsambaSIDは「S-1-5-21-xxx-xxx-xxx」となります。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=nd -b dc=nd
add sambaDomainName=ほげほげ,dc=nd sambaDomainName: ほげほげ objectClass: sambaDomain sambaSID: S-1-5-21-xxx-xxx-xxx <-- ここ sambaAlgorithmicRidBase: 1000 sambaNextUserRid: 1000 sambaMinPwdLength: 5 sambaPwdHistoryLength: 0 sambaLogonToChgPwd: 0 sambaMaxPwdAge: -1 sambaMinPwdAge: 0 sambaLockoutDuration: 30 sambaLockoutObservationWindow: 30 sambaLockoutThreshold: 0 sambaForceLogoff: -1 sambaRefuseMachinePwdChange: 0
以降の作業はSmabaサーバで行います。
sudo apt install samba smbldap-tools sudo vi /etc/smb/smb.conf
/etc/smb/smb.confの内容は下記のとおりです。
既存ユーザがある場合は、後ほどLDAPにコンバートするまで「passdb backend = tdbsam」にしておきます。
[global] log level = 3 unix charset=UTF-8 dos charset=CP932 workgroup = test security = user case sensitive = yes load printers = no dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 passdb backend = tdbsam ;passdb backend = ldapsam:ldap://192.168.10.100, ldap://192.168.10.200 ldap suffix = dc=nd ldap user suffix = ou=user ldap group suffix = ou=group ldap admin dn = cn=admin,dc=nd ldap ssl = off ;ldap ssl = start_tls ldap passwd sync = yes passwd program = /usr/sbin/smbldap-passwd -u %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated* [homes] valid users = %S comment = Home browseable = no writable = yes ;create mask = 0644 ;directory mask = 0755
OpenLDAPにアクセスするためにOpenLDAP管理者(今回はadmin)のパスワードを設定します。
これはOpenLDAPに参加させる全てのSambaサーバで行います。
sudo systemctl restart nmbd sudo systemctl restart smbd sudo smbpasswd -W
/etc/samba/smb.confを元にsmbldapの設定ファイルを生成します。
OpenLDAPの管理者(今回はadmin)のパスワードを入力します。
また、今回はマルチマスターで構成しているので「ldap slave server」には他方の「192.168.10.200」を入力します。
単一の場合はmasterと同じ「192.168.10.100」を入力します。
sudo smbldap-config OpenLDAPの管理者(今回はadmin)のパスワードを入力する ldap master bind password [] > 「192.168.10.200」を入力します。 ldap slave server [] > 共通のSIDを入力します。 SID for domain [] > 2ファイルが生成されます。 /etc/smbldap-tools/smbldap.conf /etc/smbldap-tools/smbldap_bind.conf
ワークグループで運用するので、全てのSambaサーバで/etc/smbldap-tools/smbldap.confの「SID」項目は同じ値にします。
値は、上記にもある、代表にするSambaサーバ上で「sudo net getlocalsid」コマンドで出力した「S-1-5-21-xxx-xxx-xxx」です。
sudo vi /etc/smbldap-tools/smbldap.conf SID="S-1-5-21-xxx-xxx-xxx"
以下のコマンドでLDAPにTreeを登録します。
これは主にWindows Domain用で不要なものもあるのでldapviで削除しても良いです。
sudo smbldap-populate 最後に入力するパスワードはLDAPのadminパスワード。 不要項目を削除する場合は、 sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=nd -b dc=nd
既存ユーザをLDAPに移行します。
sudo pdbedit -i tdbsam -e ldapsam:ldap://192.168.10.100/
/etc/smb/smb.confの「passdb backend」を修正します。
sudo vi /etc/smb/smb.conf ;passdb backend = tdbsam passdb backend = ldapsam:ldap://192.168.10.100, ldap://192.168.10.200 sudo systemctl restart nmbd sudo systemctl restart smbd
LDAPサーバでLDAPに移行した既存ユーザのsambaSIDを修正する作業を行います。
ユーザのsambaSIDは「S-1-5-21-xxx-xxx-xxx」にハイフンとUID番号(uidNumberと同じ番号)を付加したものになります。
sambaSIDをハイフンとUID番号はそのままでSIDの部分だけを「S-1-5-21-xxx-xxx-xxx」に修正します。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=nd -b dc=nd
10 uid=user_name,ou=user,dc=nd objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount objectClass: sambaSamAccount sn: user_name cn: user_name uid: user_name uidNumber: 1010 gidNumber: 1010 sambaSID: S-1-5-21-xxx-xxx-xxx-1010 <-- ここ loginShell: /bin/bash homeDirectory: /home/user_name shadowLastChange: 19159 userPassword: {SSHA}asdfasdfasdfas+asdfasdf+3+asdfasdf sambaLogonTime: 0 sambaLogoffTime: 2085923199 sambaKickoffTime: 2085923199 sambaPwdCanChange: 0 sambaPasswordHistory: 0000000000000000000000000000000000000000000000000000000000000000 sambaLogonHours: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF sambaAcctFlags: [U ] sambaBadPasswordCount: 0 sambaBadPasswordTime: 0 sambaPwdLastSet: 1655362716 sambaNTPassword: 1E6E0F9D41BEB98303A61FCFDDCB3466 sambaLMPassword: 85010FE11E5AE4785753435894A05C67
クライアントの設定
Debianではnscdとnslcdが標準ですが、私の技量が足りずsudoとOpenLDAPの連携ができなかったのでsssdを使いました。
サーバで使うsudo用のSchemaはsudo-ldapに含まれます。
「man sssd.conf」を参考に設定します。
sudo apt purge nscd nslcd sudo apt install sssd sssd-tools libsss-sudo sudo-ldap
/etc/nsswitch.conf
/etc/nsswitch.confにsssが登録されているか確認します。
/etc/nsswitch.conf passwd: files systemd sss group: files systemd sss shadow: files sss gshadow: files hosts: files dns networks: files protocols: db files services: db files sss ethers: db files rpc: db files netgroup: nis sss sudoers: files sss automount: sss
ログイン時にホームディレクトリを自動作成する1
1つ目の方法です。
oddjobを使ってログイン時にホームディレクトリを自動で作成します。
sudo apt install oddjob-mkhomedir
/etc/pam.d/common-sessionの最終行に追記します。
sudo vi /etc/pam.d/common-session session optional pam_oddjob_mkhomedir.so umask=077
ログイン時にホームディレクトリを自動作成する2
2つ目の方法です。
以下のコマンドで自動で設定してくれるので「Create home directory on login」にチェックします。
また、sssなどにチェックが入っていることを確認します。
sudo pam-auth-update
自分で記述するなら以下のようにします。
sudo vi /etc/pam.d/common-session session optional pam_mkhomedir.so skel=/etc/skel umask=077
sshdでパスワード認証を有効にする
テストのため、パスワード認証を有効にします。
sudo apt install sshd sudo vi /etc/ssh/sshd_config PasswordAuthentication yes sudo systemctl restart ssh
秘密鍵
LDAPSを使うので、サーバで生成した秘密鍵をコピーして持ってきます。
sudo mkdir -p /etc/ssl/openldap/certs/ sudo mv ~/server.key /etc/ssl/openldap/certs/ sudo chmod 600 /etc/ssl/openldap/certs/server.key sudo chown root. /etc/ssl/openldap/certs/server.key
/etc/sssd/sssd.conf
下記の内容でsssd.confファイルを新規に作成します。
自己証明書なので「ldap_tls_reqcert = never」とします。
[sssd] debug_level = 1 services = nss, pam, ssh, sudo config_file_version = 2 domains = default [domain/default] ldap_id_use_start_tls = true ldap_tls_reqcert = never #ldap_tls_reqcert = allow #ldap_id_use_start_tls = false id_provider = ldap auth_provider = ldap chpass_provider = ldap sudo_provider = ldap #access_provider = simple #access_provider = permit ldap_search_timeout = 5 ldap_network_timeout = 5 ldap_tls_cacert = /etc/ssl/openldap/certs/server.key ldap_tls_cacertdir = /etc/ssl/openldap/certs enumerate = false cache_credentials = false case_sensitive = false entry_cache_timeout = 30 ;ldap_uri = ldaps://slapdのサーバ名 ldap_uri = ldaps://192.168.10.100, ldaps://192.168.10.200 ldap_search_base = dc=nd ldap_user_search_base = ou=user,dc=nd ldap_sudo_search_base = ou=SUDOers,dc=nd
パーミッションなどを変更してsssdを再起動ます。
sudo chmod 600 /etc/sssd/sssd.conf sudo chown root. /etc/sssd/sssd.conf sudo systemctl restart sssd
LDAPサーバへの接続テスト
サーバ、クライアントのどちらでも良いのでテストします。
ldapsearch -x -LLL -b "dc=nd" "(objectClass=*)" -h LDAPサーバのIPアドレス・ホスト名
TeraTermでログインのテスト
「プレインパスワード」をチェックして、testuserでログインできるかテストします。
Sambaパスワードの変更
LDAPとSmabaと連携させた場合、ユーザはpaswdコマンドではなく、smbldap-passwdコマンドでパスワードを変更します。
初めにLinuxのパスワードを入力してから、Smaba(LDAP)のパスワードを2回入力します。
バックアップ
念のため2台のLDAPサーバーでそれぞれcronを使ってバックアップします。
sudo mkdir /home/www/cron/backup-ldap sudo vi /home/www/cron/ldap-backup.sh sudo chmod 755 /home/www/cron/ldap-backup.sh
スクリプトです。
#!/bin/sh DATE=`date +\%Y\%m\%d\%H\%M` BACKUP_DIR=/home/www/cron/backup-ldap cd ${BACKUP_DIR} mkdir `date '+%Y%m%d'` # config /sbin/slapcat -b cn=config -l ${BACKUP_DIR}/`date '+%Y%m%d'`/ldap-config-${DATE}.ldif # data /sbin/slapcat -n 1 -l ${BACKUP_DIR}/`date '+%Y%m%d'`/ldap-data-${DATE}.ldif
cronに登録します。
sudo crontab -e
crontabの内容です。
毎朝6時1分にバックアップします。
01 6 * * * /home/www/cron/ldap-backup.sh
Comments