私たちはWebアプリケーションを使用して資産管理アプリケーションを作成しましたphp
。このアプリケーションにより、ユーザーは資産(画像や3Dモデルなどのバイナリファイル)を参照、アップロード、名前の変更、および置き換えることができます。
私たちはWindows環境で開発し、すべてがうまく機能しますが、Linuxサーバー(joyent)でホストされている場合は、権限の問題が発生します。以下は環境設定です
パブリックWebルートフォルダはhome/jill/web/public
(webroot)にあります。すべてのアセットはhome/jill/web/public/assets
(アセットルート)とサブフォルダにあります.
資産管理にアクセスする方法のユースケースは次のとおりです。
- FTPプログラムとFTPユーザー(ftpuser)を使用してすべての資産を一括アップロードします。
- すべての資産を一括アップロードするには、webadminユーザー(jill)を使用します。
home/jill/web/public
- Webアプリケーションを使用したリソースのアップロード(デフォルトのWebユーザーはwww)
上記のすべてのユースケースで、最新の修正ファイルでアセットを上書きします。これで、WebルートでホストされているFlashアプリケーション(ゲーム)があり、これらのすべてのリソースにアクセスしてアプリケーションにロードできます。
別のユーザーが元々作成したものとは異なるユーザーIDを使用してファイルを上書きまたは更新しようとすると、権限エラーが発生します。
例:元のFTPユーザーを使用してアップロードしたWebアプリケーションでファイルを上書きするか、その逆を試してください。
すべてのユーザーがwebroot \ assetsの下に作成したファイルまたはディレクトリをすべてのユーザーが変更できるように、この状況をどのように処理できますか?
私はunix / linuxに初めて触れる開発者ですが、これはグループとグループの権限処理に関連していると思いますが、それを設定する方法がわかりません。
答え1
以下を試してください。 (これはLubuntuでテストされました)
行くホーム/ルート/ウェブ/公共そして、次のことを行います。
ls -la
そこにあるファイルとフォルダの詳細が表示されます。そのうちの1つが資産です(これは単なる例であり、資産の詳細はさまざまです)。
-rw-r----- 1 user group 9275204 Jun 13 15:27 assets
アイデアは、新しいグループを作成し、それを資産の所有者にし、すべてのユーザーをそのグループに追加することです。
サーバーに新しいグループを作成します。
groupadd assetgroup
新しいグループにユーザーを追加する:
usermod -a -G assetgroup ftpuser
usermod -a -G assetgroup jill
usermod -a -G assetgroup www
所有権を変更して資産フォルダ資産グループ。 (-Rは再帰的変更を意味する)
sudo chgrp -R assetgroup assets/
答え2
これは基本的に次の2つのことを行います。
1)既存のファイルとディレクトリに対する権限:
Alanの回答は、主に以下をカバーしています。特別なグループを作成し、必要なすべてのユーザーを追加します。書く文書。確実にする目次アップロードする場所はそれ自体です。書き込み可能このグループの場合:chmod 0775 path/to/the/directory
.すべての既存のファイルが必要ですchmod 0664
。
「マジック」の数字は8進数で、setuid、所有者権限、グループ権限、世界権限という3つの権限を表します。 setuidに興味がないので、それを維持してください0
。残りの場合、8進数(0-7)は権限を伝えます。ビット0がオンの場合、ファイル/ディレクトリは実行可能です(ディレクトリの場合、これは入力できることを意味します)。ビット 1 がオンの場合、ファイル/ディレクトリは書き込み可能で、2 番目のディレクトリは管理的に読み取ることができます。つまり、0754
所有者にはすべての権限があり、グループメンバーは読み取りおよび実行できますが、残りの人は読み取りのみ可能です。次のようにニーモニックを使用して同じ内容を作成できますchmod u=rwx,g=rx,o=r
。man chmod
詳細についてはLinuxシステムを参照してください。
2)新しいファイルに対する権限:
umask
アップロード時に設定を見つけてください。新しいファイルを作成する権限について説明します。 Linux/UNIX システムでman umask
振り返ると、設定したビットumask
(chmod
上記と同じ表記法)は入らないようにする次回から新しく作成されたファイルに対する権限 - たとえば、に設定すると、ファイルumask
は0023
すべての権限で作成され、デフォルトグループでは書き込みできず、他のユーザーは書き込みも実行もできません。ここでビット0を設定するのは一般的に悪い考えです。ディレクトリが作成されると実行できなくなり、ディレクトリに完全に入るのを防ぐためです(0023
例:「他人」の場合はビットが設定されたユーザセットの場合)。
それに加えて、デフォルトのファイルシステムがデフォルトのACLをサポートしている場合は、そのACLをディレクトリに割り当てることをお勧めします。これにより、より細かいアクセス制御が可能になります(ACLはWindowsと同様にAccess Control Listを表します)。詳細についてはを参照してくださいman setfacl
。
太っているという警告:ファイルをグローバルに書き込み可能にするのは良い考えではありません!有効な権利を最小限に保ちます。