Come ottenere il pieno controllo delle autorizzazioni umask / PAM /?


11

// Aggiornato l'8 febbraio - Problemi in sospeso in breve:

  • Come smascherare le directory in modo diverso dai file?
  • Come umask su Nautilus copia / incolla?
  • Come impostare umask per SSHFS?

LA NOSTRA SITUAZIONE

Diverse persone della nostra azienda accedono a un server e caricano file. Devono tutti essere in grado di caricare e sovrascrivere gli stessi file. Hanno nomi utente diversi, ma fanno tutti parte dello stesso gruppo. Tuttavia, si tratta di un server Internet, quindi gli "altri" utenti dovrebbero avere (in generale) un accesso di sola lettura. Quindi quello che voglio avere sono queste autorizzazioni standard:

file: 664
directory: 771

Il mio obiettivo è che tutti gli utenti non debbano preoccuparsi delle autorizzazioni. Il server deve essere configurato in modo tale che tali autorizzazioni si applichino a tutti i file e directory, appena creati, copiati o sovrascritti. Solo quando avremo bisogno di alcune autorizzazioni speciali, lo cambieremo manualmente.

Carichiamo i file sul server tramite SFTP-ing in Nautilus, montando il server usando sshfs e accedendo a Nautilus come se fosse una cartella locale, e SCP-ing nella riga di comando. Questo in sostanza copre la nostra situazione e ciò che intendiamo fare.

Ora, ho letto molte cose sulla bellissima funzionalità umask. Da quello che capisco umask (insieme a PAM) dovrebbe permettermi di fare esattamente quello che voglio: impostare autorizzazioni standard per nuovi file e directory. Tuttavia, dopo molte ore di lettura e tentativi ed errori, non riesco ancora a farlo funzionare. Ottengo molti risultati inaspettati. Mi piace davvero avere una solida conoscenza dell'umask e avere molte domande senza risposta. Pubblicheremo di seguito queste domande, insieme alle mie scoperte e una spiegazione delle mie prove che hanno portato a queste domande. Dato che molte cose sembrano andare male, penso che sto facendo diverse cose sbagliate. Quindi, ci sono molte domande.

NOTA: sto usando Ubuntu 9.10 e quindi non posso cambiare sshd_config per impostare umask per il server SFTP. SSH installato OpenSSH_5.1p1 Debian-6ubuntu2 <richiesto OpenSSH 5.4p1. Quindi ecco le domande.

1. DEVO RIAVVIARE PER MODIFICARE I PAM CAMBIAMENTI?

Cominciamo con questo. C'erano così tanti file coinvolti e non sono stato in grado di capire cosa fa e cosa non influenza le cose, anche perché non sapevo se dovevo riavviare l'intero sistema per rendere effettive le modifiche di PAM. L'ho fatto dopo non aver visto i risultati previsti, ma è davvero necessario? Oppure posso semplicemente disconnettermi dal server e riconnettersi e i nuovi criteri PAM dovrebbero essere efficaci? O c'è qualche programma 'PAM' da ricaricare?

2. C'È UN SOLO FILE DA CAMBIARE CHE INFLUISCE SU TUTTI GLI UTENTI PER TUTTE LE SESSIONI?

Così ho finito per cambiare MOLTI file, mentre leggevo MOLTE cose diverse. Ho finito per impostare umask nei seguenti file:

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

Voglio che questa modifica si applichi a tutti gli utenti, quindi una sorta di modifica a livello di sistema sarebbe la migliore. Può essere raggiunto?

3. DOPO TUTTO, QUESTA COSA DELL'UMASK, FUNZIONA?

Quindi dopo aver cambiato umask a 0002 in ogni luogo possibile, eseguo dei test.

------------ SCP -----------

TEST 1:

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

Controlliamo le autorizzazioni:

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

AGGIORNAMENTO: risolto impostando SOLO umask in pam.d / common-sessioni (vedi commenti)

--------- ------------ SSH

TEST 2:

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- ----------- SFTP

Nautilus: sftp: // server / home /

Copia e incolla il nuovo file dal client al server (777 sul client)

TEST 3:

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

Crea un nuovo file tramite Nautilus. Controlla le autorizzazioni dei file nel terminale:

TEST 4:

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

Voglio dire ... COSA è appena successo qui ?! Noi dovremmo avere 644 ogni volta. Invece ottengo 711, 777, 600 e quindi una volta 644. E il 644 viene raggiunto solo quando si crea un nuovo file vuoto tramite SSH, che è lo scenario meno probabile.

Quindi sto chiedendo, umask / pam funziona dopo tutto?

AGGIORNAMENTO: risolto il test 4 impostando SOLO umask in pam.d / common-sessioni (vedi commenti)

4. COSA SIGNIFICA UMASK SSHFS?

A volte montiamo un server localmente, usando sshfs. Molto utile. Ma ancora una volta, abbiamo problemi di autorizzazioni.

Ecco come montiamo:

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

NOTA: usiamo umask = 113 perché apparentemente, sshfs inizia da 777 invece di 666, quindi con 113 otteniamo 664 che è l'autorizzazione del file desiderata.

Ma quello che succede ora è che vediamo tutti i file e le directory come se fossero 664. Navigiamo in Nautilus su / mnt e:

  • Tasto destro del mouse -> Nuovo file (nuovo file) --- TEST 5
  • Tasto destro del mouse -> Nuova cartella (nuova cartella) --- TEST 6
  • Copia e incolla un file 777 dal nostro client locale --- TEST 7

Quindi controlliamo sulla riga di comando:

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

Ma hey, controlliamo questa stessa cartella sul lato server:

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

Che cosa?! Le autorizzazioni per i file REAL sono molto diverse da quelle che vediamo in Nautilus. Quindi questa umask su sshfs crea semplicemente un 'filtro' che mostra permessi sui file irreali? E ho provato ad aprire un file da un altro utente, ma lo stesso gruppo che aveva autorizzazioni 600 reali ma 644 autorizzazioni "false", e non riuscivo ancora a leggere questo, quindi a che serve questo filtro ??

5. UMASK È TUTTO SUI FILE. MA CHE COSA CIRCA LE DIRECTORIES?

Dai miei test posso vedere che l'umask che viene applicato influenza in qualche modo anche i permessi della directory. Tuttavia, voglio che i miei file siano 664 (002) e le mie directory siano 771 (006). Quindi è possibile avere un umask diverso per le directory?

6. PERHAPS UMASK / PAM È DAVVERO RAFFREDDATO, MA UBUNTU È SOLO BUGGY?

Da un lato, ho letto argomenti di persone che hanno avuto successo con PAM / UMASK e Ubuntu. D'altra parte, ho trovato molti bug più vecchi e più recenti riguardanti umask / PAM / fuse su Ubuntu:

Quindi non so più cosa credere. Dovrei semplicemente rinunciare? Sarebbe ACL risolvere tutti i miei problemi? O ho ancora problemi con Ubuntu?

Un avvertimento con i backup che usano tar. Le distribuzioni di Red Hat / Centos supportano acls nel programma tar ma Ubuntu non supporta acls durante il backup. Ciò significa che tutti gli acl andranno persi quando si crea un backup.

Sono molto disposto ad aggiornare a Ubuntu 10.04 se ciò risolve anche i miei problemi, ma prima voglio capire cosa sta succedendo.

Risposte:


3

Qui potrebbero succedere molte cose.

Primi pensieri:

  • Sì, le modifiche pam.d hanno effetto immediato
  • /etc/pam.d/common-session è il posto migliore per impostare un valore predefinito umask
  • qualsiasi pam.d umask verrebbe sovrascritto da qualsiasi voce in entrata .bashrc,
    ma .bashrcviene letto solo in determinate circostanze (shell interattiva, senza login)
  • testfile (711) è molto strano
    • come viene /homemontato e stai usando gli ACL?
      (ad es. cosa fare ls -ld /homee getfacl /homestampare?)
    • ha fatto testfilegià esistente prima di te la copia, perché scpnon cambiare i permessi su un file già esistente (a meno che non si utilizza la -pbandiera)
  • Nautilus è noto per creare file in un modo diverso, non so perché o quali siano le regole
  • umask=0113 probabilmente causerà problemi
  • il server e il client eseguono lo stesso sistema operativo?
    ad esempio, se il client ha gli ACL abilitati o è Cygwin, il comportamento può essere diverso
  • il modo migliore per imporre permessi sani è usare ACL predefiniti, proprio perché, come hai scoperto, umaskpuò essere sovrascritto dall'utente in .bashrce .bash_profile.

Aggiornare:

  • umask=0113 per sshfs è sbagliato.
    1. Prova a montare senza specificare a umask
    2. Creare un nuovo file all'interno del punto di montaggio utilizzando touch.
    3. Dovresti vedere che diventa solo ad esempio -rw-r--r--, senza xbit
    4. Mascherando i xbit, potresti rompere le directory
      e i compilatori potrebbero non essere in grado di creare correttamente i file eseguibili

Soluzione:

Se non riusciamo a pensare a qualcosa di meglio, puoi usare famo gaminguardare i nuovi file creati e correggere le autorizzazioni su di essi, o anche solo uno script che viene eseguito periodicamente e imposta le autorizzazioni su tutti i file.


Grazie! OK, quindi ho rimosso TUTTE le impostazioni di umask ad eccezione di pam.d / common-sessioni. Ciò ha risolto diversi problemi! Test 1 (SCP) e Test 4 (Nuovo file in Nautilus) ora funzionano bene. Gli ostacoli ora stanno copiando un file con qualsiasi autorizzazione in Nautilus sul server (Test 3 - ancora 777 anziché 664). E i problemi della directory. Sia il server che il client sono Ubuntu (9.10 contro 10.10 però) e nessun ACL aggiuntivo è abilitato.

Sembra che copiare con Nautilus stia preservando le autorizzazioni come cp -po scp -pfarebbe.
Mikel,

Qualche idea su come cambiarlo ??

Che comportamento vuoi? È possibile impostare le autorizzazioni predefinite per i nuovi file utilizzando gli ACL predefiniti. Nautilus rispetterà l'ACL predefinito. Vedi vanemery.com/Linux/ACL/linux-acl.html per una panoramica e suse.de/~agruen/acl/linux-acls/online per tutti i dettagli.
Mikel,

Si noti che gli ACL predefiniti non applicano un set massimo di autorizzazioni, ma rendono tali autorizzazioni predefinite. cp -p, scp -pe la copia tramite Nautilus proverà comunque a rendere le autorizzazioni di copia uguali al file che si sta copiando.
Mikel,

0

Questo non è correlato a PAM / umask, ma potrebbe essere utile per te.

Se hai impostato una directory, tutti i file e le directory creati al suo interno vengono automaticamente assegnati al suo gruppo.

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file

Grazie! Non lo sapevo. Non risolve i problemi di autorizzazione, ma è davvero utile!


0

Gli ACL dovrebbero funzionare bene per te.

Impostare un ACL predefinito su tutte le cartelle per il gruppo, che verrà quindi ereditato da tutti i file e le directory futuri.

Qualcosa del genere setfacl -m d:g:uploaders:rwxdovrebbe funzionare.

Per correggere le autorizzazioni esistenti:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

Sembra che se "preserva" è impostato quando un file viene copiato, l'ACL predefinito non funziona. In tal caso, posso solo suggerire di eseguire i comandi find in cron o di monitorare le modifiche al filesystem.

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.