如何更改linux文件目录拥有者及用户组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改linux文件目录拥有者及用户组相关的知识,希望对你有一定的参考价值。

你好,具体修改操作步骤如下:
 一、《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在 Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。
  另外,在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限。
  二、使用chown命令更改文件拥有者

  在 shell 中,可以使用chown命令来改变文件所有者。chown命令是change owner(改变拥有者)的缩写。需要要注意的是,用户必须是已经存在系统中的,也就是只能改变为在 /etc/passwd这个文件中有记录的用户名称才可以。
  chown命令的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。
  基本语法:
  chown [-R] 账号名称 文件或目录
  chown [-R] 账号名称:用户组名称 文件或目录
  参数:
  -R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
  都更新成为这个用户组。常常用在更改某一目录的情况。

[root@localhost home]# touch testfile //由 root 用户创建文件
[root@localhost home]# ls testfile –l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile //文件的拥有者及拥有者级均为 root
[root@localhost home]# chown yangzongde testfile //修改文件拥有者为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组仍为 root

  三、使用chgrp命令更改文件所属用户组
  在shell中,可以使用chgrp命令来改变文件所属用户组,该命令就是change group(改变用户组)的缩写。需要注意的是要改变成为的用户组名称,必须在 /etc/group里存在,否则就会显示错误。
  基本语法:
  chgrp [-R] 用户组名称 dirname/filename ...
  参数:
  -R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
  都更新成为这个用户组。常常用在更改某一目录的情况。

[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组为 root
[root@localhost home]# chgrp yangzongde testfile //修改拥有者组为 yangzongde
[root@localhost home]# ls testfile -l
-rw--w--w- 1 yangzongde yangzongde 0 Jun 7 19:35 testfile
[root@localhost home]# chown root:root testfile // 使用 chown 一次性修改拥有者及组
[root@localhost home]# ls testfile -l
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile
参考技术A chown -R 属主:属组 /xxx/
-R遍历更改
例:chown -R apache:apache /usr/local/httpd/
后面接目录文件都可以的。
参考技术B 比如test这个目录你想更改为oracle拥有者,oinstall为用户组,在有权限的情况下,你可以这样操作:
chown -R oracle:oinstall test --大R代表递归更改,test下面的所有子目录都会更改,不加R参数,就只更改test目录拥有者和组
希望能帮到你!
参考技术C #chown user:group file
#chown -R user:group file //file文件下所有的文件均更改
参考技术D 详细请百度chown命令。

Shell运行原理及Linux权限

Shell的运行原理

我们都知道,Window操作系统是通过图形化界面和用户进行交互的,Linux操作系统是通过命令行操作和用户进行交互的,Windows和Linux和用户的交互方式虽然不同,但在操作系统看来本质上是一样的,我们把图形化界面和命令行操作称作操作系统的 “外壳程序”

从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
(1).将使用者的命令翻译给核心(kernel)处理。
(2).同时,将核心的处理结果翻译给使用者

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入C盘的操作,我们通常是双击C盘盘符,或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户

下面我们来举一个例子来帮助大家理解 shell 的作用

在一个村庄里,有着王婆(媒婆,开了一家媒婆婚介所),张三,如花,小帅,一天,张三的父亲老张跟张三说 : “张三啊,你这也老大不小的了,该找个女朋友了吧!” 张三呢,虽然内心也很渴望,但是作为一个闷骚又害羞的程序员,不知道该怎么和女生去相处,于是就对老张说 : “算了吧,我不会和女生打交道啊”,老张一听,说 : “那我给你找咱们村的王婆给你介绍介绍吧”。

过了几天,王婆来了,对张三说 : “张三啊,你对女朋友有什么要求吗?”,张三一想,说 : “我觉得如花就挺不错,王婆,你能不能去帮我说一下”,于是王婆就去了如花家,将张三的意思转告给了如花,如花听说后,心里想,这张三,身高也不高,长得也不咋的,挣钱也不算多,不行,我不同意。于是王婆又把如花不同意的消息告诉了张三。(如花听说后,心里想,张三长得又帅,身高也高,工作好,挣钱多,行,我同意了)

讲完了上面的一个小故事,可以总结一下了
如花相当于操作系统(kernel)
张三相当于用户
王婆相当于shell外壳程序

(1).为什么张三不自己去找如花呢?
(为什么用户不直接使用操作系统呢?)
因为张三不擅于和女生沟通
(因为用户不擅于使用操作系统)

(2).不管是张三给如花的消息还是如花给张三的消息都是通过王婆中间媒介传播的


故事继续

张三被拒绝以后,整天夜不能寐,心里很难受,于是又请王婆再去如花家说说,可这时如花已经有了男朋友小帅,王婆自然不肯再去

(3).如果用户传递给操作系统的指令不合法,shell外壳程序会直接对非法指令进行拦截,不会交给操作系统

故事再继续

张三是个偏执的人,而且老张还是村长,非要王婆再去如花家说,王婆心里很纠结,一方面呢,张三他爸是村长,我得给张三办事,另一方面呢,如花肯定是看不上张三,这事肯定是成不了的,这样的话,我这媒婆婚介所的名声可就不好了。怎么办呢? 于是王婆招了一个实习生,让实习生去帮张三介绍,如果事没办成,我可以把锅甩给实习生啊

(4).shell外壳程序,在系统层面上,就是一个进程,保护内核安全的同时,也要保护自身的安全,所以shell进程会创建子进程(王婆招了一个实习生),让子进程进行命令行解释。如果子进程出现任何问题,都不影响父进程Shell(实习生没把事情办成,不影响王婆的名声)。



注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”,普通用户的命令提示符是"$"。

(1).实现用户账号的切换

语法: su 用户名
功能: 用户切换

1). 普通用户切换成超级用户,需要输入root密码

su 或 su root 都可

2). 超级用户切换成普通用户,从超级用户切换成普通用户不需要输入密码,这也说明 root 权限不受限制

su 用户名

(2).仅提升当前指令的权限

但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。

语法: sudo 指令
功能: 提升当前指令的权限。
例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码。

但是我们又发现一个问题,我们当前的普通用户并不在 root 的信任列表里,只有把当前普通用户设置在 root 的信任列表里才可以修改其他普通用户的密码(好比 root 为群主,只有把群主信任的人设置为管理员,管理员才能获得相应的权限)

(3).如何将普通用户添加到信任列表

(1).切换成超级用户
(2).输入 vim /etc/sudoers,翻到文件末尾,找到 Allow People in group wheel to run all command
(3).添加上自己的用户名,保存并退出( :wq! )

Linux权限管理

(1).文件访问者的分类(人)

对于用户来说,权限可以将用户分为三大类:
1).文件拥有者
2).文件所属组
3).其他用户(other) : 文件拥有者和文件所属组之外的用户

注意 :
1).文件拥有者,文件所属组,其他用户是一种角色,root 用户和普通用户是具体的人,可能充当拥有者,所属组,其他用户
2).Linux中,所有的用户都要隶属于某一个组,哪怕这个组只有你一个人(组名就是用户名)

为什么要有组存在 ?
假设有以下情景,某公司有两个小组在同一台Linux服务器上做相同的开发,两个小组明显是竞争关系,你所写的代码肯定不希望被另一个小组的人看到,因此,你可以把other的权限设为- - -,但如果只有文件拥有者和other的话,和你同组的同事想要看你的代码就不可以了(因为和你同组的同事也是other),所以,需要有文件所属组,你可以把你同组的同事设为 rwx

(2).文件类型和访问权限(事物属性)

十个字符表示了文件类型和访问权限,第一个字符表示文件类型,在Linux中,文件类型和后缀名无关,在Window中,是相关的。

d:目录
-:普通文件(文本,可执行程序,库)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕,显示器等串口设备)
s:套接口文件

后面九个字符,每三个字符为一组,分别表示文件拥有者,文件所属组,其他用户对文件操作的权限

r 读取权限
w 写入权限
x 可执行权限
- 无权限


myproc.c 文件是一个普通文件,拥有者和所属组对应的权限是可读可写的,other对应的权限是可读的

(3).文件权限值的表示方法

1).字符表示方式

r - -	仅可读
- w -	仅可写
- - x	仅可执行
r w -	可读可写
r - x	可读可执行
- w x	可写可执行
r w x	可读可写可执行
- - -	无权限

2).8进制数值表示法

字符表示法	二进制	八进制数值表示法	说明
r - -		100			4			仅可读
- w -		010			2			仅可写
- - x		001			1			仅可执行
r w -		110			6			可读可写
r - x		101			5			可读可执行
- w x		011			3			可写可执行
r w x		111			7			可读可写可执行
- - -		000			0			无权限

(4).文件/目录访问权限的相关设置方法

(1).改变文件/目录的访问权限

功能: 设置文件/目录的访问权限
格式: chmod [参数] 权限 文件名/目录名

常用选项:
R -> 递归修改目录文件的权限
说明:只有文件/目录的拥有者和root才可以改变文件/目录的权限

① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限

用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
②三位8进制数字

(2).改变文件/目录的拥有者和所属组

语法: chown 选项 用户名 文件名或目录名
功能: 修改文件/目录的拥有者。
常用选项: -R 递归修改目录文件的拥有者。

1). 修改文件/目录的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。
2).可以使用chown指令同时修改文件/目录的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。

语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件/目录的所属组。
常用选项: -R 递归修改目录文件的所属组。

注意: 修改文件/目录的所属组也需要进行权限提升。

(3).修改文件/目录掩码

我们在创建一个文件或目录时,都自动带有一个权限,那这个权限是怎么来的呢?

文件的默认权限是0666,目录的默认权限是0777,第一位的0与特殊权限有关,不必深究,但我们创建出来的文件权限却是 664 ,目录权限却是 775,这是为什么呢?

创建出来的文件或目录权限 = 默认权限 & (~umask)

umask
功能:查看或修改文件掩码
格式: umask 权限值
说明:凡是在umask中出现的权限位,都不能在最终权限中出现。超级用户默认掩码值为0022,普通用户默认为0002

(4).目录的权限

说完了文件,那么对于目录来说,读,写,可执行是什么意思呢 ?

注意 : 最基本的权限是可执行权限,没有可执行权限,不能进入目录,自然也无法进行读写操作

1).进入目录需要可执行权限

2).显示目录下面的内容需要读取权限

3).在目录下创建文件需要写入权限

于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?

为了解决这个问题,Linux引入了粘滞位的概念

(5).粘滞位

语法: chmod +t 目录名
功能: 给目录加上粘滞位。

当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。

注意 :
1). 当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

2).虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件

以上是关于如何更改linux文件目录拥有者及用户组的主要内容,如果未能解决你的问题,请参考以下文章

如何更改linux文件目录拥有者及用户组

如何更改linux文件目录拥有者及用户组

如何更改linux文件的拥有者及用户组

在Linux系统中,如何更改文件的访问权限

如何更改linux文件的拥有者及用户组

linux 修改文件所有者