ホームページ  >  記事  >  バックエンド開発  >  Linux で実行するときに PHP ファイルのアクセス許可を制御する方法は何ですか?

Linux で実行するときに PHP ファイルのアクセス許可を制御する方法は何ですか?

不言
不言オリジナル
2018-07-23 17:49:401450ブラウズ

PHP のファイル権限にはどのような種類がありますか? Linux で PHP 上でファイルを実行するときにファイルのアクセス許可を制御する方法は何ですか?次の記事では、LinuxでPHPを実行する際のファイルパーミッションの方法を紹介します。

1. ファイルのパーミッションと所有権

1. ファイルには 3 種類のパーミッションがあります。便宜上、数字に置き換えることができます。このように、数字を足したり引いたりすることで、次のことができます。 1 つの数字だけ。このファイルの権限を示します。たとえば、7=4 2 1 は、読み取り、書き込み、実行の 3 つの権限があることを意味します。6=4 2 は、読み取りと書き込みの権限はあるが、実行権限がないことを意味します。

#2. Lenovo Web アプリケーションの rbac 権限管理など、Linux でもユーザー権限管理があります。ユーザーにはユーザー名とユーザー グループがあります。通常、ユーザーを作成するときは、グループを作成します。同じ名前のものが同時に作成されます。

まず root アカウントでログインし、新しいディレクトリとファイルを作成します

#新建目录
mkdir abc
#新建文件
touch abc.txt
#查看
ls -all

確認すると、次のようになります。

#d开头的为目录,-开头为文件,还有l开头的为连接等
drwxr-xr-x  2 root root 4096 Jun 6 10:23 abc
-rw-r--r--  1 root root  0 Jun 6 10:23 abc.txt

まず青い部分を見てください。上記では、最初の数字が識別子で、最初の数字を削除し、その後は 3 桁ごとに区切ります。例として abc フォルダーを取り上げます: d | rws | r-x | r-x

So abc フォルダーは、所有者が rwx (7) を所有し、グループが rx(5) を所有し、その他が rx(5) を所有することを意味します。

同様に、上のファイルの赤い部分は所有者名と所属グループ名、つまりabcフォルダの所有者はrootと所属グループです。ルートです。現時点:

a. root ユーザーが abc フォルダーにアクセスする場合、そのユーザーは所有者に相当し、7 つの権限を持ちます

b. 新しいユーザー名テスト ユーザー グループが root の場合abc フォルダへのアクセスは、権限 5

#c を持つグループと同等です。新しいユーザー名がテストされ、ユーザー グループが abc フォルダへのアクセスをテストする場合、権限 5

#2. 各ファイルのパーミッションの役割

本当はテストしながら説明したかったのですが、面倒だったので結果だけお伝えします。新しいユーザーを自分で作成し、権限を変更して自分でテストできます。

1. ディレクトリ

a. ディレクトリを入力します (例: cd コマンド)。必要な権限は実行権限 (x) です。

b. ディレクトリ内のファイルを表示します (例: cd コマンド)。 ls コマンド、必要な権限は読み取り権限 (r)

c. ディレクトリ内のフォルダー/ファイルの作成と削除、つまり mkdir/touch ネーミング、必要な権限は書き込み権限 (w)

ちなみに、次のディレクトリは次のレベルにのみ影響し、世代には影響しません。たとえば、ディレクトリ abc/sub/ です。abc に w 権限がなく、sub に w 権限がある場合、sub にファイルを作成できますもちろん、abc も必要です。x 権限を持っている場合は、作成はおろか、入ることもできませんが、(root 管理者を切り替えることで)入ることができる限り、abc の影響を受けなくなります。サブのみ。

通常、ディレクトリには読み取りおよび実行権限である 5 (rx) 権限が与えられます。画像のアップロードやキャッシュなど、作成する必要があるディレクトリのみに 7 (rwx) 権限が与えられます。

2. ファイル

a. ファイルを開くには、cat/vim コマンドを使用して開くことができます。必要な権限は読み取り権限 (r)

b. 変更するにはファイルを開くには、cat/vim コマンドを使用できます。 開いて保存します。必要な権限は書き込み権限です (w)

c. ファイルの実行。./abc.out などを直接実行できます。権限は実行権限(x)

ここで説明が必要なのは、PHP(またはシェルなど)をコマンドラインで実行するかWeb側で実行するかを実行と呼ぶことです。ファイルを読み込み、PHP カーネルで解析するため、読み取り権限 (r) がある限り、解析できます。

通常、ファイルには読み取り権限である 4(r) 権限が与えられます。ファイルにコンテンツを書き込む必要があるログ、キャッシュなどのみに 6(r​​x) 権限が与えられます。

755、777、および 644 のアクセス許可が上記で言及されておらず、単一のアクセス許可のみが記載されている理由は、Web サイト ディレクトリのアクセス許可が、実行中に使用されるユーザーに関連していることが保証できないためです。実行中のユーザーは所有者、グループ、その他の可能性があります

3. php 実行時の権限

ssh で Linux に接続するときにログインするためのユーザー名が必要です。同様に、php も次のことを行う必要があります。 PHP 関連ファイルの処理も、特定のユーザーの下で操作されます。ユーザーはどこで作成または定義されますか? 通常、PHP 環境のインストール時に作成されます。たとえば、Apache、nginx およびその他の環境では、デフォルトでユーザーとユーザー グループが作成されます。このユーザーは php を読み取るときに使用されます。構成ファイルを表示することで確認できます:

#apache在配置文件httpd.conf
User www
Group www
#nginx在配置文件nginx.conf
user www www;

または、名前を付けてプロセスを表示します:

#查看apache进程
ps -ef|grep httpd
#查看nginx进程
ps -ef|grep nginx
#查看php-pfm进行
ps -ef|grep php-pfm

Apache を例に取ると、次のように表示されます。

root   1663   1 0 09:14 ?    00:00:00 /www/wdlinux/apache/bin/httpd//主进程
www    1697 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd//子进程
www    1698 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd

最初の行は、主に非 root で実行しているユーザーを示します。上記の説明は、www ユーザーが Apache プロセスを実行して php ファイルを処理していることを示しています。

ここで注意したいのは、php-pfm がインストールされている場合は、php-pfm の実行時にユーザー名とユーザーグループも確認する必要があるということです。 (インストールしていないので実践していません)

デフォルトは他のユーザーやnobodyやapacheなどのユーザーグループになっている可能性があります。上記は修正済みです。このとき、Web サイトのファイルがどのユーザーに属しているかを確認するには、Web サイトのディレクトリで ls-all を使用する必要があります。いくつかの状況で説明しましょう:

a. たとえば、Web サイトの所有者は次のとおりです:

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
...

Web サイトの所有者は www で、php 実行プログラムも www です。これは、所有者の権限があることを意味します。上記のシステム フォルダー内の 755 のうち 55 はまったく機能しません。7xx である限り、機能します。 7 (rwx) 権限で実行されます。

b. Web サイト所有者が次のような場合:

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的用户和用户组,二是修改网站文件的所有者和所有组这两个方向来修改,以确保网站的安全。

以上,只是基础的权限说明。

相关推荐:

php以fastCGI的方式运行时文件系统权限问题及解决方法

以上がLinux で実行するときに PHP ファイルのアクセス許可を制御する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。