✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Linux操作系统专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:改变Linux文件权限、所属用户组、所有者知识总结
文章目录
- 改变Linux文件权限chmod
- 文字设定法
- 数字设定法
- 改变Linux文件所属用户组chgrp
- 改变Linux文件所有者chown
- 改变文件所有者chown
改变Linux文件权限chmod
名称:chmod
使用权限:root
使用方式:chmod使用方式有两种,数字设定和文字设定。
说明:Linux/UNIX的文件存取权限分为三级,文件拥有者、群组、其他。利用chmod可借以控制档案如何被他人所存取。
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读、只写和可执行三种。
只读权限表示只允许读其内容,而禁止对其做任何的更改操作。
可执行权限表示将该文件作为一个程序执行
文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件进行阅读和修改。用户可以根据需要把访问权限设置为需要的任何组合。所有者一般是文件的创建者,所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。
chmod命令有两种用法:一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
文字设定法
使用方式:chmod [who] [+|-|=] [mode] filename
who 可以是以下字母中的任意一个或它们的组合:
- u: 表示“用户(user)”,即文件或目录的所有者。
- g: 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
- o: 表示“其他(others)用户”。
- a: 表示“所有(all)用户”。它是系统默认值。
[]中的操作符号可以是:+ - =。
- +: 添加某个权限。
- -: 取消某个权限。
- =: 赋予给定权限并取消其他所有者权限(如果有)。
设置mode所表示的权限可用以下字母的任意组合。
- r:可读。
- w:可写。
- x:可执行。只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性。
- s:在文件执行时将进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
- t:保存程序的文本到交换设备上。
- u:与文件属主拥有一样的权限。
- g:与文件属主同组的用户拥有一样的权限。
- o:与其他用户拥有一样的权限。
在一个命令行中可给出多个权限方式,其间用逗号隔开,例如:
chmod g+r,o+r example
删除之前/tmp/sanguo目录下的所有文件,然后将/etc/shadow文件复制到sanguo目录,并改名为zhaoyun,并为zhaoyun文件的所有用户全部加上读权限。
说明1:使用seashorewang账户删除文件的时候没有权限,是因为之前将sanguo下除了shadow之外的文件的所属用户和组全部设置成了root,作为普通用户的seashorewang账户,肯定不具有删除权限。
说明2:删除的时候用了通配符“”,rm pa,表示删除所有名称以pa开头的文件;rm *表示删除所有文件。
说明3:chmod a+r zhaoyun表示给zhaoyun文件的自己、同组与其他都加上r权限。利用ls –l得到了验证。
将zhaoyun文件的所属用户加上wx权限,所属组与其他用户加上w权限。
说明:注意u+wx,go+w之间只有一个逗号,不能加任何空格。
将zhaoyun文件的所属用户的x权限去掉。
数字设定法
数字设定法与文字设定法殊途同归,都可以达到设置文件权限的目的,但数字设定法更加方便简洁。
数字设定法中的数字表示的属性含义是:0表示没有权限;1表示可执行权限;2表示可写权限;4表示可读权限,然后将其相加。数字属性的格式为3个从0~7的八进制数,其顺序是(u)(g)(o)。
换个思路理解,利用ls –l查看的文件详细信息第一列中的除了第一个字符之外的所有字符每三个一组分成三组,每组有三个字符,每个字符位只能用0或者1表示,即每组是一个- - -格式的数字,左起第一位的最大值为2的2次方,也就是4;左起第二位表示的最大值是2的1次方,也就是2;右数第一位则表示2的0次方,也就是1;0表示没有权限。因此每组的最大数值111转换成十进制应该是122+121+1*20=4+2+1=7,如果自己、同组与其他都具有读写执行的权限则为777。
分析/tmp/sanguo目录下zhaoyun文件的三个身份的分别权重。
说明:owner=rw=4+2+0=6;group=rw=4+2+0=6;others=rw=4+2+0=6
将/tmp/sanguo目录下zhaoyun文件的三个身份的权限修改回“---------”
说明:chmod 000 zhaoyun中的000代表三个身份分别都没有任何权限
将/tmp/sanguo目录下zhaoyun文件的权限修改为744.
查看/bin/ls的属性与权限,将其去掉同组与其他的执行权限,然后在seashorewang账户中使用ls命令。
说明:ls命令在去掉执行权限后不能使用,因为对于seashorewang账户来说,ls文件属于其他用户,其他用户不具有执行权限,所以不能执行ls命令。
改变Linux文件所属用户组chgrp
名称:chgrp
全称:change group
使用权限:root
使用方式:chgrp 组名 文件或目录
参数:
-R:递归式的改变指定目录及其下的所有子目录和文件的属组。
说明:改变文件所属的组。该命令改变指定文件所属的用户组。其中group可以是用户组ID也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
要求seashorewang账户和与seashorewang账户同一组的账户都能查看root给的文件。
说明1:chgrp的用法和chown基本一样,格式都是:“命令 名称 文件”。
说明2:本例中使用useradd命令新建了一个账户linux_whb,-G参数指定该账户默认的组为seashorewang,即让linux_whb账户和seashorewang账户属于同一个组,并且将shadow文件加上了同组可读的权限,当切换到linux_whb账户后,可以读出shadow文件的内容。
将/tmp下的sanguo目录包括其中所有文件的所属组全部改成root。
说明:-R表示递归,意思是连同目录中的文件的所属组全部改变。
改变Linux文件所有者chown
无论什么样的操作系统,自己的所有文件永远不会停留在只有自己使用,有些文件是要共享的,是要传输的。
使用root账户复制一份/etc/shadow文件放到/tmp/sanguo下,名称仍为shadow,供seashorewang账户使用。
说明1:因为shadow文件本身的权限为“l---------”,为了更好地进行试验,让seashorewang账户去使用该文件,我们使用chmod命令给shadow文件加上了读权限。
说明2:我们使用su root切换到了root账户下,复制了shadow文件,放到了/tmp/sanguo这个seashorewang账户也可以访问的目录下,并且为其加上了读权限。我们在seashorewang账户下使用ll命令查看文件的详细信息发现,这个文件的所有者与所属组仍为root,使用cat命令去查看这个文件的内容时发现,权限不够,分明给你一个文件,并且具有读权限,但是自己读不了,这样就造成文件仍然不能使用的局面。
正因为有时候虽然给别人一个文件,别人却不能正常使用的这种情况经常存在,所以必须去学习如何改变文件的属性与权限。
改变文件所有者chown
名称:chown
全称:change owner
使用权限:root
使用方式:chown 账户名称 文件或目录
参数:
-R:递归修改,连同子目录一起修改。
说明: Linux/UNIX是多用户多任务系统,所有的文件皆有拥有者,利用chown可以将文件的拥有者加以改变。一般来说这个指令只是由系统管理者root所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己文件的文件拥有者改设为别人。只有系统管理者root才有这样的权限。
用seashorewang账户将shadow文件的所有者改为自己
说明: 这个实例应该引起的注意是chown命令不能把别人的文件改成自己的,因为它一般使用者为root。
seashorewang账户试图把自己/tmp/sanguo目录下的passwd文件给root,也就是把其拥有者改为root。
说明: 这个实例应该引起的注意是chown命令不但不能把别人的文件改为自己的,也不能把自己的改为别人的,因为它一般使用者为root。
总结: chown这个命令在不进行特殊修改的情况下,只有root具有使用权限,root账户使用该命令时的正确格式为“chown 账户名 文件名”。其作用时把后面的文件的拥有者改为前面的账号。
seashorewang账户看到自己不能使用这个文件,想办法让该用户能够看到shadow文件的内容。
说明: 我们使用su root切换到root账户,复制了一份/etc/shadow文件给/tmp/sanguo目录,并使用chmod命令为其加上了r权限,然后使用chown命令将shadow文件的拥有者改为seashorewang用户,退出root返回seashorewang账户,然后使用cat命令查看shadow文件的内容,发现可以查看了,是因为这个文件是seashorewang自己的了,并且自己又拥有读权限,于是可以读出其中的内容。
再次使用root账户将/etc/shadow文件复制2份到/tmp/sanguo目录下,分别命名为yingzi1、yingzi2,使用chown命令同时改变这两个文件的拥有者以及组。
说明1: 本例中采用了两种方法,同时修改文件的拥有者与文件的所属组,一种是“用户名.组名”,另一种是“用户名:组名”。
说明2: 如果需要使用chown命令同时改变所属用户与所属组,建议使用“用户名:组名”的格式,因为确实有些人喜欢使用域名之类的作为用户名,这样容易产生歧义,因为你使用的用户名本身就含有“.”。
说明3: 上面第一次使用chown的时候,提示无效的用户“seashorewang.seashorwang”。这不是作者做实验时不小心输错组名,这是实验有意设计的。因为不管是在改变所属用户,还是改变所属组的时候,首先要保证所要改成的用户与组是存在的,意思是当前Linux系统中必须存在这个账户与组,对应到文件应该是/etc/passwd文件中存在这个账户与组,才能试图将某个文件的用户与组进行修改;如果不存在,虽然用的是root,也无能为力。
将/tmp下的sanguo目录包括其中所有文件的所属用户全部改成root
说明:-R表示递归,意思是连同目录中的文件的所属全部改变。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。