Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744528
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-28 13:32:31

各chown函数允许我们改变一个文件的用户ID和组ID。


  1. #include <unistd.h>

  2. int chown(const char *pathname, uid_t owner, gid_t group);

  3. int fchown(int filedes, uid_t owner, gid_t group);

  4. int lchown(const char *pathname, uid_t owner, gid_t group);

  5. 三者成功都返回0,失败返回-1。

这三个函数基本类似,除非引用的文件是一个符号链接。在这种情况下,lchown改变符号链接本身的属主,而不是符号链接指向的文件。


lchown函数是POSIX.1功能的XSI扩展,定义在SUS里。作为这样的身份,所有的UNIX系统实现都被期望来支持它。


如果owner或group参数的为-1,则对应的ID保持不变。


历史上,基于BSD的系统强制限制只有超级用户能改变文件的属主关系。这是为了避免用户放弃他们自己的文件给别人,从而打破硬盘空间限额的限制。尽管如此,系统V已允许任何用户改变他们拥有的任何文件的属主。


POSIX.1允许两种操作中的任何一个,取决于_POSIX_CHOWN_RESTRICTED的值。


Solaris 9上,这个功能是一个配置的选项,它的默认值是实行这个限制。FreeBSD 5.2.1、Linux 2.4.22、Mac OS X 10.3一直实行这个chown限制。


回想下2.6节_POSIX_CHOWN_RESTRICTED常量可以在头文件里可选择地被定义,而且总是可以使用 pathconf或fpathconf函数查询。同样回想下这个可先项可以依赖于引用的文件,它可以根据不同的文件系统基准启用或禁用。我们将使用短语 “如果_POSIX_CHOWN_RESTRICTED有效”来表示它应用于我们正讨论的特定文件,而不管真正的常量是否定义在头文件里。


如果_POSIX_CHOWN_RESTRICTED对指定的文件有效,那么:


1、只有超级用户进程可以改变文件的用户ID;


2、如果非超级用户进程拥有这个文件(有效用户ID和文件用户ID相等),则它可以改变文件的组ID。owner被指定为-1或与文件用户ID相同,而group与进程的有效组ID或进程某个补充组ID相同。


这意味着如果_POSIX_CHOWN_RESTRICTED有效时,你不能改变其他用户文件的用户ID。你可以改变你拥有的文件的组ID,而且你属于该组。


如果一个非超级用户进程调用了这三个函数,在成功返回后,设置用户ID和设置组ID位都会被清除。
阅读(1362) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~