Ubuntu
無法使 sshd+pam+ldap 工作(AuthorizedKeysCommand?)
我做了什麼:
- 已安裝
libpam-ldapd
- 設置
/etc/ldap/ldap.conf
- 設置
/etc/ssh/ldap-keys.sh
為root:root 0755
,確認它有效(/etc/ssh/ldap_keys.sh amadan
從 LDAP 返回我的公鑰)。- 設置
/etc/nsswitch.conf
:passwd
,sudo
現在shadow
說compat ldap
,換行sudoers
了ldap
。- 設置
/etc/ssh/sshd_config
:AuthorizedKeysCommand
指向上面的文件,AuthorizedKeysCommandUser
指向一個新創建的專用使用者- 設置
/usr/share/pam-configs/mkhomedir
;跑了pam-auth-update
。目前的情況是,當我嘗試登錄時,
AuthorizedKeysCommand
(/etc/ssh/ldap-keys.sh
) 永遠不會執行。我也不知道我的其餘配置是否正確,但由於sshd
總是報告“無效使用者”,我還不能確定:Oct 17 17:22:59 xxx sshd[86244]: Invalid user amadan from yyy Oct 17 17:22:59 xxx sshd[86244]: input_userauth_request: invalid user amadan [preauth] Oct 17 17:23:01 xxx sshd[86244]: Connection closed by yyy [preauth]
我知道我做錯了什麼……但是什麼?
編輯:相關的 PAM 設置:
# auth auth [success=2 default=ignore] pam_unix.so nullok_secure debug auth [success=1 default=ignore] pam_ldap.so minimum_uid=1000 use_first_pass debug auth requisite pam_deny.so auth required pam_permit.so auth optional pam_cap.so # account account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad] pam_ldap.so minimum_uid=1000 account requisite pam_deny.so account required pam_permit.so
編輯:
strace
摘錄sshd
:open("/lib/x86_64-linux-gnu/security/pam_ldap.so", O_RDONLY|O_CLOEXEC) = 8 read(8, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\20\0\0\0\0\0\0"..., 832) = 832 fstat(8, {st_mode=S_IFREG|0644, st_size=26544, ...}) = 0 mmap(NULL, 2121744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 8, 0) = 0x7f58df52b000 mprotect(0x7f58df531000, 2093056, PROT_NONE) = 0 mmap(0x7f58df730000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 8, 0x5000) = 0x7f58df730000 close(8) = 0 mprotect(0x7f58df730000, 4096, PROT_READ) = 0 open("/lib/x86_64-linux-gnu/security/pam_deny.so", O_RDONLY|O_CLOEXEC) = 8
Strace 摘自工作
sshd
(在另一台伺服器上):open("/lib/x86_64-linux-gnu/security/pam_ldap.so", O_RDONLY|O_CLOEXEC) = 8 read(8, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\37\0\0\0\0\0\0"..., 832) = 832 fstat(8, {st_mode=S_IFREG|0644, st_size=47792, ...}) = 0 mmap(NULL, 2142888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 8, 0) = 0x7f8ef8a3c000 mprotect(0x7f8ef8a46000, 2097152, PROT_NONE) = 0 mmap(0x7f8ef8c46000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 8, 0xa000) = 0x close(8) = 0 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 8 fstat(8, {st_mode=S_IFREG|0644, st_size=152262, ...}) = 0 mmap(NULL, 152262, PROT_READ, MAP_PRIVATE, 8, 0) = 0x7f8efcee1000 close(8) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2", O_RDONLY|O_CLOEXEC) = 8
在工作
sshd
中,pam_ldap.so
呼叫libldap_r-2.4.so.2
;在這一個中,它沒有;它沒有做太多就退出,並立即進入下一個 PAM 模組。我不知道為什麼。
名稱服務記憶體守護程序維護的記憶體似乎已經過時/沒有更新以反映新的 LDAP 設置。
sudo /etc/init.d/nscd restart
應該重新啟動服務並更新記憶體。