Istnieje coś takiego jak podsystem w (Otwartym) SSH: jest to program, który zostaje zaśmiecony, gdy poprosisz o coś innego niż interaktywną powłokę. Technicznie jest to po prostu plik wykonywalny na zdalnym hoście, który jest wykonywany execprzez sshddziecko po uwierzytelnieniu i wywołaniu setuid.
Możesz znaleźć standardową definicję podsystemu sftpw swojej konfiguracji SSH:
Subsystem sftp /usr/lib/openssh/sftp-server
Ponieważ jest to zwykły plik wykonywalny, a nie SUID lub specjalny w jakikolwiek inny sposób, możesz napisać skrypt powłoki, który zmieni wszelkie potrzebne atrybuty, a następnie po prostu uruchom oryginalną procedurę obsługi podsystemu.
Umieść następujący skrypt w /usr/lib/opensshfolderze jak np. sftp-fperm-server(Nie jest to wymagane, aby zachować rzeczy w jednym miejscu):
#!/bin/sh
umask 026
exec /usr/lib/openssh/sftp-server
Następnie dodaj wiersz na końcu /etc/ssh/sshd_config:
Subsystem sftp-fperm /usr/lib/openssh/sftp-fperm-server
Następnie uruchom ponownie sshd(nie zabija sesji przy ponownym uruchomieniu) i uruchom sftpz -s sftp-fpermopcją. Voila! pliki otrzymają nowy określony umask.
Jeśli nie chcesz określać tej opcji za każdym razem, po prostu zmień standardową definicję podsystemu. Nie wpłynie to na sesje interaktywne, więc nie ma szans na coś złamania.
Jeśli chcesz użyć newgrppolecenia, będzie trochę trudniej. newgrpzawsze uruchamia nową interaktywną powłokę, jednocześnie głupio nie pozwalając na przekazanie do niej żadnych parametrów, więc nie można jej używać jak umaskw poprzednim przykładzie. Ale możesz zastąpić ostatni wiersz skryptu:
SHELL=/usr/lib/openssh/sftp-server newgrp git
Właściwie wywołanie newgrpjakiegoś grupy należę do emituje żądanie hasła, więc nie byłem w stanie sprawdzić tego rozwiązania (mam na myśli tylko newgrpjedno), ale działa, kiedy przekazać /bin/idna moim laptopie (bez SSH), więc jeśli dostałem newgrppracę dla użytkownika nie powinny pojawić się żadne problemy.