私はLinuxで権限を設定する方法を知っていると思いました。私は明らかにそうは思わない。
「web3」というユーザーがいます。このユーザーは、CPannelなどのサーバー管理アプリケーションであるISPConfigによって自動的に作成されます。
サーバーに「Drush」というアプリケーションもインストールしました。 rootとしてログインした状態で「Drush」をインストールしました。アプリケーションは次の場所にあります。
/root/.composer/vendor/drush/drush/drush
ファイルとそのインクルードフォルダには、次の権限があります。
-rwxr-xr-x 1 root root
drwxr-xr-x 9 root root
このファイルは誰もが読み取りと実行を許可するので、「web3」ユーザーとしてログインし、上記のアプリケーションを実行しようとするたびに次のエラーメッセージが表示されるのはなぜですか?
/root/.composer/vendor/drush/drush/drush: Permission denied
以前もこの問題がありましたが、問題のあるユーザーにsudoフルroot権限を与えました。ローカル開発環境ではこれは大きな問題ではありません。私は今私専用のサーバーを管理していますが、この大きなハンマーソリューションは機能しません。
私は何が間違っていましたか?
助けてくれてありがとう!
答え1
/root/
ルートのホームディレクトリです。権限は、/root/
ルート以外の誰もその下のディレクトリツリー全体をナビゲートするのを防ぐために700が望ましいです。
ディレクトリツリーの上位レベルの権限は、root以外のユーザーとしてバイナリを実行するのを防ぎます。
何でもインストールするのは/root/
一般的ではありません。通常、複数のユーザーが使用する実行コードを/opt/
別のディレクトリにインストールします。
これが2つの主な「間違い」です。コードをインストールするためのより良い場所を見つけて、コードを使用したいユーザーがフルパスにアクセスできることを確認する必要があります。
最後に、他の人が指摘したように、インストールを完了するには通常ルートが必要ですが、結果ファイルは必ず必要な場合にのみルートが所有する必要があります。ほとんどの場合、特定のユーザー(www-dataユーザーやoracleユーザーなど)が作成され、コードが破損した場合にインプレッションが制限されます。あなたのアプリケーションについてはわかりませんが、web3ユーザーとしてインストールするか、rootとしてインストールした後で、この操作のために特別に作成された権限のないユーザーに権限を変更することをお勧めします。
一時的な方法で/root/
問題を解決するために権限を開こうとする衝動を抑制する必要があります。sudo
問題は、実行可能なコードをルートのホームディレクトリにインストールしないでください。
答え2
埋め込みフォルダの権限を確認するだけでは不十分です。ルートまでのすべての上位フォルダの権限を確認する必要があります。たとえば、次のようになります。
# ls -ld /root/.composer/vendor/drush/drush/drush \
/root/.composer/vendor/drush/drush \
/root/.composer/vendor/drush \
/root/.composer/vendor \
/root/.composer \
/root \
/
/root
ディレクトリに700(またはdrwx------
)の権限があるため、ユーザーがそのパスから進むのを防ぎますweb3
。他のユーザーにそのユーザーのホームディレクトリへのアクセス権を付与することは良い考えではありませんが、技術的にroot
必須であると思われる場合は、権限711()を付与できます。drwx--x--x
しかし、それも役に立たないかもしれません...
SELinuxがデフォルトで有効になっているCentOS 7を使用しています。
RHEL / CentOSには通常、一般ユーザーアカウントへの影響が少ないデフォルトのSELinux構成がありますが、システムサービス(Webサーバーなど)にはいくつかの重大な制限が適用されることがあります。
SELinuxでは、従来のUnixスタイルのユーザー/グループ/権限システムに関係なく、プロセスの特定の操作とすべての子孫を制限できます。特定のバイナリが実行されると、特定のシステムユーザーに対して、および他のさまざまな条件で自動的に「ロック」されるようにこれらの制限を設定できます。
WebサーバーのデフォルトのSELinux制限の1つは、/var/www
特にアクティブなディレクトリを使用しない限り、特にアクティブなディレクトリの外部へのアクセスをブロックすることです。SELinux ブール、SELinux ルールセットの切り替え可能なオプションです。私はこれがweb3ユーザーがDrushアプリにアクセスするのを妨げる別の問題かもしれないと思います。
Webサーバー(またはPHPインタプリタなどの子)が/var/www
他のユーザーに属さずに他のユーザーが作成したものにアクセスできるようにするには、次のコマンドを実行する必要があります。
# setsebool -P httpd_read_user_content 1
<service name>_selinux
RHEL / CentOSでは、各システムサービスには、その特定のサービスに関するSELinuxの制限とブール値に関する情報を含む追加のマニュアルページがあります。これらのマニュアルページは、次のRPMパッケージにありますselinux-policy-doc
。パッケージの詳細は次のとおりです。SELinuxが有効なシステムを使用している場合は、実行したいすべてのサービスのマニュアルページを読む必要があります。これによりSELinuxを簡単に扱うことができます。だからはるかに簡単です。
もちろん、インターネット上でSELinuxを無効にする方法について多くのアドバイスを見つけることができますが、セキュアサーバーを実行する予定であれば、これは最善の選択ではないかもしれません。