LinuxでのSUIDとSGIDの分析

  

今日、私はsuidとsgidの問題について研究しますが、これは筆記テストが厄介で、苦い涙が出る時期です。方法と解決方法

SUIDは設定ユーザーID、SGIDは設定グループIDの意味です。 Linuxでは、ls -lコマンドを使用してファイルの権限を確認できます。 lsコマンドで得られる表記法の形式は次のとおりです。-rwxr-xr-x。そのような表現は10あります。

9 8 7 6 5 4 3 2 1 0 - rwxr - xr - x

9番目のビットはファイルの種類を示します。 l、s、c、b、および - 、ビット8-6、5-3、および2-0は、rwxの形式で、ファイル所有者の許可、同じユーザーグループの許可、および他のユーザーの許可を示します。 Br>

 rは読み取り可能、ファイルの内容は読み取り可能、wはファイルの内容を変更可能、xは実行可能、このプログラムは実行可能 - ファイルが設定されている場合は対応する許可がないことを意味するSUIDまたはSGIDビットは、所有者の実行可能ビットまたは同じユーザーグループの権利で表されます。例(大文字と小文字を区別します):
 1、-rwsr-xr-xは、SUIDおよび所有者特権の実行可能ビットが2に設定されていることを意味します。-rwSr  -  r--はSUIDが設定され、所有者はパーミッションの実行可能ビットが設定されていない3、-rwxr-sr-xは、同じグループのユーザー権利のSGIDと実行可能ビットが設定されていることを示します4、-rw-r-Sr--は同じSGIDが設定されています実行可能ビットが設定されていない

実際、UNIXの実装では、ファイル許可は12桁の2進数で表されますこの位置の値が1の場合、対応する許可があることを意味します。

11 10 9 8 7 6 5 4 3 2 1 0 SGT rwxrwxrwx

11番目のビットはSUIDビット、10番目のビットはSGIDビット、9番目のビットはスティッキービット、8番目のビットは上記の3つのrwxビットに対応します。 。例:

-rwsr-xr-xの値は以下のとおりです。1 0 0 1 1 1 1 1 1 1 1 0 1 -rw-r-Sr--の値は次のとおりです。0 1 0 1 1 0 1 0 0 1 0 0

ファイルにSUIDとSUIDを追加するコマンドは次のとおりです。

 chmod u + s filename SUIDビットの設定chmod us filename SUIDの削除set chmod g + s filename SGIDビットの設定chmod gsファイル名SGID設定の削除

chmodコマンドを8進数で設定する方法もあります。あなたが前の12ビットのパーミッション表記を理解しているならば、同じく非常に簡単です。

 chmod 4xxx filename SUIDビットを設定

次に、SUIDとSGIDの詳細な解像度

SUIDとSGIDが実行プログラム内にあるので(プログラム実行可能ビットが設定されます)機能と実行可能ビットは通常のファイルとディレクトリファイルにのみ意味があるので、他の種類のファイルのSUIDビットとSGIDビットを設定してもあまり意味がありません。

1、通常のファイル

通常のファイルmyfileがfooユーザーに属している場合は実行可能ですSUIDビットがないため、lsコマンドは次のように表示されます。

-rwxr -xr-x 1 foo staff 7734 Apr 05 17:07 myfile //誰でもこのプログラムを実行できます。

UNIXカーネルは、リソースへのプロセスアクセスを決定するための基準に基づいていますか。ユーザーIDとグループIDを含む、このプロセスの実行ユーザーの(有効な)IDです。ユーザーはidコマンドを使用して、自分または他のユーザーのユーザーIDとグループIDを見つけることができます。一般的なユーザーIDとグループIDの他に、有効なIDという有効なIDが2つあります(上記の4つのIDは、uid、gid、euid、egid)。カーネルは主に、euidとegidに基づいてリソースへのプロセスのアクセス権を決定します。

プロセスにSUIDまたはSGIDビットがない場合は、euid = uid egid = gidです。これは、プログラムを実行しているユーザーのuidとgidです。 kevinユーザーのuidとgidがそれぞれ204と202、fooユーザーのuidとgidが200、201で、kevinが実行しているmyfileプログラムによって形成されるプロセスのeuvin = uid = 204、egid = gid = 202の場合、カーネルはこれらの値に従って判断します。リソースへのプロセスアクセスの制限は、実際にはkevinユーザーがリソースにアクセスするための許可であり、fooとは関係ありません。

プログラムがSUIDを設定すると、euidとegidが実行中のプログラムの所有者のuidとgidになります。例えば、kevinユーザーがmyfileを実行すると、euid = 200、egid = 201、uid = 204、gidとなります。 = 202、プロセスはその所有者fooへのリソースアクセスを持ちます。

SUIDの役割は次のとおりです。適切な権限を持たないユーザーがプログラムを実行すると、自分がアクセスできないリソースにアクセスすることができます。 Passwdは非常に明確な例です。 SUIDはSGIDよりも優先度が高く、実行可能プログラムがSUIDを設定すると、そのSGIDが自動的に対応するegidになります。

次に、例を示します。

UNIXシステムには、/dev /kmemデバイスファイルがあります。これは、コアプログラムによってアクセスされるデータ(ユーザーのパスワードを含む)を格納するキャラクタ型デバイスファイルです。そのため、このファイルは一般のユーザーは読み書きすることはできません許可は次のように設定されています:

cr - r ----- 1ルートシステム2、1 May 25 1998 kmem

ただしpsおよびその他のプログラムこのファイルを読むために、ps許可は次のように設定されています。

-r-xr-sr-x 1 binシステム59346 Apr 05 1998 ps

これはSGIDを設定するプログラムです。 psのユーザーはrootではなくbinであるため、kmemにアクセスするようにSUIDを設定することはできませんが、binとrootがシステムグループに属していることに誰もが気付き、psはSGIDを設定します。ファイルkmemの同じユーザーグループの権限は読み取り可能なので、平均的なユーザーは問題なくpsを実行できます。

しかし、psプログラムをrootユーザーのプログラムとして設定し、次にSUIDビットを設定しないのではないかと言う人もいます。これで問題は解決できますが、実際には解決しないのですか? SGIDのリスクはSUIDよりはるかに小さいので、システムのセキュリティ上の理由から、可能であればSUIDプログラムの代わりにSGIDを使用する必要があります。

2、ディレクトリファイル

SUIDはディレクトリに影響を与えません。ディレクトリにSGIDビットが設定されている場合、そのディレクトリへの書き込みアクセス権があれば、そのディレクトリに作成されたファイルのグループは自動的にディレクトリの所有者が存在するグループに変換され、ファイルの所有者は変わりません。または、このファイルを作成したユーザーに属しています。

3、SUIDファイルとSGIDファイルを検索するにはfindコマンドを使用します。

 find -perm + 4000 -type f 

SUIDが1の一般的なファイルをすべて検索します。

 find -perm +2000 -type f 

SGIDが1の一般的なファイルをすべて検索

Copyright © Windowsの知識 All Rights Reserved