您的位置首页>企业动态>

Linux进程权限的分析说明

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux进程权限的分析说明问题。Linux进程权限分析如下:在linux下,大多数人对文件

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux进程权限的分析说明问题。

Linux进程权限分析如下:

在linux下,大多数人对文件权限有更多的接触和熟悉。但是通常对进程权限知之甚少。总结了linux系统下进程权限存在的问题和现象。

需要强调的是,本文是在linux系统下讨论的,因为linux和unix之间有很多不同,不同的unix系统之间也有很多不同。

让我们从本文要讨论的对象列表开始:ruid(实际用户id: Realuserid)、euid(有效用户id)、suid(保存的用户id:saved userid)和fuid(文件系统用户ID)。

除了以上四个,还涉及到一个设置用户id位的位,也就是除了rwx之外我们通常所说的S标志位。此外,本文主要讨论了userid,groupid的规则基本相同,如rgid、egid、sgid、fgid等。所以本文不再重复对groupid的讨论。

首先检查这些uid有两种方式:一是ps命令(PS-AX-O ruid-O euid-O suid-O fuid-O PID-O FName)列出这些uid;其次,检查状态文件(cat /proc/2495/status | grep Uid)。

本文创建了五个测试用户test1~test5,用于本文的示例讨论,代表具有普通权限的普通用户。

I. int main(int argc,char * argv []) {while (1) sleep (1)当文件所有者用户和程序执行器用户为同一用户时;} $ Gmain。CPP-O a.out $ LL-RXR-XR-X.1测试1测试6780 Sep16 15336032A。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 3192 a . Out(看结果四个uid都是Test1;)现在让我们使用test2用户执行test1程序,并看到结果$ sutest2 503 503 503 3234a.out,然后使用root用户执行0 000 3257A.out。

看到这个结果,我们基本可以总结一下:

一般情况下。这四个标识只受执行用户的影响,不受文件所有者用户的影响。并且四个uid都等于执行用户的ID;

第二,将权限转移给其他用户。非根用户不能将权限转移给其他用户,只有根用户可以转移权限。

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 15336032 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错误”);if(setf uid(504)《0》)perror(“setf uid错误”);而(1)睡眠(1);或者if(setf suid(504)“0”)perror(“setf suid错误”);if(setfeuid(503)《0》)perror(“seteuid错误”);而(1)睡眠(1);用root用户执行,得到同样的结果:0 503 0 503 3614 a .在这里,让我总结一下:1。setuid和seteuid是有区别的。setuid是对根用户权限的永久放弃。转移到非根用户后,不能恢复到根用户。seteuid是根用户权限的临时放弃,可以通过seteuid(0)恢复到根权限。这应该是一个众所周知的特性,本文不会给出例子来演示。2.seteuid将使用euid和fuid集来更改euid值。

继续看S权限位对进程权限的影响。

第三,S旗影响euid、suid和fuid。

int main(int argc,char * argv[]){ while(1)sleep(1);} $"gmain . CPP $"ll-rwxr-xr-x . 1 test 1test 6780 sep 16 18336018 a . out $"chmod u s a . out $"ll-rwsr-xr-x . 1 test 1test 6780 sep 16 18336018 a . out由根用户执行。

使用S权限位最经典的情况是passwd命令。

让我们看看它们对文件权限的影响,构建一个uid、euid和fuid,看看哪个uid是创建的文件的所有者。

第四,影响用户文件权限的是fuid,而不是euid。这个uid是linux独有的属性,unix系统依赖euid来决定用户权限。

Int main(int argc,char * argv[]){ if(setf suid(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 7397 sep 16 18336053 a . out running check status,ruid为test1,euid为root,fuid为test2 502 0 503 4240 a . out $"ll-rws-r-x . 1 root 7397 sep 16 18:53 a . out-out1测试2测试0 9月16日18:54测试日志

5.权限继承:使用fork子进程时,所有子进程都继承父进程的四个uid,与父进程的uid相同。使用exec系列函数时,suid将设置为euid。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。