文件和目录之chown、fchown和lchown函数

下面几个chown函数可用于更改文件的用户ID和组ID。

#include <unistd.h>
int chown( const char *pathname, uid_t owner, gid_t group );
int fchown( int filedes, uid_t owner, gid_t group );
int lchown( const char *pathname, uid_t owner, gid_t group );
三个函数的返回值:若成功则返回0,若出错则返回-1

除了所引用的文件是符号链接以外,这三个函数的操作相似。在符号链接的情况下,lchown更改符号链接本身的所有者,而不是该符号链接所指向的文件。

如若两个参数owner或group中的任意一个是-1,则对应的ID不变。

基于BSD的系统一直规定只有超级用户才能更改一个文件的所有者。这样做的原因是防止用户改变其文件的所有者从而摆脱磁盘空间限额对他们的限制。系统V则允许任一用户更改他们所拥有的文件的所有者。按照_POSIX_CHOWN_RESTRICTED的值,POSIX.1在这两种形式的操作中选用一种。对于Solaris 9,此功能是个配置选项,其默认值是施加限制。而FreeBSD 5.2.1、Linux 2.4.22和Mac OS X 10.3则总对chown施加限制。

_POSIX_CHOWN_RESTRICTED常量可选地定义在头文件<unistd.h>中,而且总是可以用pathconf或fpathconf函数查询。此选项还与所引用的文件有关——可在每个文件系统基础上,是该选项起作用或不起作用。

若_POSIX_CHOWN_RESTRICTED对指定的文件起作用,则

(1)只有超级用户进程能更改该文件的用户ID。

(2)若满足下列条件,一个非超级用户进程就可以更改该文件的组ID:

        (a)进程拥有此文件(其有效用户ID等于该文件的用户ID)。

        (b)参数owner等于-1或文件的用户ID,并且参数group等于进程的有效组ID或进程的附加组ID之一。

这意味着,当_POSIX_CHOWN_RESTRICTED起作用时,不能更改其他用户文件的用户ID。你可以更改你所拥有的文件的组ID,但只能改到你所属的组。

如果这些函数由非超级用户进程调用,则在成功返回时,该文件的设置用户ID位和设置组ID位会被清除。

转载于:https://www.cnblogs.com/nufangrensheng/p/3502559.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值