ls hangs in internal-sftp for LDAP users + numeric uid/gid instead of names

Alexander Wuerstlein arw at cs.fau.de
Thu May 18 23:38:54 AEST 2017


On 2017-05-18T13:13, mh at ow2.org <mh at ow2.org> wrote:
> Le 18/05/2017 à 12:17, mh at ow2.org a écrit :
> > However, I get uid/gid numbers instead of names within sftp session (ls
> > -l) ? I don't know if it's new but I would definitively prefer names...
> 
> It seems the reason is :
> 
> open("/etc/passwd", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
> 
> okay, etc folder in the chroot wasn't world readable. If I put an entry
> in the passwd file, the sftp session start resolving names.
> 
> Notice the sftp process is owned by the connecting user, and if etc/
> folder is world readable, it means I expose those file to sftp user. I
> don't like it but unsure if there is a better solution...
> 
> Or I could simply only resolve entries from the ldap and get rid of
> passwd file (see below).
> 
> I also had this error:
> socket(PF_LOCAL, SOCK_STREAM, 0)        = 4
> fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
> fcntl(4, F_SETFD, FD_CLOEXEC|0x2)       = 0
> connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nslcd/socket"}, 23) =
> -1 ENOENT (No such file or directory)
> 
> Of course /var/run/nslcd/socket doesn't exist in the chroot.
> 
> To solve this I did :
> mount -o bind /var/run/nslcd/ <chrootfolder>/var/run/nslcd/

Yes, and additionally you want to get rid of 'compat' nsswitch entries,
because those also consult the passwd/group/... files.

Another option, if you don't want to have a socket reaching out of the
chroot (including the corresponding possible chroot escape possibility)
is to just "copy everything from ldap into a local file". Which would be
exactly what https://github.com/google/nsscache does. YMMV.



Ciao,

Alexander Wuerstlein.


More information about the openssh-unix-dev mailing list