web-dev-qa-db-ja.com

Dockerコンテナ内のOpenLDAPクライアント

非rootユーザーとOpenLDAPでCentOS6を実行しているDockerコンテナがあります。 getent passwdを使用すると、/etc/passwdからデータが返されます。構成ファイル/etc/nsswitch.confはそれに応じてカスタマイズされ(以下を参照)、authconfig-gtkが構成に使用されます。興味深いことに、私はすべてのユーザー情報を取得することができます

ldapsearch -x -b "dc=physik,dc=rwth-aachen,dc=de"

ただし、Dockerコンテナー内ではアクセスできないか、使用されていません。設定を間違えたり、何かを見逃したりしましたか?

インストール済みパッケージ:

openldap openldap-clients nss-pam-ldapd authconfig-gtk

/ etc/nsswitch.conf

passwd:     files ldap
shadow:     files ldap
group:      files ldap

hosts:      files dns

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files

netgroup:   files ldap

publickey:  nisplus

automount:  files ldap
aliases:    files nisplus

/ etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_access.so
account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
2
Bonzai

nslcd -dを使用すると、アドレスがすでにホストシステムによって取得されていることがわかりました。 docker runを実行するときにソケットをマウントして修正しました

-v /var/run/nslcd/socket:/var/run/nslcd/socket
3
Bonzai

良いセキュリティが指示するように、非rootユーザー(-u NON_ROOT_USER)としてコンテナーを実行しながら、起動時にコンテナー内でroot(nslcd)を必要とするように見えるサービスを実行しようとして今日の午後の大部分を過ごしました。 Dockerの専門家がすでに知っているように、Dockerコンテナーは通常のinit.dプロセスを使用せず、すべて(CMDとENTRYPOINTを含む)が指定されたコンテナーユーザーとして実行されるため、これを行うことはできません。

Bonzai自身の答えはこの問題に対する興味深い回避策ですが、これを行うことにより、ホストのnslcdデーモンを使用し、コンテナー内で開始されたものは使用しないことに注意してください。コンテナ内でnslcdを起動せずに、init.d中にnslcdが起動されたかのようにコンテナを設定するだけで、これも機能するようになりました。次に、docker run -u NON_ROOT_USERを使用してコンテナーを実行し、ホストからnslcdデーモンを「借用」します。

私は決してこれの専門家ではないので、この議論に関する以下のコメントを歓迎します...

0
Patrick Clemins