开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Linux文件执行、读写权限管理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/550/detail/7612
Linux文件执行、读写权限管理
目录
一、管道使用
管道符左侧需要放一个命令,管道符右侧需要放另一个命令。第一个命令必须要有输出信息,第二个命令需要有输入的功能。命令一输出,命令二输入,将来实现的功能是用管道符将输出信息传给命令二。
作为第二个命令的标准输入。要求的,当然在管道符处理的时候,由于命令意识必须标准输出,换句话错误是不是不能用管道传给第二个命令对吧,那如果是不可预知,这个命令一定是正确的,或许有错误信息,我希望也用管道符传到右侧,有两种方法,第一种方法是cmd1 |&cmd2第二种方法是cmd1 2>&1| cmd2。
利用管道符,包括前面的这些符号总结起来,这就是学习到的标准输入输出标准错误它们的重定向方法,当然还用到了什么的大于号,这种写法对吧,当然两个大于号是不是追加?
还有就是多行重定向后面写一个关键字<
二、用户和组
第一章学习了用户和组,学到了相应的一些配置文件,以及对应的一些工具命令,那其中和用户账号以及组帐号相关的几个重要的文件,其中第一个是 /etc/passwd第二个 /etc/shadow 这个释放用户口令的是吧,还有 /etc/group 还有/etc/gshadow,那这些文件可以通过看cat来查看,当然也学过一个 getent passwd,这个是不是也可以看这些文件。这些口令文件必须 root 的身份才能查看。
这里面前面提到过一个问题,在 Linux 里面,用户账号和组账号可以同名ID,也就是 UID 和 GID 也可以相等。
事实上,默认情况下确实很多账号创建的时候也会创建一个和它同名的组,作为它的主组,并且默认情况下,一般来讲ID可能都是一样的,就是用户的 UID 和它的主组的ID是相同的,那么这里面有一个小小的问题,linux 都知道,默认有一个UID为零的人就是 root ,对应的当然可能也发现了,是不是也有一个 GID 也是为零的并且也叫 root 的这样的一个组。
那么把用户的 UID 变成零,那么它的权限就跟 root 一样了,曾经做过,比方说把网账号的ID变成零,它就跟 root 账号权限一样 ,实际上准确的说那ID为零的就是管理员,并不看你的用户叫什么。
当然把用户帐号加到组里面,它应该继承组的权限,那如果我把帐号,然后王账号加到 root 组里面,它是继承了 root 权限,Root 组有什么权限它就有什么权限。
那么这个 root 组和在Windows里,大家应该知道Windows里有一个名为administrators 的组,当在Windows里把一个用户账号加到这个组里面意味着成为了Windows管理员。
这是 Windows 里面默认咱们装系统的时候应该有一个这样的一个名为administrator 用户,这个用户是系统自带的,而且这个用户我是不能删的,总用户是不能删的,可以将其改名,但是不能删。那在 Windows 里,已经发现了,如果新建一个普通账号的时候也是网账号,那么它默认属于的组是 user 组。
如果希望账号成为管理员,在 Windows 中加入到 admnistrators 这个组里面,这个组默认是有管理员权限的。
三、Linux中的root与Windows里面管理员的区别
注意 linux 里面的 root 组并不是管理员组,它的权限实际上跟普通用户没有太大的区别,相对来说大一点,但是达不到管理员这样的级别。所以在Linux里面把用户加到root组里面成为管理员是不对的。
在Linux里面判断是不是管理员的方法就是判断ID,UID 为0就是管理员,UID不为零就是普通用户。
默认情况下,root组的权限并不是很大。
四、用户组相关的命令
Useradd:建立账号
一般给服务用的账号都是/sbin/nologin,给服务用的账号多为系统账号,即ID在1到1000以内。
Useradd-s:用户登录后使用的shell类型
Useradd-d:添加目录
Useradd-u: 指定用户的用户名
UID 如果不指定的话,系统是自动分配的。如果要实现自动化管理就要有一个前提就是标准化。
五、Token
Token()括号里面不带权限,应该带身份即 UID/GID/groups。携带这些东西访问资源时,资源上设置了权限。
如果要获取最新的内容,必须重新登录。Windows同理。
六、文件权限
1.文件常见的权限:
(1)读:read(r)
表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。
(2)写:write(w)
表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。
(3)执行:excute(x)
表示该文件具有被系统执行的权限。Window 系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。也就是说,只要文件拥有 x 权限,则此文件就是可执行文件。但是,文件到底能够正确运行,还要看文件中的代码是否正确。
读和写一般是针对文本文件。每个文件都有所有者和所属组,这个组一般来说是主组。
2.将组改成别的组
[root@centos6 ~]#lI /91n565A Mar 2?2017/bin/cat
-rwxr-xr-x.1 root root 45224 mar 23 0217 /bin/cat
[root@centos6~]#cd / data
[ root@centos6 data]#1s
1ost+found
[root@centos6 data]#11
total 16
drwx------. 2 root_root 16384 Mar 27 16:56 lost+found
[root@centos6 data]#touch f1
[root@centos6 data]#11 f1
-rw-r--r--. 1 root_root 0 Apr 4 09:25 f1
[root@centos6 data]#id
uid=0(root) gid=0(root) groups=O(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@centos6 data]#chown
(此命令更改所有者)
3.如何把wang账号加到G1组里面?
[ rootacentos6 data ] #id wang
uid=500(wang) gid=500 (wang) groups=500 (wang)
[root@centos6 data]#groupadd g1
[root@centos6 data] #groupadd g2
[root@centos6 dataj #groupmems -a wang -g g1
[root@centos6 datal #id wang
uid=500 (wang) gid=500(wang) groups=500 (wang),501(g1)
[root@centos6 data]#usermod -aG g2 wang
[root@centos6 data]id wang
uid=500(wang) gid=500 (wang) groups=500 (wang),501(g1),502(g2)
[rootacentos6 data] #useradd mage
[rootacentos6 data]#su wang
[rootacentos6 data]$11
total 16
-rw-r--r--,1 wang rpc 0 apr 4 09:25 f1
Drwx------,2 root 16384 mar 27 16:56 lost+found
[wang@centos6 data]$ chown mage f1
chown: changing ownership of f1' : operation not permitted
[wang@centos6 data]$chgrp g1 f1
[wang@centos6 data]$ 11 f1
-rw-r--r--. 1 wang g1 0 Apr 4 09:25 f1
[wang@centos6 data]$chgrp.bin f1
chgrp: changing group of f1’operation not permitted
4.结论
(1)普通用户是不可以更改文件所有者的
(2)作为普通用户想要更改文件的所属组,首先要保证文件是其自身的,同时还要在这个组里面。
(3)主组和辅助组的区别:主组必须有,辅助组可以没有;主组只有一个,辅助组多个也可以。两者的授权没有什么区别。
5.根据文件的属性,把访问文件的客户分为三类
(1)文件的所有者:权限最大
(2)是否已经加入组
(3)其他(路人):权限最严格
rw-r--r--中前三个字母是针对所有者授权,中间三个字母是所属组授权限,后三位指的就是路人权限。每一类权限都是按照读写执行顺序进行授权的。无权限用-(减号)代替。
七、如何进行授权
工具命令:chmod change mode
1.更改权限的模式
方法:mode法
Chmod who opt per file
Who:所有者(用u进行表示)、所属组(用g进行表示)、other(用0来表示)、o(all)
Opt:对用户做什么事情,例如增加权限,去掉权限,赋予权限等等
Per:读(r)、写(w)、执行(x)、X
例子:chmod u+x,g-w,o= file(等号直接赋予权限)
[root@centos6 data]#su wang,.
[wang@centos6 dataj$cat /etc/shadowcat: fetc/ shadow: Permissiondenied
[wang@centos6 data]$11 /etc/shadow..,
----------. 1 root_root1087 Apr4 09:28 /etc/shadow[wang@centos6 data]$77f1. -
-rw-r-----. 1 wang_gi,o Apr409:25 f1[wang@centos6 data]schmod u= f1
[wang@centos6 data]$11 f1
---r-----. 1 wang gl o Apr 4 09:25f1
[wang@centos6 data]scat fi
cat: f1: Permission denied
[wang@centos6 data]$chmod u+r f1wang@centos6 data]$cat f1
对文件没有权限,但是还是可以打开文件。还是可以对其进行修改。读权限与写权限对于root账号是不受限的。
2.用mage访问权限
[mage@centos6 data]$y
bash: y : command not found[mage@centos6 data]5
[mage@centos6 datajs[mage@centos6 dataj5
[mage@centos6 data]$exit
exit
[root@centos6 data]#
[root@centos6 dataj#17 f1
-r--r-----. 1 wang_g1. 0 Apr 4 09: 25f1
[root@centos6 data]#chmod o+r f1
[root@centos6 data]#chmod u=f1
[root@centos6 data]#chmod g=r f1
[root@centos6 dataj#chmod o+w f1
[root@centos6 data]#11 f1
---r-rw-. i wang gi'o Apr4 09: 25 f1
[root@centos6 data ] #su wang
[wang@centos6 data]$cat f1
cat: f1: Permission denied
[wang@centos6 data ] $chmod u=rwx f1
[wang@centos6 data]$11 f1
- rwxr--rw- wang 91 0 Apr4 09:25 f1
加完x权限之后,颜色会变绿,在Linux里面绿色表示有执行权限,g1组只有读权限。
3.有些文件希望员工听写新内容,但是不能看别人的内容
[mage@centos6 data] $
[mage@centos6 data]$11 f1
-rwxr---W-. 1 wang g1 5 Apr 4 09:48 f1
[mage@centos6 dlta ]$echo mage2 >> f1
[mage@centos6 data]$11 f1
-rwxr---w-. 1 wang g1 11 Apr 4 09:49 f1
[mage@centos6 data] $cat f1
cat: f1: Permission deni ed
[ mage@centos6 data] $
[ mage@centos6 data ] $
[ mage@centos6 data]$11 f1
-rwxr---W-.1 wang. g1 11 Apr 4 09:49 f1
[magePcentos6 data]$>f1
[mageacentos6 data]$ll f1
rwxr---w-. 1 wang g1 0 Apr 4 09:50 f1
[mageacentos6 data]$rm -f f1
有写权限之后,可以将文件清空,删除文件的权限不是由文件决定,是由目录决定。
删除文件相当于目录文件的列表发生了变化,对于目录来讲,目录是一个特殊文件,目录的内容就是文件列表,所以把目录里面的文件新建或者删除必须要对这个目录文件具有写权限,才有能力去修改列表。
删除文件相当于目录内容改化,目录内容要是进行修改,必须要对目录有写权限。
对于普通用户来讲,为什么能够运行程序,因为文件都给了执行权。-x等于把所有权限都去掉。
exit
[root@centos6 data] #chmod -x /bin/ 1s
[root@centos6 data] #chmod aAC /bin/1s
[ root@centos6 data]#] 1 /bin/1s
-bash: /bin/1s: Permission denied
[ root@centos6 data]#alias 11
alias 1 1='1s一1 --CO lor =auto
[ root@centos6 data] #ls -l /bin/ls
-bash: /bin/1s: Permission denied
[root@centos6 data]#11 /bin/cat
-bash: /bin/1s: Permission denied
[root@centos6 data] #chmod +X /bin/ls
[root@centos6 data]#11 /bin/cat
-rwxr-xr-x. 1 root root 48568 Mar 23
2017 /bin/cat
[root@centos6 data] #chmod -X /bin/cat
[root@centos6 data]#1l /bin/cat
-rw-r--r--. 1 root root 48568 Mar 23
2017 7bin/cat
[root@centos6 data] #su wang
[wang@centos6 data] $cat /etc/issue
bash: /bin/cat: Permission denied
[wang@centos6 data] $ exit
Exit
[root@centos6 data]#cat /etc/issue
-bash: /bin/cat:permission denied
用 root 账号执行 cat,读权限和写权限对于 root 账号不受控制,如果一个文件没有赋予 root 文件读和写权限,那么root账号还是可以能读能写的,如果root权限没有执行权限,那么 root 账号就不能执行,除非自己加上。
考虑到安全因素,因为执行权限比较危险,所以防止失误操作。
4.小结论
对于读和写权限,root是不受控制的,执行权限是对root有影响的。执行权限有没有,影响的是所有人。
对于一般的程序来讲,如果读权限去掉,程序还是可以运行,读权限对于二进制程序来讲不是必须的。如果没有执行权限去使用file命令,就不能判断文件类型。
file命令的工作原理是把头部信息打开,看里面的信息格式,如果没有读权限就不能打开头部信息,所以就判断不出来了。读权限不是必须的但是可以让操作更加便利,所以读权限还是要加的。
八、实验规律
1.对于普通用户来讲,读写和执行都是有严格规定的,root账号读写权限没有限制,执行权限有限制。
2.普通用户无法修改文件的所有者,删除文件要求不是对文件的权限而是对目录的写权限。
3.普通用户可以更改文件所属组(前提要在所属组里面)。
九、文件夹权限对普通用户的意义
[ root@centos6 data]#tree /dir1
/dir1 [error opening dir]
0 directories, 0 fi les
[root@centos6 data] #tree dir1
dir1
f1
0 directories, 1 file
[root@centos6 data] #touch dir2/f2
touch: cannot touch dir2/f2': NO such file or di rectory
[root@centos6 data] #touch dir1/f2
[root@centos6 data]#tree dir1
dirl
f1
f2
0 directories, 2 files
[root@centos6 data]#11 -d dir1
drwx--xr-x.2 root root 4096 Apr 4 10:04 dir
l
Other是读执行权限,可以进目录看目录列表,同时也能访问文件。如果去掉读文件,账号访问目录时,不能看目录的文件列表了。
对于目录来讲,文件的名称是它的内容,没有读权限就不能进行查看。如果有读权限没有执行权限,是可以看文件名称和内容的,但是看不了属性,也不能进入目录,对于目录来讲,没有执行权限不能访问文件内容,不能cd进去,即使有读权限。
文件的执行权限就是能否运行,如果希望用户能够访问目录,执行权限就是一个基础权限。
读权限也是如此。如果想让用户访问文件可以给其读权限。如果给目录读写执行权限,f1文件是root的,其他用户是可以看文件的,但是不能修改,因为没有写权限,可以删除文件,因为对目录有写权限。文件能不能删除不是由文件本身决定而是由其所在的目录决定。如果给了目录写权限没有给他执行权限,其他用户是不可以删除文件的。如果读权限去掉,mage是不能删除文件的。
当访问文件时,如何判断最终得到的权限呢?
[mage@centos6 data]$1t f1
-r--rw-rwx.1 wang g1 0 Apr 4 09:50 f1
[ mage@centos6 data] 5/ data/ f1
bash: /data/f1: Permission denied
[ mage@centos6 data ] $exit
exit
[root@centos6 data]wang
[wang@centos6 data]f1
-r--rw-rwx. 1 wang g1 0 Apr 4 09:50 f1
[wang@centos6 data] Scat f1
[ wang@centos6 data] $echo XXx >> f1
bash: f1: Permission denied
[wang@centos6 data]$id wang
ui d=500(wang) gi d=500 (wang) group s=500 (wang),501(g1),502 (g2)
用户去获取文件的权限的顺序,先看是不是文件所有者,是的话直接看权限,如果不是就去看是不是组里的人,不是的话就去看other,按照所属者所属组和other顺序进行。