UNIX环境高级编程第四章
前面的还好,到4.9节卡住了。开始记录一下
1.4.9chmod和fchmod
[1]作用:更改现有文件的访问权限。二者区别在于fchmod只能对已打开的文件进行操作。
形式:int chmod(const char *pathname, mode_t mode);
int fchmod(int filedes, mode_t mode);
参数mode在原来的用户组其他读写操作,9个文件访问权限符的基础上,增加了新的6个。
S_IRWXU:是S_ISRUSE,S_ISWUSE,S_ISXUSE(用户读写操作)三者综合,
S_ISWXG:是S_ISRGRP,S_ISWGRP,S_ISXGRP(组读写操作)三者综合,
S_ISWXO:是S_ISROTH,S_ISWOTH,S_ISXOTH(其他读写操作)三者综合。
设置ID常量:
S_ISUID:执行时设置用户ID
S_ISGID:执行时设置组ID
保存正文常量:
S_IRWXO:保存征文(粘住位)

首先用stat获取当前权限,然后用chmod修改权限。
chmod("foo", (statbuf.st_mode & `S_IXGRP | S_ISGID) <0)
err_sys("chmod error for foo");
更改foo权限,去掉组的操作权限加上S_ISGID权限,设置之后组将以root身份执行,但是问题是想设置s文件属组设置GUID必选要先设置组执行操作为真,不然S_ISGID不能真正生效,不生效该位将变为大写S。如图所示。


s位变为小写,奏效了。
[2]关于chmod函数自动清除两个权限位的两种情况:
1.
2.文件的用户ID就是创建文件的进程有效用户ID。但是组ID,可以是进程的有效组ID(优先度低);也可以是目录本身的组ID(优先度高),这种情况下如果进程没有超级用户权限,那么为了防止文件设置设置组ID文件

先不写了 = =

浙公网安备 33010602011771号