Il server SFTP OpenSSH utilizza umask o conserva le autorizzazioni lato client dopo il comando put (ambiente chroot)?


13

So che questa domanda è già stata discussa, ma leggendo i post non sono riuscito a capire le risposte, perché alcuni hanno detto "sì, umask può funzionare", e altri dicono "OpenSSH put command conserva sempre le autorizzazioni"

Prima di tutto solo per precisare:

  • Uso OpenSSH 5.9 su RHEL 6.2
  • Ho configurato un server SFTP chroot, usando il internal-sftpsottosistema, con -u 0002for umask
  • Preciso di non usare l' opzione -po-P

Da quello che ho letto da un lato: ci sono molti modi per definire umask per i trasferimenti SFTP:

  • opzione -udi internal-sftp(o sftp-server), da OpenSSH 5.4
  • crea un wrapper su sftp-server(in cui impostiamo esplicitamente umask - questo non si adatta all'ambiente chrootato tra l'altro)
  • aggiungere una configurazione specifica nel pam.d/sshdfile

D'altra parte ho letto:

Il client e il server SFTP OpenSSH trasferiscono le autorizzazioni (come estensione) e creano il file remoto con le autorizzazioni sul lato locale. AFAICT, non c'è modo di disabilitare questo comportamento.

Quindi ho fatto il seguente test:

Sul mio client ho creato file MYFILEe directory MYDIRcon autorizzazioni 600 e 700.

Quindi con i sftpcomandi:

mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)

Se cambio le autorizzazioni da MYFILEe MYDIRsul lato client e lo ricarico di nuovo, ottengo le nuove autorizzazioni sul lato server.

Ho provato anche la pam.dsoluzione, ma non ha cambiato nulla.

Quindi ora sono confuso:

Da quello che ho testato e da una parte di ciò che ho letto, direi che OpenSSH conserva sempre le autorizzazioni. Ma poiché ci sono molti post che dicono che è possibile definire un umask, posso immaginare di fare una cosa sbagliata nelle mie configurazioni di test.

Gradirei un feedback con esperienza.

Grazie.

Risposte:


12

Innanzitutto, umask riguarda il server e non il client. Quindi chiedere se il putcomando del client OpenSSH usa umask è sbagliato. Dovresti chiedere se il server OpenSSH usa umask durante la creazione di un file come risultato del caricamento SFTP.

Ad ogni modo, cosa fa il client SFTP OpenSSH:

  • putsenza -Pflag, chiede al server di creare un file con le stesse autorizzazioni del file locale. Il server OpenSSH quindi (implicitamente secondo le regole * nix) applica umask.

  • putcon il -Pflag, inizia lo stesso, ma una volta completato il caricamento, il client chiede al server di impostare (ri) esplicitamente le autorizzazioni sullo stesso file locale (richiesta "chmod"). Per "chmod", l'umask non si applica.

  • mkdir, chiede al server di creare una directory con autorizzazioni 0777. Umask si applica implicitamente.

Ad ogni modo, credo che umask 0002 non abbia alcun effetto sui file con autorizzazioni 0600, poiché si escludono a vicenda. Dovresti provare la tua umask contro un file con autorizzazioni come 0644.

Quindi, in realtà, dovrebbe funzionare, se il sistema è configurato come descritto. Vedi le prove dalla mia scatola (Ubuntu con OpenSSH 6.2p2)

Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no

Vedi la differenza nelle autorizzazioni dopo putvs put -P.:

user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password: 
Connected to localhost.
sftp> cd somefolder 
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt

A proposito, l'ultima specifica SFTP definisce il comportamento del client e del server rispetto a umask. Come puoi vedere, OpenSSH in realtà lo viola, anche se OpenSSH implementa SFTP versione 3 che non aveva ancora menzionato umask.

7.6. permessi

...

Il server NON DOVREBBE applicare una 'umask' ai bit della modalità; ma dovrebbe impostare i bit di modalità come specificato dal client. Il client DEVE applicare una 'umask' appropriata ai bit della modalità prima di inviarli.


Ho già provato con molte autorizzazioni diverse, all'inizio avevo 755 per la mia directory sul lato client e volevo invece ottenere 775. Ma non ha funzionato. Sono d'accordo con te per -P leggendo la documentazione, ma anche senza quella bandiera ottengo sempre sul server le stesse autorizzazioni del client (qualunque siano le autorizzazioni)
drkzs

grazie per l'osservazione, ho cercato di migliorare il titolo e correggere un termine
drkz

Dovrebbe funzionare davvero, vedi il mio aggiornamento.
Martin Prikryl,

Sì, il tuo esempio funziona ... ma se cambi umask in 0002 non funziona più. Forse questo post sta sollevando lo stesso problema? tranne per il fatto che mi trovo in openssh5.9 e che l'opzione umask dovrebbe funzionare. La differenza tra la tua configurazione SSHD e la mia è che non uso ForceCommand, quindi specifico l'umask nella riga del sottosistema. (Proverò a pubblicare la configurazione e il risultato, ma il test di rete non è facilmente raggiungibile)
drkzs

1
Giusto per essere chiari su questo punto: The server SHOULD NOT apply a 'umask' si applica solo quando il client invia informazioni di autorizzazione . Quando il client non invia informazioni di autorizzazione, è previsto il comportamento di applicare un umask!
heiglandreas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.