Linuxはプロセスの権限を深く理解します。
Linuxプロセス権限分析
linuxでは、ファイルの権限については、ほとんどの人が接触しています。よく知っています。しかし、プロセスの権限については、一般的にはあまり知られていません。この文章はlinuxシステムにおけるプロセス権限問題と現象をまとめます。
ここではlinuxとunixには多くの異なるところがあり、それぞれ異なるunixシステムも多くの違いがあるので、ここではlinuxシステムの下で議論する必要がある。
まず、本論文の討論対象として挙げられるのは、ruid(実際のユーザーID:real userid)、euid(有効ユーザー:effective userid)、suid(保存ユーザID:saved userid)、fuid(ファイルシステムユーザID)です。
上の4つに加えて、ユーザーIDビット(set user id bit)を設定するビット、すなわち、私たちが通常話している処rwx以外のsマークビットにも関連しています。
また、本文では主にuserid、groupidルールが基本的に同じであることを議論します。例えば、rgid、egid、sgid、fgidなどは、グループIDに関して重複した議論を行いません。
まず、これらのuidを見る方法は2つあります。一つはpsコマンド(ps-ax-o ruid-o euid-o suid-o fuid-o pid-o fname)はこれらのuidを並べます。二つ目はstatusファイルを確認します。(cat/proc/2495/status grep Uid)。
本論文では、5つのtestユーザtest 1〜test 5を作成して、本明細書でのsample討論の使用に用い、一般的な権限ユーザを表します。
一:ファイルオーナーユーザとプログラム実行者ユーザが同じユーザである場合
よくある場合には。これらの4つのIDは実行ユーザーの影響を受けており、ファイルのownerユーザーの影響を受けない。そして4つのuidは全部ユーザーのidを実行することに等しい。
二、譲渡権限は他のユーザーに与える。root以外のユーザーは他のユーザーに権限を譲ることができません。rootユーザーだけが譲ることができます。
三、sマークの影響はeuid、suid、及びfuidです。
以下では、文書の権限に対する彼らの影響を見てみます。ruid、euid、fuidとは違って、作成したファイルの所有者はどれですか?
四、ユーザーのファイル権限に影響を与えるのはfuidで、euidではなく、このuidはlinux特有の属性であり、unixシステムはeuidによってユーザー権限を判定する。
execシリーズ関数を使うと、suidをeuidにします。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。
linuxでは、ファイルの権限については、ほとんどの人が接触しています。よく知っています。しかし、プロセスの権限については、一般的にはあまり知られていません。この文章はlinuxシステムにおけるプロセス権限問題と現象をまとめます。
ここではlinuxとunixには多くの異なるところがあり、それぞれ異なるunixシステムも多くの違いがあるので、ここではlinuxシステムの下で議論する必要がある。
まず、本論文の討論対象として挙げられるのは、ruid(実際のユーザーID:real userid)、euid(有効ユーザー:effective userid)、suid(保存ユーザID:saved userid)、fuid(ファイルシステムユーザID)です。
上の4つに加えて、ユーザーIDビット(set user id bit)を設定するビット、すなわち、私たちが通常話している処rwx以外のsマークビットにも関連しています。
また、本文では主にuserid、groupidルールが基本的に同じであることを議論します。例えば、rgid、egid、sgid、fgidなどは、グループIDに関して重複した議論を行いません。
まず、これらのuidを見る方法は2つあります。一つはpsコマンド(ps-ax-o ruid-o euid-o suid-o fuid-o pid-o fname)はこれらのuidを並べます。二つ目はstatusファイルを確認します。(cat/proc/2495/status grep Uid)。
本論文では、5つのtestユーザtest 1〜test 5を作成して、本明細書でのsample討論の使用に用い、一般的な権限ユーザを表します。
一:ファイルオーナーユーザとプログラム実行者ユーザが同じユーザである場合
int main(int argc, char *argv[])
{
while(1)sleep(1);
}
$>g++ main.cpp -o a.out
$>ll
-rwxr-xr-x. 1 test1 test 6780 Sep 16 15:32 a.out
test1, test1 a.out
$>su test1
$>./a.out &
$>ps -ax -o ruid -o euid -o suid -o fuid -o pid -o fname | grep a.out
502 502 502 502 3192 a.out
( 4 uid test1;)
test2 test1
$su test2
503 503 503 503 3234 a.out
root
0 0 0 0 3257 a.out
この結果を見て、私達は基本的にまとめられます。よくある場合には。これらの4つのIDは実行ユーザーの影響を受けており、ファイルのownerユーザーの影響を受けない。そして4つのuidは全部ユーザーのidを実行することに等しい。
二、譲渡権限は他のユーザーに与える。root以外のユーザーは他のユーザーに権限を譲ることができません。rootユーザーだけが譲ることができます。
int main(int argc, char *argv[])
{
if( setuid(503) < 0) perror ("setuid error");
while(1)sleep(1);
}
$>ll
-rwxr-xr-x. 1 test1 test 6780 Sep 16 15:32 a.out
root
$>./a.out
, uid test2 。
503 503 503 503 3592 a.out
setuid seteuid , euid fuid test2
0 503 0 503 3614 a.out
setuid setfsuid , fuid test2
0 0 0 503 3636 a.out
if( seteuid(503) < 0) perror ("seteuid error");
if( setfsuid(504) < 0) perror ("setfsuid error");
while(1)sleep(1);
if( setfsuid(504) < 0) perror ("setfsuid error");
if( setfeuid(503) < 0) perror ("seteuid error");
while(1)sleep(1);
root ,
0 503 0 503 3614 a.out
:1、setuid seteuid ,setuid root , root ,
restore root ,seteuid root , seteuid(0),restore root 。
, 。
2、seteuid euid fuid euid 。
3、root setxxuid 。 root 。
引き続きs権限ビットのプロセス権限への影響を見てください。三、sマークの影響はeuid、suid、及びfuidです。
int main(int argc, char *argv[])
{
while(1)sleep(1);
}
$>g++ main.cpp
$>ll
-rwxr-xr-x. 1 test1 test 6780 Sep 16 18:18 a.out
$>chmod u+s a.out
$>ll
-rwsr-xr-x. 1 test1 test 6780 Sep 16 18:18 a.out
root , ID
0 502 502 502 4133 a.out
s権限ビット使用の最も古典的なケースは、passwdコマンドです。以下では、文書の権限に対する彼らの影響を見てみます。ruid、euid、fuidとは違って、作成したファイルの所有者はどれですか?
四、ユーザーのファイル権限に影響を与えるのはfuidで、euidではなく、このuidはlinux特有の属性であり、unixシステムはeuidによってユーザー権限を判定する。
int main(int argc, char *argv[])
{
if( setfsuid(503) < 0) perror ("setfsuid error");
FILE * fp = fopen("test.log", "a+");
if(fp == NULL)
{
perror ("fopen error");
}
else
{
fclose(fp);
}
while(1)sleep(1);
}
s , root, test1, fuid test2, 3 uid ,
$>ll
-rws---r-x. 1 root root 7397 Sep 16 18:53 a.out
,ruid test1,euid root,fuid test2
502 0 0 503 4240 a.out
$>ll
-rws---r-x. 1 root root 7397 Sep 16 18:53 a.out
-rw-rw-r--. 1 test2 test 0 Sep 16 18:54 test.log
五、権限の継承は、fork子プロセスを使用する時、子プロセスは全部父プロセスの四つのuidを継承します。父プロセスのuidと同じです。execシリーズ関数を使うと、suidをeuidにします。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。