文件的uid、gid 进程的euid 、egid 、附加组ID(如果支持) 总结

 1.在 struct  file结构体中有:

unsigned int    f_uid, f_gid;//文件的所有者ID,所有者所在组ID

mode_t f_mode;

 

2stat()、fstat() 、lstat()三个函数将某文件(第一个参数指定)的状态填写到第二个参数所指的结构体struct stat中,在stat结构体中有:

uid_t st_uid;

gid_t st_gid;//这二者的作用同上

       mode_t st_mode;

 

3.    在进程控制块task_struct中有:

uid_t uid,euid,suid,fsuid;

gid_t gid,egid,sgid,fsgid;

表示含义:

域名

含义

uid、gid

实际用户标识符、有效组标识符:进程属于哪个用户和用户组

euid、egid、附加组ID

有效用户标识符、有效组标识符:决定对文件的访问权限

 

4.   通常,进程的euid等于进程的uid,egid等于gid;但是可以在文件模式字(f_mode)中设置特殊标志set-user-ID位(使用命令chmod u+s filename)和set-group-ID位(使用命令chmod g+s filename)使得当执行此文件时“设置进程的euid为文件的所有者ID(st_uid) 设置进程的egid为文件的用户组ID(st_gid)”,则可以对文件进行访问了(如对普通用户给予超级用户权限)。

 

如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置

2、-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置

3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置

4、-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被设置

其实在UNIX的实现中,文件权限用12个二进制位表示,如果该位置上的值是

1,表示有相应的权限:

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

S G T r w x r w x r w x

第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。

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

上面的-rwsr-xr-x的值为: 1 0 0 1 1 1 1 0 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 u-s filename 去掉SUID设置

chmod g+s filename 设置SGID位

chmod g-s filename 去掉SGID设置

另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位权限表示法也很简单。      

      

SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid;

S与s的区别,当对文件本身拥有执行权限时设置suid(或者sgid)时,会变成小写s,表示同时具有执行权限和suid(或者sgid);否则会变成大写S,表示不具备执行权限,没有执行权限的suid和sgid实际变得没有效果(因为程序不能执行,euid和egid不能改变为文件的所有者id)。

 

Sticky bit 粘住位

如果对一个目录设置了粘住位,则只有对该目录具有写权限的用户在满足下列条件之一的情况下,才能删除或更改该目录下的文件:

a.       拥有此文件

b.       拥有此目录

c.       是超级用户

如/tmp设置了粘住位:任何用户的可以在目录中创建文件,对目录的权限都是rwx,但是不能删除或更名属于其他人的文件。

 

5. 进程每次打开、创建或删除一个文件时,内核就进行文件访问权限测试,这种测试可能          涉及文件的所有者(st_uid和st_gid)、进程的有效ID(euid和egid)以及进程的附加   组ID(如果支持的话)。

测试过程:

(1)       若进程的euid是0(超级用户),则允许自由访问该文件;

(2)       若进程euid等于文件的st_uid,那么可以根据该文件给予拥有者的读、写、执行权限进行访问;

(3)       若进程的egid或附加组ID之一等于文件的st_gid,则根据文件给予同组用户的读、写、执行权限进行访问;

(4)       最后,只能根据文件给予其他用户的读、写、执行权限进行访问;

(5)       否则,拒绝该进程对文件的访问。

 

6.       新文件和目录的所有权(二者规则相同)

f_uid的设置为:新文件的f_uid设置为创建该文件的进程的euid;

f_gid的设置为:

新文件所在目录的set-group-ID位如果设置,则新文件的f_gid设置为所在目录文件的组ID(f_gid);如果没有设置该位,则将新文件的f_gid设置为创建进程的有效组ID(egid)(差不多是4的逆操作)。

 

7.       access测试函数(只起测试作用)

测试进程的实际用户ID(uid)和实际用户组ID(gid)对文件是否具有读、写、执行权限还可以测试文件是否存在。

测试过程同5,只是将“有效”改成:“实际”

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 修改文件giduid可以使用chown命令。其中,gid表示文件所属的uid表示文件所属的用户。使用chown命令时,可以通过指定新的giduid来修改文件的所属和所属用户。例如,要将文件file.txt的所属修改为group1,所属用户修改为user1,可以使用以下命令: chown user1:group1 file.txt 其中,user1和group1分别表示新的所属用户和所属file.txt表示要修改的文件名。注意,使用chown命令需要具有足够的权限。 ### 回答2: 要修改文件giduid,首先需要明确目标文件的路径和名称。然后,我们可以使用chown命令来修改文件uidgid。 chown命令的语法如下: chown [选项]... [所有人][:所属] 文件... 其中,选项是一些附加参数,如-R用于递归修改目录下的所有文件和子目录,其余的选项根据实际需要选择使用。[所有人]表示要修改的用户ID,[所属]表示要修改的ID,这两者可以使用用户名或用户ID进行标识。文件是要修改权限的目标文件或目录的路径。 例如,如果我们要将文件file1的uidgid修改为1000和2000,可以通过以下命令完成: chown 1000:2000 file1 如果我们需要递归地将目录dir1下的所有文件和子目录的uidgid修改为1000和2000,可以使用-R选项: chown -R 1000:2000 dir1 注意,在修改文件uidgid之前,需要确保我们具有足够的权限来更改文件的所有权。否则,我们可能会收到"Operation not permitted"的错误提示。 总结起来,要修改文件giduid,我们可以使用chown命令并提供要修改的用户IDID。这样,我们就可以在不同的目标文件上修改文件的所有权。 ### 回答3: 修改文件giduid是通过使用chown命令来实现的。chown命令用于改变文件或目录的拥有者和所属。 要修改文件gid,可以使用以下命令: chown :newgid filename 其中,newgid是要修改为的新的所属gidfilename是要修改的文件的路径和名称。这样,文件的所属就会被修改为newgid。 要修改文件uid,可以使用以下命令: chown newuid filename 其中,newuid是要修改为的新的拥有者的uidfilename是要修改的文件的路径和名称。这样,文件的拥有者就会被修改为newuid。 可以同时修改文件uidgid,可以使用以下命令: chown newuid:newgid filename 其中,newuid是要修改为的新的拥有者的uid,newgid是要修改为的新的所属gidfilename是要修改的文件的路径和名称。这样,文件的拥有者和所属都会被同时修改。 需要注意的是,修改文件giduid需要具有足够的权限才能进行操作。通常,只有root用户或者具有root权限的用户才能修改文件的拥有者和所属

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值