各計算ノードでvisudoもいいがLDAPサーバでsudo利用可能ユーザを定義すれば便利かなと.
ansibleでごりごり調整するのもありだけど

sudoスキーマをldif形式に変換

「sudo」パッケージをインストールすると「/usr/share/doc/sudo/schema.OpenLDAP」にLDAPスキーマが存在する.
これをldifに変換することが必要みたい
っで変換する. わざと新規のLDAPディレクトリを作らせてldifを取得します

[root@ldap-server ~]# cp /usr/share/doc/sudo/schema.OpenLDAP /tmp/sudo.schema
[root@ldap-server ~]# cd /tmp
[root@ldap-server tmp]# vi sudo.conf
include /etc/openldap/schema/core.schema
include /tmp/sudo.schema
 
[root@ldap-server tmp]# mkdir sample
 
[root@ldap-server tmp]# slaptest -f sudo.conf -F /tmp/sample/

これでldifに変換された「"/tmp/sample/cn=config/cn=schema/cn={1}sudo.ldif"」を得る.

中身は

[root@ldap-server tmp]# less "sample/cn=config/cn=schema/cn={1}sudo.ldif"
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2e34f948
dn: cn={1}sudo
objectClass: olcSchemaConfig
cn: {1}sudo
olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s)
 who may  run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMa
 tch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {1}( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s)
 who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMat
 ch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {2}( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Comma
 nd(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1
 466.115.121.1.26 )
olcAttributeTypes: {3}( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s)
  impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1
 .4.1.1466.115.121.1.26 )
olcAttributeTypes: {4}( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Option
 s(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115
 .121.1.26 )
olcAttributeTypes: {5}( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'Use
 r(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466
 .115.121.1.26 )
olcAttributeTypes: {6}( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Gr
 oup(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.14
 66.115.121.1.26 )
olcAttributeTypes: {7}( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'Sta
 rt of time interval for which the entry is valid' EQUALITY generalizedTimeMat
 ch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
  )
olcAttributeTypes: {8}( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'End
 of time interval for which the entry is valid' EQUALITY generalizedTimeMatch
 ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
olcAttributeTypes: {9}( 1.3.6.1.4.1.15953.9.1.10 NAME 'sudoOrder' DESC 'an int
 eger to order the sudoRole entries' EQUALITY integerMatch ORDERING integerOrd
 eringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
olcObjectClasses: {0}( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' DESC 'Sudoer En
 tries' SUP top STRUCTURAL MUST cn MAY ( sudoUser $ sudoHost $ sudoCommand $ s
 udoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ sudoNotB
 efore $ sudoNotAfter $ description ) )
structuralObjectClass: olcSchemaConfig
entryUUID: 3449bc7a-62f5-103e-85ef-9d193e8981ea
creatorsName: cn=config
createTimestamp: 20240218220251Z
entryCSN: 20240218220251.480716Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20240218220251Z
 
[root@ldap-server tmp]#

な感じ. これをldapに取り込むためにちょっと修正します

[root@ldap-server tmp]# cp "sample/cn=config/cn=schema/cn={1}sudo.ldif" ~/ldap/sudo.ldif
[root@ldap-server tmp]# cd
[root@ldap-server ~]# vi ldap/sudo.ldif
--- ldap/sudo.ldif.orig 2024-02-19 07:12:30.616525461 +0900
+++ ldap/sudo.ldif      2024-02-19 07:13:38.872162735 +0900
@@ -1,8 +1,6 @@
-# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
-# CRC32 2e34f948
-dn: cn={1}sudo
+dn: cn=sudo,cn=schema,cn=config
 objectClass: olcSchemaConfig
-cn: {1}sudo
+cn: sudo
 olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s)
  who may  run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMa
  tch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
@@ -38,10 +36,3 @@
  tries' SUP top STRUCTURAL MUST cn MAY ( sudoUser $ sudoHost $ sudoCommand $ s
  udoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ sudoNotB
  efore $ sudoNotAfter $ description ) )
-structuralObjectClass: olcSchemaConfig
-entryUUID: 3449bc7a-62f5-103e-85ef-9d193e8981ea
-creatorsName: cn=config
-createTimestamp: 20240218220251Z
-entryCSN: 20240218220251.480716Z#000000#000#000000
-modifiersName: cn=config
-modifyTimestamp: 20240218220251Z

一応もっと簡単な方法にNetBSDとかのパッケージからとldif形式をとるのもありです.

wget http://netbsd.ftp.fu-berlin.de/pub/NetBSD/pkgsrc/packages/NetBSD/amd64/9.3/All/openldap-extra-schemas-4.3.tgz
tar xf openldap-extra-schemas-4.3.tgz share/examples/openldap/schema/
ls -l share/examples/openldap/schema/sudo.ldif

sudoスキーマの登録

作ったsudo.ldifを取り込みます

[root@ldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f ldap/sudo.ldif
 
(確認)
[root@ldap-server ~]# ldapsearch -x -LLL -W -D cn=config -b cn=config dn
 :
dn: cn={4}sudo,cn=schema,cn=config
 :
[root@ldap-server ~]#

データ登録

[root@ldap-server ~]# vi ldap/sudoers.ldif
dn: ou=sudoers,dc=sybyl,dc=local
objectClass: organizationalUnit
ou: sudoers
 
dn: cn=supervisor,ou=sudoers,dc=sybyl,dc=local
objectClass: top
objectClass: sudorole
cn: supervisor
sudoUser: %supervisor    <-- ldapで作っているアカウントでグループが「supervisor」に所属するならsudoできるよ
sudoCommand: ALL
sudoHost: ALL
 
[root@ldap-server ~]# ldapadd -x -D cn=Manager,dc=sybyl,dc=local -W -f ldap/sudoers.ldif

LdapAdminで見るとこんな感じになります
2024y02m19d_073113219.png

クライアント側で

ldapに載った情報を使ってsudoに反映させるには ldap と sssd の2つがあるみたい. どちらを選択するかは「/etc/nsswitch.conf」の「sudoers」欄で順序とかが決められる.
ちなみに「/etc/nsswitch.conf」で使われるパラメータは「/usr/lib64/libnss*」かな.

[root@ldap-client ~]# ls /usr/lib64/libnss*
/usr/lib64/libnss3.so          /usr/lib64/libnss_dns.so.2         /usr/lib64/libnss_resolve.so.2  /usr/lib64/libnss_systemd.so.2
/usr/lib64/libnssckbi.so       /usr/lib64/libnss_files.so.2       /usr/lib64/libnss_sss.so.2      /usr/lib64/libnssutil3.so
/usr/lib64/libnss_compat.so.2  /usr/lib64/libnss_myhostname.so.2  /usr/lib64/libnsssysinit.so
[root@ldap-client ~]#

ここではsssd経由にします.

[root@ldap-client ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam, sudo   <-- sudoを追加
domains = default
 
[sudo]                      <-- [sudo]を追加
 
[nss]
 
[domain/default]
id_provider = ldap
ldap_uri = ldaps://ldap-server/
ldap_search_base = dc=sybyl,dc=local
ldap_id_use_start_tls = True
ldap_tls_reqcert = never
ldap_default_bind_dn = cn=access,ou=People,dc=sybyl,dc=local
ldap_default_authtok = AAAQAKooYshlPbF2vEJmZVGj51mmVV25TUrl5je4(略
access_provider = permit
sudo_provider = ldap
auth_provider = ldap
autofs_provider = ldap
resolver_provider = ldap
ldap_default_authtok_type = obfuscated_password
ldap_sudo_search_base = ou=sudoers,dc=sybyl,dc=local    <--- 追加
 
[root@ldap-client ~]#

authselectコマンドを使っているので、更新もauthselectで

[root@ldap-client ~]# authselect list-features sssd
with-custom-automount
with-custom-group
with-custom-netgroup
with-custom-passwd
with-custom-services
with-faillock
with-files-access-provider
with-files-domain
with-fingerprint
with-gssapi
with-mkhomedir
with-pam-gnome-keyring
with-pam-u2f
with-pam-u2f-2fa
with-pamaccess
with-pwhistory
with-silent-lastlog
with-smartcard
with-smartcard-lock-on-removal
with-smartcard-required
with-subid
with-sudo
without-nullok
without-pam-u2f-nouserok
 
[root@ldap-client ~]# authselect select sssd with-mkhomedir with-sudo --force

「/etc/nsswitch.conf」を確認すると

[root@ldap-client ~]# less /etc/nsswitch.conf
 :
sudoers:    files sss
 :
[root@ldap-client ~]#

っでsssdを再起動します

[root@ldap-client ~]# systemctl restart sssd

これでここではldapアカウントでグループ「supervisor」に入っている方はsudoが使えることになります.

最新の60件
2025-04-27 2025-04-26 2025-04-25 2025-04-24 2025-04-17 2025-04-15 2025-04-13 2025-04-02 2025-04-01 2025-03-31 2025-03-29 2025-03-28 2025-03-27 2025-03-26 2025-03-23 2025-03-22 2025-03-20 2025-03-17 2025-03-16 2025-03-15 2025-03-06 2025-03-03 2025-03-01 2025-02-18 2025-02-17 2025-02-14 2025-02-12 2025-02-03 2025-02-02 2025-01-27 2025-01-26 2025-01-25 2025-01-24 2025-01-23

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-02-19 (月) 08:09:35