ホームページ  >  記事  >  運用・保守  >  Linux UIDの用途は何ですか

Linux UIDの用途は何ですか

藏色散人
藏色散人オリジナル
2023-03-13 09:40:502997ブラウズ

Linux uid の機能はユーザーを識別することであり、各ユーザーには UID があります。Linux には 3 つの UID 識別子があります: 1. RUID、実 UID、実際のユーザー ID; 2. EUID、実効 UID、実効ユーザー ID; 3. SUID、保存セット ユーザー ID、保存セット ユーザー ID。

Linux UIDの用途は何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux uid は何に役立ちますか?

Linux の UID

Linux では、UID はユーザー (alice、bob、root など) を識別するために使用されます。 Android では、UID はアプリケーションまたはシステム サービスを識別するために使用されます

1. Linux の UID

1.1 プロセスごとに 3 つの UID 値

各ユーザーには UID があります。

カーネルは、プロセスごとに 3 つの UID ID を維持します。 3 つの UID 識別子は、

RUID (実際の UID、実際のユーザー ID) EUID (実効 UID、実効ユーザー ID) SUID (保存された Set-user-ID 、保存された) です。設定ユーザーID)

  • RUID: 現在、どのユーザーとしてログインしていますか? 生成するプログラムを実行するプロセスの RUID は、このユーザーの UID です。
  • EUID: 現在のプロセスが実際に として実行される UID を参照します。通常の状況では、EUID は RUID と同じですが、プロセスに対応する 実行可能ファイルが SUID 権限 (つまり、rws の ) を持っている場合、プロセスの EUID は RUID の UID## になります。 実行可能ファイルの所有者。 SUID
  • : SUID 権限に関連する EUID のコピー。
1.2 バイナリ ファイルの SUID 権限

実行可能ファイルの passwd を例に挙げます。 パスワード ファイルの権限は次のとおりです。

-rwsr-xr-x


passwd の所有者は root ですが、他のユーザーにも passwd の実行権限があり、passwd 自体には SUID 権限 (s rws) 。 次に、非 root ユーザーが passwd 実行可能ファイルを実行すると、 生成されたプロセスの EUID

root ユーザーの UID になります。つまり、この場合、生成されたプロセスは実際に root ユーザーの ID を持つバイナリ ファイルを実行します。 ##SUID 権限は時間に依存することに注意してください。#:

はファイルの実行中のみ有効です 2. setuid 関数と setresuid 関数

##2.1 setuid 関数

関数プロトタイプ: int setuid(uid_t uid);

Linux では、setuid(uid) 関数の実行手順は次のとおりです。

(1) Root 特権プロセス (EUID 0 のプロセス) によって呼び出された場合、プロセスの RUID、EUID、および SUID を設定します。 . は uid で、0 を返します (2) 通常の権限プロセスによって呼び出され、uid が RUID または uid が SUID と等しい場合、プロセスの EUID を uid に設定し、0 (3) を返します) 通常の権限プロセスによって呼び出され、uid が RUID または SUID と等しくない場合、errno を EPERM に設定し、-1 を返します (実行失敗を示します)

上記では、パスワードを実行するプロセス、EUID は次のようになります。パスワードの所有者の UID (root) ユーザーの UID (0)。したがって、ケース(1)に該当します。

su ファイルには
-rwsr-xr-x
権限もあります。したがって、Android では、通常のプロセスが Runtime.getRuntime().exec("su") を通じてシェルプロセスを起動して su を実行する場合も (1) の状況に陥ります。

#2.2 setresuid 関数

参考 https://blog.csdn.net/damotiansheng/article/details/39674115

# #関数プロトタイプ: int setresuid(uid_t ruid, uid_t euid, uid_t suid);

次の条件のいずれかが満たされると、setresuid が実行されます。

①現在の euidプロセスはルート (AID_ROOT) です。
② 3 つのパラメータ ruid、euid、および suid はそれぞれ、現在のプロセスの特定の UID 値に等しいです。

例:

現在のプロセスが RUID=100、EUID=0、SUID=300

の場合、元の euid=0 現在のプロセスの RUID=100、EUID=300 であるため、setresuid(200,300,100) を実行できます。 SUID=200
これら 3 つのパラメータはすべて現在の UID の 1 つであるため、setresuid(200,300,100) は実行できます。
ただし、400 が現在の UID のいずれにも等しくないため、setresuid(100,200,400) は実行できません。 。

  • 3. getuid 関数と geteuid 関数
  • getuid は現在のプロセスの
  • RUID を返します

    geteuid は
  • を返します現在のプロセスの EUID

関連する推奨事項:「Linux ビデオ チュートリアル

以上がLinux UIDの用途は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。