Comprendre les permissions Unix (avec ACL)

J'essaie de définir correctement les permissions sur mon server. Actuellement, j'ai un certain nombre de directorys et de files chmod'd à 0777 – mais je ne suis pas à l'aise car c'est ainsi.

Donc, à l'aide d'un spécialist du standard server, j'ai installé mon ACL sur mon server virtuel partagé.

Lorsque je FTP au server comme mon count d'user FTP "abc", je peux faire tout ce qu'il faut pour faire (et à juste titre) car tous mes files et files appartiennent à "abc", le groupe est "abc" et le Le premier octet est réglé sur 7 (rwx). C'est ce que j'ai compris.

Mais voici où il devient gris foncé pour moi. PHP est défini comme user "personne".

  • alors quand quelqu'un navigue sur mes pages Web qui se termine en .php ou possède un PHP embedded, je suppose que le dernier octet contrôle l'access. Parce que tous mes dirs et files appartiennent à "abc" et assignés au groupe "abc", si le dernier octet était un 4 (r–) alors le server laisserait le browser lire le file. Si c'était un 6 (rw-) alors le server laisserait le browser écrire sur le file ou le directory, corriger?
  • et si le document Web ne se termine pas par .php ou aucun PHP n'est-il embedded? Quel est donc l'user?
  • Comment puis-je utiliser ACL pour ne pas autoriser 6 (rw-) ou même 7 (rwx)? [pas sûr de ce que fait ou signifie]

Il suffit de searchr une sorte de parameters de stratégie pour verrouiller de manière optimale mes files et mes files tout en permettant à mes scripts PHP de faire des téléchargements et d'écrire sur des files (de sorte que mes users ne m'appellent pas pour me dire "permission refusée".

Ok, merci à tous ceux qui veulent me prêter main forte. Il est grandement apprécié.

Les programmes sont exécutés avec une certaine identité d'user. PHP fonctionne généralement comme un module server web, et en tant que tel s'exécute avec le même user que le server web, à savoir "personne" dans votre cas.

Le browser fonctionne sur un système distant et, en tant que tel, ne peut pas écrire sur votre server. Seuls les process exécutés sur votre server peuvent l'écrire. Lorsque vous accédez à votre server via un browser, le browser request au server web en cours d'exécution sur votre server d'aller chercher certains files. Ainsi, les droits de file s'appliquent, même si le file est php, html ou autre.

Le bit d'exécution peut être important. Il définit si un file peut être exécuté comme un nouveau process (est un programme ou non). Les files PHP (ou pour la matière, tout autre type de programmes) s'exécutent car CGI doit être exécutable pour s'exécuter.

Le bit d'exécution est également nécessaire pour pouvoir répertorier un directory. C'est quelque chose de bizarre, mais c'est pourquoi les directorys sont exécutables.

Enfin, qu'en est-il de laisser votre php écrire sur le disque? Eh bien, vous devrez écrire dans un directory pouvant être écrit sur "personne". Vous pouvez utiliser les ACL pour y parvenir, au lieu de ne faire de personne le propriétaire du directory. N'hésitez pas à donner à personne le droit supplémentaire d'écrire dans le dossier qui vous intéresse.

Cependant, soyez prudent: il est très important que votre directory écrit ne soit pas sous la hiérarchie Web. Ce serait un fort obstacle de security: les attaquants pouvaient écrire des files exécutables là-bas, puis faire en sorte que le server Web les exécute, ce qui entraînerait toutes sortes d'attaques puissantes. Ne faites pas cela. Donc, si votre racine Web est / var / www, mettez votre directory inscriptible dans / var / mywrite ou ailleurs, mais pas sous / var / www en tout cas.