Maison > Article > développement back-end > Problèmes de gestion des autorisations Linux
Tout d'abord, je recommande une vidéo sur les autorisations Linux : Autorisations de base de la gestion des autorisations Linux Elle est très bien expliquée. Après l'avoir regardée, vous la comprendrez en gros.
1. Autorisations et propriété des fichiers
1. Les fichiers ont trois types d'autorisations, pour plus de commodité, ils peuvent être remplacés par des nombres. Vous pouvez utiliser un numéro pour identifier les autorisations de ce fichier en ajoutant et en soustrayant des nombres. Par exemple, 7=4+2+1 signifie qu'il dispose des trois autorisations : lire, écrire et exécuter. a des autorisations de lecture et d'écriture mais pas d'autorisations d'exécution, etc.
2. gestion des autorisations rbac de l'application Web Lenovo, etc. Il existe également une gestion des autorisations utilisateur sous les utilisateurs Linux. avoir des noms d'utilisateur et des groupes d'utilisateurs. Généralement, lors de la création d'un utilisateur, un groupe portant le même nom auquel appartient l'utilisateur sera créé.
Connectez-vous d'abord avec le compte root et créez un nouveau répertoire et un fichier
#新建目录mkdir abc #新建文件touch abc.txt #查看ls -all
Lorsque vous le vérifierez, vous trouverez :
#d开头的为目录,-开头为文件,还有l开头的为软链接等
Regardez d'abord la partie bleue ci-dessus. Le premier chiffre est l'identifiant. Supprimez le premier chiffre et séparez-le tous les trois chiffres par la suite. Prenez le dossier abc comme exemple : d | r-x
Donc, le dossier abc signifie que le propriétaire possède rwx (7), le groupe possède rx (5) et les autres possèdent rx (5).
De même, la partie rouge dans le fichier ci-dessus est le nom du propriétaire et le nom du groupe auquel il appartient. C'est-à-dire que le propriétaire du dossier abc est root et le groupe auquel il appartient. est racine. À ce moment :
a. Si l'utilisateur root accède au dossier abc, il est équivalent au propriétaire et dispose de 7 autorisations
b. Si un nouveau groupe d'utilisateurs de test de nom d'utilisateur est root. Accéder au dossier abc équivaut à un groupe, avec des autorisations de 5
c Si un nouveau nom d'utilisateur test et que le groupe d'utilisateurs est test accède au dossier abc, cela équivaut à un autre, avec des autorisations de 5
.2. Le rôle de chaque autorisation de fichier
Au départ, je voulais le tester et en parler, mais c'est trop gênant, alors parlons-en les résultats. Vous pouvez créer vous-même un nouvel utilisateur puis modifier les autorisations pour le tester vous-même.
1. Répertoire
a. Entrez le répertoire, c'est-à-dire la commande cd, l'autorisation requise est l'autorisation d'exécution (x)
b. ls, les autorisations requises sont les autorisations de lecture (r)
c. Créer et supprimer des dossiers/fichiers dans le répertoire, c'est-à-dire nommés mkdir/touch, et les autorisations requises sont les autorisations d'écriture (w)
Au fait, le répertoire n'affecte que le niveau suivant, pas la génération. C'est comme un répertoire abc/sub/ Si abc n'a pas l'autorisation w, mais que sub a l'autorisation w, vous pouvez créer des fichiers dans sub. . Bien sûr, abc a également besoin Si vous disposez de x autorisations, sinon vous ne pourrez pas entrer, encore moins créer, mais tant que vous pouvez entrer (en changeant d'administrateur root), vous ne serez plus affecté par abc. , seulement sous.
Généralement, nos répertoires recevront 5 autorisations (rx), qui sont des autorisations de lecture et d'exécution. Seuls les répertoires tels que le téléchargement d'images ou la mise en cache qui doivent être créés recevront 7 autorisations (rwx).
2. Fichier a. Pour ouvrir le fichier, vous pouvez utiliser la commande cat/vim L'autorisation requise est l'autorisation de lecture (r) b. vous pouvez utiliser la commande cat/vim Ouvrir et enregistrer, les autorisations requises sont les autorisations d'écriture (w) c. Exécution du fichier, vous pouvez exécuter directement ./abc.out, etc., les autorisations requises sont l'exécution. permissions (x) Ce qu'il faut expliquer ici, c'est que si PHP est exécuté à partir de la ligne de commande (similaire à l'exécution de php abc.php) ou exécuté côté Web, cela s'appelle exécution. le fichier et l'analyse dans le noyau PHP, donc tant que vous disposez de l'autorisation de lecture (r ). De même, par exemple, abc.sh, si vous exécutez ./abc.sh directement, vous avez besoin d'une autorisation d'exécution (x), mais l'exécution de la commande sh abc.sh nécessite une autorisation de lecture (r). Généralement, nos fichiers recevront 4 (r) autorisations, qui sont des autorisations de lecture. Seuls les journaux, caches, etc. qui doivent écrire du contenu dans le fichier recevront 6 (rx) autorisationsLa raison pour laquelle les autorisations 755, 777 et 644 ne sont pas mentionnées ci-dessus, mais seulement une seule autorisation, est que les autorisations de l'annuaire de votre site Web ne peuvent pas être garanties comme étant liées à l'utilisateur utilisé lors de l'exécution, ce qui signifie que le l'utilisateur lors de l'exécution peut être propriétaire, peut être un groupe ou autre
3 Autorisations lors de l'exécution de php
Nous nous connectons à Linux via Linux. ssh nous-mêmes Vous devez avoir un nom d'utilisateur pour vous connecter. De même, si PHP souhaite traiter des fichiers liés à PHP, il est également exploité sous un certain utilisateur. Où l'utilisateur est-il créé ou défini? Il est généralement créé lors de l'installation de l'environnement PHP. Par exemple, Apache, nginx et d'autres environnements créeront des utilisateurs et des groupes d'utilisateurs par défaut, et cet utilisateur est utilisé pour lire PHP. Vous pouvez confirmer en consultant le fichier de configuration :
#apache在配置文件httpd.conf User www Group www #nginx在配置文件nginx.conf user www www;Ou visualisez le processus via la commande :
#查看apache进程ps -ef|grep httpd #查看nginx进程ps -ef|grep nginx #查看php-pfm进行ps -ef|grep php-pfmEn prenant Apache comme exemple, il affichera :
第一列就是显示的哪个用户在执行它,主要看非root下的。上方说明是www用户在运行apache进程来处理php文件。一般来说apache/nginx会以root来启动主线程,然后fork出子线程来处理具体的业务,而子进程在创建时会根据配置文件中的用户名和用户组通过setuid和setgid命令来设置有效用户名和有效用户组。需要注意的是“有效”这两个字,例如,某个用户名为test,其所属组test,而apache中配置文件中设置的用户名为test,但是用户组设置为abc,这时就可能很疑惑了,那组到底是按照用户名所属的组还是配置文件中设置的组呢?答案是设置的,因为通过setgid变更了,具体谷歌百度搜索“有效用户”、“实际用户”、“setuid函数”等关键字。
这里需要注意的是,如果有安装php-pfm,则应该还需要查看php-pfm执行时的用户名及用户组。(没有安装,所以没实践过)
默认的可能是nobody或者apache等其它的用户及用户组,上方是已修改过的。此时应该在网站目录中用ls-all来确认下网站文件是属于哪个用户,分几种情况说明下吧:
a、例如网站所有者是这样:
drwxr-xr-x 2 www www 4096 Jun 6 10:23 system drwxr-xr-x 2 www www 4096 Jun 6 10:23 tmp-rw-r--r-- 1 www www 0 Jun 6 10:23 index.php ...
网站所有者为www,而php执行者也为www,那说明是具有owner权限,上方system文件夹中755中的55根本不起作用,只要是7xx就会以7(rwx)的权限来执行。
b、如果网站所有者是这样:
drwxr-xr-x 2 test www 4096 Jun 6 10:23 system drwxr-xr-x 2 test www 4096 Jun 6 10:23 tmp -rw-r--r-- 1 test www 0 Jun 6 10:23 index.php ...
网站所有者为test,所属组为www,而php执行者为www,执行组为www,那说明是说在同一组中,具有group权限,上方system文件夹中755中的7和5不起作用,只要是x5x就会以5(rx)的权限来执行。
c、如果网站所有者是这样:
drwxr-xr-x 2 test test 4096 Jun 6 10:23 system drwxr-xr-x 2 test test 4096 Jun 6 10:23 tmp -rw-r--r-- 1 test test 0 Jun 6 10:23 index.php ...
网站所有者为test,所属组为test,而php执行者为www,执行组为www,那说明是说根本没什么关系,具有other权限,上方system文件夹中755中的75不起作用,只要是xx5就会以5(rx)的权限来执行。
所以不能简单的说修改权限为755,644什么的,还需要确认程序的执行者和网站的所有者才能确定权限。
目前好多集成环境为了省事(嗯,lanmpv3等),将php的执行权限和网站所在目录都设置为www,此时一般创建完目录后为755,创建文件后为644,当php执行时,起作用的目录权限为7(所有目录拥有创建删除权限)和文件权限6(所有文件具有写权限),这种是不是挺不安全的?正常应该是目录为5,文件为4,当有特殊需求时才将权限设为7。如果出现上方说的这种情况,修改的方法一是修改apache/nginx的用户和用户组,二是修改网站文件的所有者和所有组这两个方向来修改,以确保网站的安全。
以上,只是基础的权限说明。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!