我正在运行带有 SSSD 身份验证的 debian 8。身份验证有效并且 ssh 工作正常。我已将所有库等复制到我的 SSH chrootdirectory,并且我的所有应用程序都可以工作,除了 ssh 之外,它有错误:
不存在 uid 721001106 的用户
我已运行 ltrace 以确保获得所有库和文件。接下来,我尝试了尽可能的文件符号链接。
Ltrace 其中trace=open
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libkrb5.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libk5crypto.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcom_err.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/x86_64-linux-gnu/libkrb5support.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libkeyutils.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/proc/filesystems", O_RDONLY) = 3
open("/dev/null", O_RDWR) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_compat.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnsl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_sss.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/var/lib/sss/mc/passwd", O_RDONLY|O_CLOEXEC) = 3
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port]
[-Q cipher | cipher-auth | mac | kex | key]
[-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] [user@]hostname [command]
+++ exited with 255 +++
当我与用户一起运行 id 时,我得到相同的 UID 等,但名称信息不同。
没有 Chroot:
uid=721001106([email protected]) gid=721000513(domain [email protected]) groups=721000513(domain [email protected]),721001108([email protected])
在 Chroot 中:
uid=721001106 gid=721000513 groups=721000513,721001108
我的问题是,为什么会发生这种情况,它试图从哪里读取并失败。
哦,另外,我做了一个 mount --bind /proc /path/to/jail/proc 仍然没有区别......
有什么想法下一步要尝试什么吗?
非常感谢,
卢克
答案1
我遇到了同样的问题,发现 getent passwd 和 getent group 不会从 LDAP 返回用户。解决这个问题的方法是在 chroot 目录中输出 getent。
getent passwd > /<chroot directory>/etc/passwd
getent group > /<chroot directory>/etc/group
答案2
做了更多的挖掘,如果您同意绑定挂载到 chroot 区域,您可以使用 ssh、scp 和 sftp 与 sssd 进行通信。
像这样:
cd /FileTransfer
mkdir -p var/lib/sss/pipes
cd var/lib/sss
mount --rbind /var/lib/sss/pipes pipes/
cp -p /etc/nsswitch.conf /FileTranser/etc
希望有帮助
答案3
看起来是 scp 试图为用户 UID 调用 getpwuid(),并且由于 sssd 在 chroot 外部运行,因此失败。只有 scp 可以进行此检查,sftp 或 ssh 都不会这样做。
if ((pwd = getpwuid(userid = getuid())) == NULL)
fatal("unknown user %u", (u_int) userid);
奇怪的是他们后来没有使用它。我可能会在没有这个检查的情况下构建一个 scp 并看看它是否有效。但是让 chroot 与 sssd 一起工作会很高兴:)