Come posso impostare umask predefinito in Apache su Debian?


14

Ho bisogno che i file creati da apache2 abbiano umask 002, ovvero gruppo rw, per impostazione predefinita.

Ho provato a inserire umask 002/ etc / apache2 / envvars e sebbene questo script venga eseguito come parte di apache start up ( apache2ctl graceful) l'umask non ha alcun effetto. Presumibilmente da qualche altra parte nel processo di avvio (ad esempio quando l'utente viene declassato da roota www-data) c'è un posto migliore per dirlo.

Ho letto post su Fedora e uno che suggerisce di inserire umask /etc/init.d/apache2ma nessuno di questi si applica / lavora in Debian (Squeeze).

Puoi aiutare?


1
Dovresti provare a riavviare Apache con "/etc/init.d/apache2 restart" o "service apache2 restart"
Jens Bradler,

sì, nessuno dei due ha funzionato.
artfulrobot,

Come si creano nuovi file (WebDAV, PHP)?
Jens Bradler,

Nel mio test, sto usando file_put_contents (). ma il codice che sto cercando di 'correggere' con questo è il modulo Less di Drupal (che crea versioni memorizzate nella cache dei file Less CSS elaborati). Il mio problema specifico è che non posso essere eseguito drush cc allcome mio utente perché si rovescia su tutti questi file di cache creati da dati www.
artfulrobot

Risposte:


11

Per essere sicuro che l'impostazione di umask abbia effetto, si prega di utilizzare un semplice test e non utilizzare altre applicazioni web per questo. È possibile che queste applicazioni cambino i diritti indipendentemente dall'impostazione umask di Apache.

Script PHP di prova semplice:

<?php
if ($fp = fopen(time() . '.txt', 'w')) {
  fwrite($fp, 'This is a simple test.');
  fclose($fp);
  echo "done";
} else {
  echo "error - cannot create file";
}
?>

Assicurarsi che l'utente www-data abbia accesso in scrittura alla cartella in cui è stato installato questo semplice file di prova.

Per far funzionare la nuova umask, controlla se il file / etc / apache2 / envvars verrà usato nel tuo file di avvio di Apache /etc/init.d/apache2:

...
PIDFILE=$(. /etc/apache2/envvars && echo $APACHE_PID_FILE)
...

Imposta la tua umask in / etc / apache2 / envvars:

...
# umask 002 to create files with 0664 and folders with 0775
umask 002

Riavvia Apache:

service apache2 restart

Controlla la differenza:

#> ls -l *.txt
-rw-rw-r-- 1 www-data www-data  14 2012-05-01 15:56 1335880583.txt
-rw-r--r-- 1 www-data www-data  14 2012-05-01 15:55 1335880540.txt

Grazie! Anche se mi faceva sentire un idiota leggerlo (avevo l'ottale sbagliato per il gruppo rw) * arrossire *
artfulrobot

Il tuo piccolo frammento di PHP ha salvato la mia sanità mentale, il plugin WordPress PDO Sqlite3 imposterà sempre il gruppo in modo che legga solo per il suo file di database.
Daniel Sokolowski,

2

Se si eseguono più siti, è possibile impostare l'autorizzazione di gruppo predefinita utilizzando gli elenchi di controllo di accesso (ACL) per directory in questo modo:

Imposta setidflag per forzare tutti i nuovi file a ereditare il gruppo dalla directory:

# chmod g+s wordpress

Crea nuovi file rwper le autorizzazioni di gruppo, ad es. in modo che www-datapossa scrivere su file SFTP inviati dall'utente di caricamento:

# setfacl --default --modify group::rwx wordpress 

Conferma che l'ACL è così:

# getfacl wordpress
# file: wordpress
# owner: carissacosgrove
# group: www-data
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Crea un file per confermare che ha funzionato:

# ll test
-rw-rw-r-- 1 root www-data 0 Feb 17 01:09 test

Non sarà problematico se l'applicazione sta cercando di scrivere file con un'autorizzazione ridotta di proposito?
berbt,

Niente affatto, l'applicazione scriverà solo con autorizzazioni ridotte che inizialmente mi hanno confuso per un po 'inizialmente - stackoverflow.com/questions/28454551/…
Daniel Sokolowski

1
Penso che a questo comando setfacl --default --modify group:rwx wordpressmanchino i due punti. Dovrebbe esseresetfacl --default --modify group::rwx wordpress
Marcos,

2

(Per Debian Stretch che usa systemd - Grazie womble!)

Inserire UMask=0002il file dell'unità di servizio systemd Apache2, ricaricare l'unità di servizio, quindi riavviare Apache2.

$ pwd
/etc/systemd/system/multi-user.target.wants

$ cat apache2.service
[Unità]
Descrizione = Server HTTP Apache
After = network.target remote-fs.target nss-lookup.target

[Servizio].
.
.
.
Umask = 0002

$ sudo systemctl daemon-reload
$ sudo systemctl restart apache2

Debian Squeeze non ha usato systemd.
Womble

Ah sì, alla fine del corpo della domanda originale dicono Debian Squeeze. Dato che la domanda era di ~ 8 anni fa ad oggi, e mentre stavo cercando di risolvere il problema posto nel titolo con l'ultimo Debian alla fine del 2019, questo è quello che ho pubblicato. Penso che la maggior parte delle persone che cercano una soluzione oggi rispetto a otto anni fa possano trarre beneficio dalla mia soluzione, quindi lascerò semplicemente ciò che ho inserito. Grazie per averlo sottolineato.
duplexddaann,
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.