試圖讓 sudoers 在 openldap/centos7 上工作
我在這里關注本教程:
https://kifarunix.com/how-to-configure-sudo-via-openldap-server/
很多都是有道理的,但對於 openldap 來說仍然是新的,所以其中一些也很神秘。我讓 openldap 執行,使用者在其他機器上進行身份驗證,甚至使用 phpldapadmin。所以是時候讓 sudoers 為一些使用者工作了。我執行了
sudoers2ldif
命令,得到了一個類似於教程中顯示的文件,並進行了相應的編輯。當它執行ldapadd -Y EXTERNAL -H ldapi:/// -f sudoers_modified.ldif
時失敗並出現錯誤:SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=defaults,ou=SUDOers,dc=apo,dc=local" ldap_add: Invalid syntax (21) additional info: objectClass: value #1 invalid per syntax
21 是 .ldif 文件的行號嗎?或其他一些錯誤程式碼…也不知道 objectClass 命令上的無效內容…發布的是下面的 ldif 文件。
dn: cn=defaults,ou=SUDOers,dc=bbb,dc=local objectClass: top objectClass: sudoRole cn: defaults description: Default sudoOption's go here sudoOption: !visiblepw sudoOption: always_set_home sudoOption: match_group_by_gid sudoOption: always_query_group_plugin sudoOption: env_reset sudoOption: env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" sudoOption: env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" sudoOption: env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" sudoOption: env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" sudoOption: env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" sudoOption: secure_path = /sbin:/bin:/usr/sbin:/usr/bin dn: cn=sudo,OU=SUDOers,dc=bbb,dc=local objectClass: top objectClass: sudoRole cn: sudo sudoUser: bobby sudoHost: ALL sudoRunAsUser: ALL sudoCommand: ALL
也許 sudoRole 需要以某種方式添加?我為此成功添加的另一個 ldif 是:
dn: ou=SUDOers,dc=bbb,dc=local objectCLass: top objectClass: organizationalUnit ou: SUDOers description: BBB SUDOers container
我在這裡找到了另一個教程:
https://forums.centos.org/viewtopic.php?t=73807
由於類似的資訊略有不同,我沒有使用這個,因為發布的一個 ldif 文件有很多東西說它是“自動生成的”,我不知道它是如何或從哪裡來的。
在一個答案之後,我相信上面連結中顯示的文件包含數據:
vi /testfolder/sudoers.ldif #------------------------ # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 b181185c dn: cn=sudoers,cn=schema,cn=config objectClass: olcSchemaConfig cn: sudoers olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s ) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5Substrin gsMatch 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 caseExactIA5Substring sMatch 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 'Com mand(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4 .1.1466.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 'Opti ons(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 'U ser(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 ' Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4. 1.1466.115.121.1.26 ) olcAttributeTypes: {7}( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'S tart of time interval for which the entry is valid' EQUALITY generalizedTim eMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.12 1.1.24 ) olcAttributeTypes: {8}( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'En d of time interval for which the entry is valid' EQUALITY generalizedTimeMa tch 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 i nteger to order the sudoRole entries' EQUALITY integerMatch ORDERING intege rOrderingMatch 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 Entries' SUP top STRUCTURAL MUST cn MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoOrder $ su doNotBefore $ sudoNotAfter $ description ) )
一旦我意識到該文件是我添加它的架構並最終使這一切正常工作,因此我接受了答案,即使我不得不深入研究我正在做的事情。順便說一句,我的 ldap 中沒有使用架構文件,我必須通過 ldapadd 添加它
21 是 .ldif 文件的行號嗎?或其他一些錯誤程式碼
這是無效語法的返回碼。
LDAP_INVALID_SYNTAX - 21 (0x15) An attribute value specified on an LDAP client request does not have a valid syntax specified. For example, if an attribute type in the schema has an integer syntax, an integer value must be specified on an add or modify request.
您可以執行以下操作以進一步解決此問題嗎?
- 檢查主機上是否存在 sudoers 架構文件。如果不存在,請從此處複製
# ls -l /etc/openldap/schema/sudo.schema
- 檢查是否將 sudo.schema(或等效文件)添加到相關的 openldap 伺服器配置文件中。
# grep sudo.schema /etc/openldap/slapd.conf include /etc/openldap/schema/sudo.schema
- 檢查 sudoers OU 是否存在!
# ldapsearch -H ldap://localhost -x -LLL -s one -b "OU=SUDOers,dc=bbb,dc=local"
如果不是,請使用 ldapadd (1) 添加它
- 檢查 ldif 文件中是否存在語法錯誤
# /usr/bin/cvtsudoers /tmp/sample.ldif -i ldif -f sudoers
您可能應該瀏覽官方 sudo 文件連結,其中包含對上述某些內容的解釋。