web-dev-qa-db-ja.com

ファイルまたはディレクトリでchmod g + sを使用できるのはいつですか?

最近の新しい(Solaris 9)環境にデプロイする際の手順の1つは、一連のファイルとディレクトリを新しい場所にコピーし、グループUIDビットを(「chmod -R g + s」を使用して)すべてに適用することでした-rwxr-s ---のモードをすべてに与えるディレクトリツリー内のファイル。その結果、シェルスクリプトは、個別に開いて再保存しない限り実行されませんでした。ファイルをコピーする前に、ターゲットの親フォルダーに以前にg +を設定していたことを追加する必要があります。これにより、すべての新しいディレクトリの初期モードがdrwx​​r-s ----に設定されましたが、ファイルのモードは-rwxr-x ---でした

最終的にどのステップが問題を引き起こしたかを発見したので、そのステップを切り取って続行することができました。

ただし、最初に問題が発生した理由を説明することを期待して、ディレクトリとファイルに適用された場合の「s」ビットの意味を理解したいと思います。

32
Jordanhillbilly

ディレクトリg + sを設定すると、そのディレクトリで作成されたすべての新しいファイルのグループがディレクトリのグループに設定されます。

ファイルがデフォルトでグループ書き込みを持つようにumaskが設定されている場合、これは実際に共同作業の目的に非常に便利です。

注:これはLinuxでの動作方法であり、Solarisではまったく異なる動作をする可能性があります。

75
Powerlord

実行可能ファイルの場合、これは、ファイルが実行されるときに、ファイルを実行するユーザーのグループではなく、ファイルを所有するグループとして実行されることを意味します。

これは、ユーザーが1つのコマンドを実行するためだけに特定のグループの許可を引き受けることができるようにする場合に便利です。

ただし、ユーザーが権限を昇格できるため、セキュリティ上のリスクにもなります。このビットが設定されたスクリプトは、ユーザーがこれらの追加のアクセス許可を悪用できるようなことは何もしないことを知っておく必要があります。

12
SpoonMeiser

ファイルの場合、ファイルを実行するグ​​ループユーザーではなく、ファイルを所有するグループとしてファイルが実行されることを意味します。ユーザーが権限を持っていないことをユーザーに許可したい場合に使用できます。たとえば、私が使用しているDBMSの場合、誰でもデータベースのバックアップを許可するのが一般的です。 「dbms」グループのみがデータベースファイルへの読み取り/書き込みアクセス権を持っていますが、バックアッププログラムにはg + sが設定されており、誰でもデータベースに直接アクセスできます。

ディレクトリの場合、新しく作成されたディレクトリは、ファイルを作成したグループのユーザーではなく、ディレクトリを所有するグループによって所有されることを意味します。これの良い例は、sourceforge.netプロジェクトのWebスペースです。 3人の開発者がプロ​​ジェクトのWebサイトを管理しているとします。これで、そのうちの1人がファイルを作成した場合、彼だけがそのファイルに書き込むことができます(デフォルト)。これを回避するために、同じプロジェクトのすべてのユーザーも同じグループに属し、ディレクトリにはそのグループに対するrws特権があるため、ファイルを作成するユーザーは、グループに対して読み取りおよび書き込み可能として作成されます。

2
Milan Babuškov

特定の問題を少し拡張するために、sgid実行可能ファイルは、通常持っていないアクセス許可をユーザーに付与することで問題を引き起こす可能性があることは既に指摘されています。これはすべての実行可能ファイルの問題ですが、スクリプトの場合に潜在的に悪用可能な競合状態を作成します(具体的には、「ファイルの先頭にある#!で識別される外部インタープリターによって実行されるファイル」を意味します)スクリプトの権限で任意のコードを実行するために使用されます。

Unix派生物は、この脆弱性を軽減または排除することを目的とした長年のスキームを実装しており、そのほとんどには、suidまたはsgidスクリプトの実行を完全に禁止するか、いくつかのフープを介してそれを有効にする必要がある何らかの形式が含まれています(通常はスクリプトごとに)。そのようなスキームの1つは、sgidフラグをオンにした後にスクリプトを実行できない原因です。

0
Dave Sherohman

使用する必要がある場合:svn + sshを使用する場合のSVNファイル所有権の問題を修正します。誰かがそれはBDBでのみ起こると私に言ったが、FSFSストレージでもそのような問題があった。基本的に、ディレクトリ内の子ファイルの所有権を一貫性のあるものに保ちたい場合、他のユーザーがそこに書き込みを行っているときに、u + s/g + sを使用する必要があります。

0
William Yeung

Setuidおよびsetgidの詳細 here

0
Ryan