更改文件拥有者

更改文件拥有者

chown命令

chown将指定文件的拥有者改为指定的用户或组

命令格式如下:

chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...

普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员

参数说明:

  • -c 显示更改的部分的信息
  • -f 忽略错误信息
  • -h 修复符号链接
  • -R 处理指定目录以及其子目录下的所有文件
  • -v 显示详细的处理信息
  • -deference 作用于符号链接的指向,而不是链接文件本身
  • --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组
  • --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变
  • --help 显示帮助信息
  • --version 显示版本信息

实例

命令如下:

chown mail:mail Checkers.class

$ ls -l Checkers.class
-rw-rw-r-- 1 fireway fireway  738  5月  4 07:16 Checkers.class

$ chown mail:mail Checkers.class
chown: 正在更改"Checkers.class" 的所有者: 不允许的操作

切换到高级管理员

# chown mail:mail Checkers.class
# ls -l Checkers.class
-rw-rw-r-- 1 mail    mail     738  5月  4 07:16 Checkers.class

实例

命令如下:

chown root: FrequencyAnalysis.java

# ls -l FrequencyAnalysis.java 
-rwxrwxrwx 1 fireway fireway 5044  9月 21 08:26 FrequencyAnalysis.java

# chown root: FrequencyAnalysis.java
# ls -l FrequencyAnalysis.java 
-rwxrwxrwx 1 root root 5044  9月 21 08:26 FrequencyAnalysis.java

实例

命令如下:

chown :mail Test.class

# ls -l Test.class
-rw-rw-r--  1 fireway fireway  995  9月 20 18:56 Test.class

# chown :mail Test.class
# ls -l Test.class
-rw-rw-r-- 1 fireway mail     995  9月 20 18:56 Test.class

id命令

id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID)。UID 是对一个用户的单一身份标识。组 ID(GID)则对应多个UID。

实例

$ id -a
uid=1000(fireway) gid=1000(fireway) 组=1000(fireway),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

实例

$ id -G
1000 4 24 27 30 46 108 124

结果只会显示 GID 号。你可以和 /etc/group 文件比较

实例

$ id -g
1000

实例

输出特定用户信息, 只需要在 id 命令后跟上用户名。

$ id fireway
uid=1000(fireway) gid=1000(fireway) 组=1000(fireway),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

函数chown、fchown、fchownat和lchown

  1. /**
  2. * 文件名称: mychown.c
  3. * 作者: firewaywei
  4. * 时间: 2016年 10月 23日 星期日 10:59:24 CST
  5. */
  6. #include <unistd.h>
  7. int main()
  8. {
  9. if (chown("1", 1, -1) == -1)
  10. {
  11. perror("chown error:");
  12. return -1;
  13. }
  14. return 0;
  15. }

代码1. chown更改一个文件的用户ID

运行该程序,其结果是:

$ touch 1
$ ll 1
-rw-rw-r-- 1 fireway fireway 0 10月 23 11:01 1
$ su
密码: 
# ll 1
-rw-rw-r-- 1 fireway fireway 0 10月 23 11:01 1
# ./a.out 
# ll 1
-rw-rw-r-- 1 daemon fireway 0 10月 23 11:01 1
# id daemon
uid=1(daemon) gid=1(daemon) 组=1(daemon)

下面几个chown函数是函数原型。如果两个参数owner或group中的任意一个是-1,则对应的ID不变。

#include <unistd.h>

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

int fchown(int fd, uid_t owner, gid_t group);

int fchownat(int fd, const char *pathname, uid_t owner, gid_t group, int flag);

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

All four return: 0 if OK, ?1 on error

除了所引用的文件是符号链接以外,这4个函数的操作类似。

    lchown和fchownat(flag设置了AT_SYMLINK_NOFOLLOW标志)更改符号链接本身的所有者,而不是该符号链接所指向的文件的所有者。

fchown函数改变fd参数指向的打开文件的所有者,既然它在一个已打开的文件上操作,就不能用于改变符号链接的所有者。

fchownat函数与chown或者lchown函数在下面两种情况是相同的:

  1. pathname参数是绝对路径,另一种fd参数取值为AT_FDCWD
  2. pathname参数为相对路径

在这两种情况下,如果flag参数中设置了AT_SYMLINK_NOFOLLOW标志,fchownatlchown行为相同

如果flag参数中清除了AT_SYMLINK_NOFOLLOW标志,则fchownatchown行为相同。

fchownat函数如果fd参数设置为打开目录的文件描述符,并且pathname参数是一个相对路径,则该函数计算相对于打开目录的pathname

_POSIX_CHOWN_RESTRICTED的值

_POSIX_CHOWN_RESTRICTED常量可选地定义在头文件<unistd.h>,而且总是可以使用pathconffpathconf函数进行查询。

Name of option Indicates ... name argument
_POSIX_CHOWN_RESTRICTED whether use of chown is restricted _PC_CHOWN_RESTRICTED
  1. /**
  2. * 文件名: chown_restricted.c
  3. * 文件内容:打印Linux平台_POSIX_CHOWN_RESTRICTED的值
  4. * 作者:firewaywei
  5. * 时间: 2016年 10月 23日 星期日 15:38:01 CST
  6. */
  7. #include <unistd.h>
  8. #include <stdio.h>
  9. #include <errno.h>
  10. #include <string.h>
  11. static void pr_pathconf(char *mesg, char *path, int name);
  12. int main(int argc, char *argv[])
  13. {
  14. if (argc != 2)
  15. {
  16. printf("usage: a.out <dirname>");
  17. }
  18. #ifdef _POSIX_CHOWN_RESTRICTED
  19. printf("_POSIX_CHOWN_RESTRICTED is defined (val is %ld)\n", (long)(_POSIX_CHOWN_RESTRICTED + 0));
  20. #else
  21. printf("_POSIX_CHOWN_RESTRICTED is undefined\n");
  22. #endif
  23. #ifdef _PC_CHOWN_RESTRICTED
  24. pr_pathconf("pathconf says _PC_CHOWN_RESTRICTED =", argv[1], _PC_CHOWN_RESTRICTED);
  25. #else
  26. printf("no symbol for _PC_CHOWN_RESTRICTED\n");
  27. #endif
  28. // 打印用户ID和组ID
  29. printf("uid = %d, gid = %d\n", getuid(), getgid());
  30. if (-1 == chown(argv[1], -1, 24))
  31. {
  32. perror("chown error:");
  33. }
  34. return 0;
  35. }
  36. static void pr_pathconf(char *mesg, char *path, int name)
  37. {
  38. fputs(mesg, stdout);
  39. errno = 0;
  40. long val = 0;
  41. if ((val = pathconf(path, name)) < 0)
  42. {
  43. if (errno != 0)
  44. {
  45. if (EINVAL == errno)
  46. {
  47. fputs(" (not supported)\n", stdout);
  48. }
  49. else
  50. {
  51. char *err = strerror(errno);
  52. printf("pathconf error, path = %s : %s\n", path, err);
  53. }
  54. }
  55. else
  56. {
  57. fputs(" (no limit)\n", stdout);
  58. }
  59. }
  60. else
  61. {
  62. printf(" %ld\n", val);
  63. }
  64. }

代码2. 使用pathconfig或fpathconf函数查询_POSIX_CHOWN_RESTRICTED常量值

程序运行如下:

$ ./a.out 1
_POSIX_CHOWN_RESTRICTED is defined (val is 0)
pathconf says _PC_CHOWN_RESTRICTED = 1
uid = 1000, gid = 1000
$ ll 1
-rw-rw-r-- 1 fireway cdrom 0 10月 23 15:27 1
$ id -G
1000 4 24 27 30 46 108 124

若_POSIX_CHOWN_RESTRICTED对指定的文件生效,则

  1. 只有超级用户进程能更改该文件的用户ID
  2. 如果进程拥有此文件(其有效用户ID等于该文件的用户ID),参数owner等于-1或文件的用户ID,并且参数group等于进程的有效组ID或者进程的附属组ID之一,那么一个非超级用户进程可以更改该文件的组ID

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

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

参考

每天一个linux命令(30): chown命令  http://www.cnblogs.com/peida/archive/2012/12/04/2800684.html

Linux id 命令 - 显示用户id和组id信息  http://www.linuxidc.com/Linux/2014-01/95778.htm

UNIX环境高级编程(第三版)    4.11 函数chown、fchown、fchownat和lchown

时间: 2024-11-08 20:12:50

更改文件拥有者的相关文章

ubuntu 更改文件夹拥有者和权限

今天,在Ubuntu16.04上安装pyspider,遇到权限不够的问题,发现在安装anaconda3的时候,文件夹的拥有者是root.作为新手只有寻找如何更改文件夹的拥有者,或者修改文件夹的权限. Ubuntu中有两个修改命令可以用到,「change mode」&「change owner」 即chmod以及chown,其中可以用递归参数-R来实现更改所有子文件和子目录的权限. 1.利用chmod修改权限: 对Document/目录下的所有子文件与子目录执行相同的权限变更: chmod -R

(转) Ubuntu 更改文件夹及子文件夹权限

Linux系统下如何修改文档及文件夹(含子文件夹)权限,我们来看一下. 一 介绍: 可以使用命令chmod来为文件或目录赋予权限.Linux/Unix 的档案存取权限分为三级 : 档案拥有者.群组.其他.利用 chmod 可以藉以控制档案如何被他人所存取 二 详解 1 此命令有两种使用方法,一种是chmod后加数字,后接文件名 chmod abc file 其中a,b,c各为一个数字,分别表示User.Group.及Other的权限. r=4,w=2,x=1 若要rwx属性则4+2+1=7: 若

linux更改文件所有者命令chown命令的使用困惑

[[email protected]:practice] ls -lrt total 12 -rwxrwxrwx 1 berry berry 84 Dec 16 10:20 f1.txt -rwxrwxrwx 1 berry berry 206 Dec 16 10:51 f2.txt -rwxrwxrwx 1 berry berry 372 Dec 16 14:26 f3.txt [[email protected]:practice] chown guest:guest f1.txt chow

更改文件权限、用户组、所有者

chmod 更改文件权限使用权限 : 所有使用者使用方式 : chmod [-cfvR] [--help] [--version] mode file...说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者.群组.其他.利用 chmod 可以藉以控制档案如何被他人所调用.参数 :mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其

linux -- chown修改文件拥有者和所在组

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限. 1.命令格式: chown [选项]... [所有者][:[组]] 文件... 2.命令功能: 通过chown改变文件的拥有者和群组.在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置.普通用户不能将自己的文件改变成其他的拥有者.

ubuntu下,批量更改文件后缀

ubuntu下,批量更改文件后缀: eg:把当前目录下以tpl为后缀的文件全部rename为html a.tpl  b.tpl  c.tpl 执行命令:   rename 's/\.tpl/.html/' *.tpl a.html  b.html  c.html

Linux 命令 - chmod: 更改文件模式

文件的模式 当使用 ls -l 命令查看目录内容时 [[email protected] cmdline]$ ls -l /etc/passwd -rw-r--r-- 1 root root 1917 Jul 2 15:01 /etc/passwd 第一列字段是文件模式.第一个字符表示文件类型,这里 "-" 表示该文件是个普通文件.后面的 9 个字符表示文件的访问权限,分为读权限.写权限和执行权限,又分别针对三种对象:所有者.同组用户和其他用户.这里 "-rw-r--r--&

linux 更改文件所属主和所属组 chown命令笔记

chown 更改文件的所主或所属组 更改文件所属主如:#chown zek 123.txt  (zek为所属主名) #ls -l 123.txt -rw-rw-rw- 1 zek root 12777 12月  4 20:31 123.txt 更改文件所属组如: #chown :user1 123.txt # ls -l 123.txt -rw-rw-rw- 1 zek user1 12777 12月  4 20:31 123.txt 二者一起更改:#chown zek:user1 123.tx

[]如何在Windows 10中更改文件夹背景颜色

ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Windows 8引入的新文件管理器不兼容. 由于某些原因,这些文件夹背景更改工具在Windows 10和Windows 8/8中不起作用.1.自从Windows 10发布以来,用户一直在要求我们提出一种将图片设置为文件夹背景或至少更改文件夹背景颜色的方法,我们决定提出本指南. 如果您在Windows