web-dev-qa-db-ja.com

グループ書き込み可能なsuexec対応のCGIスクリプトを有効にする方法は?

複数の人がアクセスでき、CGIまたはPHPスクリプト)を実行している可能性のある共有ウェブスペースを部門のウェブサーバーに設定するように依頼されました。ウェブスペースを管理している人は、それを使用することを決定する可能性がありますファイル送信の場合、スクリプトによって作成されたすべてのファイルにアクセスする必要があることを意味します。ScientificLinux6でApacheを実行しています。

複数のユーザーがWebスペースへの書き込みアクセス権を必要とするため、標準的なアプローチは、関連するすべてのユーザーが属するグループを作成し、Webスペース内のディレクトリのアクセス許可をg+wsに設定することです。 suexecは、ファイルがグループ書き込み可能であることに不満を持っており、それらの実行を拒否します。

これを設定して、メインのApacheアカウントとは異なるアカウントでスクリプトが実行されるようにするにはどうすればよいですか(そして、notにいるユーザーとは異なります。ウェブスペースのグループ)?説明責任(およびその他の)の理由から、このWebスペースを維持するためにさまざまな人々が使用しなければならない共有アカウントを作成する必要はありません。

もう少し詳しく説明すると、現在の設定は次のとおりです。ホームディレクトリがNFS上にあり、必要に応じて自動マウントされるユーザーがいます。ほとんどの人は、mod_userdirを介してアクセスする個人のWebスペースを使用するだけです。過去に、特定のアカウントに関連付けられていないが、複数のアカウントによるアクセスを容易にするためにグループ所有権が設定されている追加の自動マウントディレクトリをNFSサーバーに作成することにより、共有Webスペースに対するいくつかの要求に対応しました。これまで、これらの共有スペースには静的コンテンツしか含まれていなかったため(関係者がスクリプトを実行しないことを信頼していました)、この種のスペースのsuexec関連の問題に対処する必要はありませんでした。


編集:ユーザーはスクリプトによって作成されたファイルにアクセスする必要がある場合があることに注意してください。

1
asciiphil

このコンテキストでの説明責任を確保し、公開されたコンテンツの正しい所有権と権限を提供するために、 this の記事で説明されているワークフローのわずかに変更されたバージョンを使用します。

これが私が実装した方法です。ほとんどの部分は交換可能であることに注意してください。

  • 公開されたすべてのコンテンツは、バージョン管理システム(この場合はgit)によって管理されます
  • ユーザーは、RSA公開鍵とともにKerberizedLDAPに登録された名目アカウントを持っています
  • 以前は、このような公開鍵を使用して、gitosis/gitoliteを使用してさまざまなリポジトリへのアクセスを許可していましたが、git-Shellでプレーンgitを使用することもできます。
  • しばらく前に、LDAP認証を提供するgitblitに移動しました。 gitblitのWebUIにアクセスするには、有効なKerberosチケットが必要です。
  • リポジトリには、以下を含むスクリプトにシンボリックリンクされた更新後フックがあります。

#!/bin/sh

Sudo /usr/local/sbin/publisher-hub2live

exit 0

許可されていないユーザーがスクリプトに直接アクセスすることはできません。

# ls -lrt /usr/local/sbin/publisher-hub2live
-rwx------. 1 root root 400 Oct 12  2012 /usr/local/sbin/publisher-hub2live

したがって、sudorule:

Defaults:git   !requiretty
git   Host_Alias = (root) NOPASSWD: /usr/local/sbin/publisher-hub2live

gitをリポジトリの実際の所有者に置き換えます。

パブリッシャースクリプトの内容は、ここで「魔法」として機能します(簡略版)。


#!/bin/sh

echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo

cd /path/to/live/repo || exit
umask 0022
unset GIT_DIR
git pull hub master

chown -R root:root /path/to/live/repo
find /path/to/live/repo/ -type d | xargs chmod u=rwx,go+rx
find /path/to/live/repo/ -type f | xargs chmod u=rw,go+r
restorecon -v -R /path/to/live/repo

exec git update-server-info

exit 0

所有者、グループ、DAC、およびMACのアクセス許可に関してニーズが異なる場合がありますが、ワークフローは同じです。

1
dawud