does it simply write the pressed key into a buffer (available through a char-device?)
Да, я должен сказать.
И затем есть своего рода каскад от (низкоуровневой )консоли к tty (виртуальному )к псевдо -tty. Нажатие клавиши записывается в /dev/tty1 или /dev/tty5 в зависимости от того, какая «консоль» активна.
А в xterm (вывод ps axf):
467 tty1 Ss 0:38 \_ -bash
5820 tty1 S+ 0:00 \_ xinit fvwm -- vt9
5821 tty9 S<sl+ 54:15 \_ /usr/lib/Xorg :0 vt9
5831 tty1 S 0:00 \_ xterm -geometry +1+1 -n login fvwm
5833 pts/0 Ss+ 0:38 \_ fvwm
...
...
773 pts/0 S 0:07 \_ xterm
775 pts/2 Ss+ 0:00 | \_ bash
14452 pts/0 S 0:04 \_ xterm
14454 pts/1 Ss 0:00 | \_ bash
14507 pts/1 S 0:00 | \_ xfontsel
31044 pts/1 R+ 0:00 | \_ ps ax f
19549 pts/0 S 0:00 \_ xterm
19551 pts/3 Ss+ 0:00 \_ bash
Это показывает, как Xorg запускается на tty9 с tty1, и как fvwm (оконный менеджер )и xterm (эмулятор терминала )"берут" /dev/pts/0, и это новый оболочки, получающие /dev/pts/1, pts/2. пц/3 и так далее.
Теперь, независимо от того, активирую ли я этот bash-процесс pid 19551 pts/3, указав на его окно xterm, а затем нажму клавишу, или если я сделаю echo hello >/dev/pts/3
из консоли, например / dev/tty5 символы переходят к правильному процессу.
man ps
хорошо объясняет (, он перечисляет их )в разделе КОДЫ СОСТОЯНИЯ ПРОЦЕССА:
S interruptible sleep (waiting for an event to complete)
s is a session leader
+ is in the foreground process group
Я оставляю вас с этими ключевыми словами...
sftpsrv=/usr/libexec/openssh/sftp-server
cp -a ${sftpsrv} ${sftpsrv}.super
chmod 500 ${sftpsrv}.super
chown someuser ${sftpsrv}.super
/sbin/setcap cap_dac_read_search+ep ${sftpsrv}.super
Вам нужно подключиться к серверу таким образом:
sftp -s /usr/libexec/openssh/sftp-server.super address
И это работает!
ls -la /tmp | grep TEST
drwx------. 2 root root 60 Oct 29 13:08 TEST
sftp -s /usr/libexec/openssh/sftp-server.super localhost
user@localhost^s password:
Connected to localhost.
sftp> cd /tmp/TEST
sftp> ls
123
/tmp/TEST
принадлежит пользователю root и имеет права доступа 700
.
Вот возможное непроверенное решение на случай, если ваш клиент не может запросить бинарный файл пользовательского сервера sftp -:
Match User someuser
Subsystem sftp /usr/libexec/openssh/sftp-server.super