権限について詳しく知りたいと思います。私が読んでいる内容はユーザーIDの設定そしてその用途。しかし、この特別なケースは私を混乱させます。
小さなスクリプトを作成し、設定が完了しました。スエイドスクリプトビットは次のようになります。
chmod u+s ramesh
権限が次のように設定されていることを確認しました。
-rwsrw-r-- 1 ramesh ramesh 29 Sep 30 10:09 ramesh
これで、setuidを使用しているすべてのユーザーがスクリプトを実行できると思います。これでコマンドを実行しました。
chmod u-x ramesh
許してくれましたが、
-rwSrw-r-- 1 ramesh ramesh 29 Sep 30 10:09 ramesh
今は理解S実行可能ビットがない setuid を示します。つまり、誰もこのファイルを実行できません。
だから私の質問は、設定の実際の目的は何ですか?S少しありますか?私は例の観点からこれを設定することを理解しようとしています。
答え1
これで、setuidを使用しているすべてのユーザーがスクリプトを実行できると思います。
完全なものではなく。すべてのユーザーがスクリプトを実行できるようにするには、a+rx
権限を設定するだけです。
chmod a+rx script
setuid は、スクリプトが常に次から始まることを意味します。所有者の権限つまり、次のバイナリがある場合:
martin@dogmeat ~ % touch dangerous
martin@dogmeat ~ % sudo chown root:root dangerous
martin@dogmeat ~ % sudo chmod a+rx,u+s dangerous
martin@dogmeat ~ % ll dangerous
-rwsrwxr-x 1 root root 0 Sep 30 17:23 dangerous*
このバイナリは、実行しているユーザーに関係なく常に root として実行されます。明らかにこれは危険なので、特にsetuidアプリケーションを書くときにsetuidに非常に注意する必要があります。また、Linuxでは本質的に安全ではないため、スクリプトでsetuidをまったく使用しないでください。
今、Sはsetuidに実行可能なビットがないことを意味することを理解しています。つまり、誰もこのファイルを実行できません。
だから私の質問は、Sビット設定の実際の用途は何ですか?私は例の観点からこれを設定することを理解しようとしています。
実際の目的はありません。 IMOは許可ビットの可能な組み合わせにすぎません。
答え2
ファイルを実行することはできませんが、setuidおよび/またはsetgidにする目的の1つは、アクセス制御リスト(ACL)を使用して特定のユーザーだけがファイルを実行できるようにすることです。たとえば、setuid rootでコマンドを実行したいが、誰もがコマンドを実行できないようにしたい場合があります。特定のユーザーまたは特定のグループのみを実行できるようにするには、通常は実行を無効にし、ACLを使用して制限付き実行を許可できます。
次の例では、仮想コマンドをインポートし、通常は実行できないようにし、setuidを設定し、ACLを使用してadmグループのメンバーがコマンドを実行できるようにします。
$ chown root.root privileged_command
$ chmod 4000 privileged_command
$ ls -l privileged_command
---S------ 1 root root 152104 Nov 17 21:15 privileged_command
$ setfacl -m g:adm:rx privileged_command
したがって、ファイル権限に応じてファイルはsetuidですが、実行可能ではありません(または読み取ることもできません)。ただし、アクセス制御リストは、adm グループのすべてのメンバーに読み取りおよび実行権限を付与します。
admグループのメンバーがファイルを実行している場合は、ファイル内のsetuid権限を使用してACLによって付与された実行権限に従って実行されます。他の人がそれを実行しようとすると、権限拒否エラーが発生します。
上記のsetfaclコマンドの後に実行されたファイルのディレクトリのリストは次のとおりです。
$ ls -l privileged_command
---Sr-x---+ 1 root root 152104 Nov 17 21:15 privileged_command
これは、ルートグループにファイルに対する読み取り/実行権限があることを示すように見えますが、実際には読み取り/実行権限を提供するACLがあることを示します。
これは、プログラムがsetuidになりたいのですが(通常)実行できない状況の例です。
答え3
すべての許可ビットは独立して設定またはクリアできます。一部の組み合わせは一般的で、他の組み合わせは実用的ではありません。 「None」にls
大文字を使用して、これが奇妙で誤った設定になる可能性があることを強調します。S
s
x
ファイルを誰も実行できない場合、そのファイルのsetuidビットとsetgidビットは関係ありません。ファイルの既存のUnix権限ビットがx
設定されていない場合でも、特定のユーザーまたはグループがファイルを実行できるようにするACLがある可能性があることに注意してください。
多くのUnixバリアント(LinuxおよびSolarisを含む)では、ディレクトリのsetgidビットは、そのディレクトリに作成されたファイルがディレクトリのグループID(setgidビットが設定されたときに使用されるBSDセマンティクス)またはプロセスの有効なグループID(System V)です。継承するかどうかを制御します。意味)、setgidビットがクリアされたときに使用されます)。
Solarisでは、実行できない通常のファイルのsetgidビットが強制ロックを有効にします。強制ロックは以下で許可されます。fcntl
ロック機構は必須です。つまり、あるプロセスがロックを保持し、別のプロセスがロックを使用しない場合、2番目のプロセスはファイルにアクセスできません。