Hi Szabolcs,

Ah, that's a bit nasty. I guess the difference is that OpenSSH runs the daemon 
as the user, while Dropbear runs as root.

The procfs manpage mentions the problem. 
http://man7.org/linux/man-pages/man5/proc.5.html
              Note that for file descriptors referring to inodes (pipes and
              sockets, see above), those inodes still have permission bits
              and ownership information distinct from those of the
              /proc/[pid]/fd entry, and that the owner may differ from the
              user and group IDs of the process.  An unprivileged process
              may lack permissions to open them, as in this example:

                  $ echo test | sudo -u nobody cat
                  test
                  $ echo test | sudo -u nobody cat /proc/self/fd/0
                  cat: /proc/self/fd/0: Permission denied
Not really sure of a good workaround.

Cheers,
Matt


> On Fri 1/5/2020, at 2:46 am, Szabolcs Nagy <n...@port70.net> wrote:
> 
> hello, when dropbear server runs on host
> 
> $ echo hi | ssh user@host 'cat'
> 
> works as expected (so reading stdin works), but
> 
> $ echo hi | ssh user@host 'cat /proc/self/fd/0'
> 
> fails with EPERM (the open syscall in cat that is).
> 
> it seems the /proc file is user owned but it's a magic symlink
> to a pipe that is owned by root so reopening it fails:
> 
> $ ssh user@host 'stat -L /proc/self/fd/0'
>  File: /proc/self/fd/0
>  Size: 0               Blocks: 0          IO Block: 4096   fifo
> Device: bh/11d  Inode: 7193        Links: 1
> Access: (0600/prw-------)  Uid: (    0/    root)   Gid: (    0/    root)
> Access: 2020-04-30 18:29:01.000000000
> Modify: 2020-04-30 18:29:01.000000000
> Change: 2020-04-30 18:29:01.000000000
> 
> i haven't seen this behaviour with openssh and affects some
> scripts that use /dev/stdin, /dev/stdout, /dev/stderr
> (which just point to /proc/self/fd/{1,2,3})
> 
> if there is a simple workaround i'd like to hear about it.
> thanks

Reply via email to