私は開発コンピュータでMagento 2(オンラインストアソフトウェア)プロジェクトをホストしています。
ユーザーとグループの設定は次のとおりです。
user -> company
group -> www-data
Magento 2では、一部のファイルが実行時に(たとえば、サイトを再ロードするときなど)、自動的に作成されます。ただし、自動生成されたファイルの権限は次のとおりです。
company@server:/srv/www/vhosts/company_m2/generated/code$ ls -lah
total 64K
drwxrwxr-x 16 company www-data 4,0K Mär 3 14:28 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 13:50 ..
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 ADM
drwxrwxr-x 8 www-data www-data 4,0K Mär 3 14:28 Amasty
drwxrwxr-x 4 www-data www-data 4,0K Mär 3 14:27 Amazon
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Composer
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Dotdigitalgroup
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 EthanYehuda
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Ho
drwxrwxr-x 107 www-data www-data 4,0K Mär 3 14:28 Magento
drwxrwxr-x 5 black sudo 4,0K Mär 3 14:28 Migration
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 PayPal
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Psr
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Symfony
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Vertex
ご覧のとおり、3つのユーザー:グループの組み合わせがあります。
company www-data
www-data www-data
black sudo
常にその組み合わせを使用するようにどのように変更できますかcompany www-data
?
修正する:
上書きしてApacheユーザーをcompany
inに変更しました。/etc/apache2/envvars
export APACHE_RUN_USER=company
見たいここ。
また、@unxnutの提案に従って親フォルダの権限をdrwxrwsr-x
withに設定しましたchmod 2775
。
新しいファイルを作成すると、次のようになります。
drwxrwsr-x 18 company www-data 4,0K Mär 3 18:50 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 18:30 ..
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 ADM
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Aheadworks
drwxrwsr-x 13 black www-data 4,0K Mär 3 18:50 Amasty
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Amazon
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Composer
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Dotdigitalgroup
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 EthanYehuda
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Ho
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Klarna
drwxrwsr-x 118 black www-data 4,0K Mär 3 18:50 Magento
drwxrwsr-x 5 black www-data 4,0K Mär 3 18:50 Migration
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 PayPal
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Psr
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Symfony
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Vertex
ただし、ユーザーはまだフォルダ数が少なくなっていblack
ますcompany
。
私はこれらすべてが不要であると感じます。より大きな根本原因があるでしょう。 sgid または suid ビットがまったく設定されたフォルダを持たないラックスピードでホストされている別のサーバーがあり、それは魅力的に動作します。
答え1
ユーザーが新しいファイルまたはディレクトリを作成すると、通常はそのユーザーが所有します。一般ユーザーの場合は変更できません。ファイル所有者root
(またはアクセス権を持つユーザー)はCAP_CHOWN
ファイル所有者を変更できますが、プログラムは所有者を変更するために明示的にシステムコールを実行する必要があります。通常、ファイルを一括バックアップ/復元するように設計されたプログラムのみがこれを実行できます。
一般ユーザーが読み取り専用アクセス権のみを持つファイルを含むディレクトリに対する書き込みアクセス権を持っている場合は、問題のファイルのコピーを作成して元のファイルを削除して、問題のファイルの所有権を効果的にインポートできます。ファイル名を元の名前に変更します。
新しいファイル/ディレクトリがユーザー所有で誤って作成された場合は、そのファイル/ディレクトリを作成したblack
プロセスがそのユーザーとして実行されていることを意味できます。black
一部のプロセスが誤って user ではなく user で始まった場合や、company
そのユーザーにクローン操作またはファイルを作成/操作するその他の自動化されたプロセスがある場合があります。
これは、標準化されたサービス開始プロセスを使用するとエラーを最小限に抑えることができる状況の1つです。 Webサーバープロセスを直接起動するなどの操作に慣れている場合は、誤ってユーザーを誤ってapachectl start
実行するのが簡単であるため、エラーを修正した後に誤った権限を削除する必要があります。ただし、サーバープロセスを実行する必要があるユーザーを明示的に定義するsystemdなどを使用するか、起動スクリプトを使用して.service
サービスを開始する前に正しいユーザーとして実行されていることを確認し、常に標準ツールを使用してサービスを停止して開始します。場合、そのような間違いは避けられます。