一、权限概述
总述:Linux系统一般将文件可存/取访问的身份分为了三个类别:owner、group、others,且三种身份各有read、write、execute等权限;
1、权限的介绍
1>什么是权限
在多用户(可以是不同时登录)计算机系统的管理中,权限是对某个指定的用户具有特定的系统资源使用权力,如,文件夹特定系统指令的使用或存储量的限制;
在Linux中有读、写、执行的权限;
读权限:
对于文件夹来说,读权限影响用户是否能列出目录结构;
对于文件来说,读权限影响用户能否查看文件内容;
写权限:
对于文件夹来说,写权限影响到用户是否能在文件夹下“创建/删除/复制到/移动的 ”文档;
对于文件来说,写权限影响用户是否能编辑文件内容;
执行权限:
一般是对于文件来说,特别是脚本文件;
2、身份介绍
owner身份,文件拥有者;(默认是文档创建者,可以更改)
由于Linux是多用户、多任务的操作系统,因此可能常常存在多用户同时在某台主机系统上工作,但每个用户均可在主机系统上设置文件的权限,让其成为某个用户的“私密文件”,即个人所有者,因为设置了适当的文件权限,除了本人外(文件所有者)之外的用户无法查看文件内容;
group身份,与文件所有者同组的用户
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源时;
others身份,其他人,相当于所有者
anny,Tony,jemis是一个用户组,另外的一个用户John和三者无关系,就是others;
root用户,超级管理员
在所以用户中拥有最大的权限;
3、Linux的权限介绍
需要设置权限,就需要知道文件的一些基本属性和权限的分配规则,在Linux系统中,ls命令常用来查看文件的属性,用于查看文件的名称和相关属性;
#ls -l 路径(ls -l 等价于ls -ll)
如:[root@localhost ~]#ls -l ~
Linux中存在用户、用户组和其他人概念,各有不同的权限,对于一个文件来说,其权限具体
分配如下:
d rwx r-x ---
权限具体分配 | |
---|---|
d | 文件类型 |
r w x | 文件所有者权限 |
r - x | 文件所属用户组权限 |
- - - | 其他人对这个文件的权限 |
r | read,可读 |
w | write,可写 |
x | excute,可执行 |
- | 表示没有对应权限 |
十位字符的含义:
第1位:表示文档类型,取值常见的有 “ d ”表示文件夹,“ - ”表示文件,“ l ”表示软链接
(即快捷方式),“ s ”表示套接字;
第2~4位:表示文档所有者权限情况,第 2 位表示读权限情况,第 3 位表示写权限情况,
第 4 位表示可执行权限情况;
第5~7位:表示与所有者在同一个组的用户的权限情况;
第8~10位:表示处理上面2部分用户之外的其他用户的权限情况;
权限分配中,均是rwx的三个参数组合,且位置顺序不会变化,没有权限就用“ - ”代替;
二、权限设置
语法:#chmod 选项 权限模式 文档
选项:
**-R** :表示递归权限设置,当文档类型为文件夹时
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是文件夹,可以是相对路径,也可以是绝对路径
```注意:如果想要给文档设置权限,操作者要么是root用户,要么是文档所有者```
权限设置
1、字母形式
字母 | 介绍 |
---|---|
u | 用户 |
g | 所属群体 |
o | 其他人 |
a | 其他人(“ 全部 ”) |
+ | 增加权限 |
- | 减少权限 |
= | 确定权限 |
r | 可读 |
w | 可写 |
x | 执行 |
给谁设置:
u:表示所有者身份,owner(user)
g:表示所有者同组用户设置,(group)
o:表示others,给其他用户设置权限
a:表示all,给所有人(包括u、g、o部分)设置权限
注意:如果在设置权限时,不指定给谁设置权限,则默认给所有用户设置
权限分配方式:
权限分配方式 | |
---|---|
+ | 表示给具体的用户设置权限(相对于当前) |
- | 表示删除用户的权限(相对于当前) |
= | 表示将权限设置成具体的值(注重结果) |
如:需要给anaconda -ks.cfg文件(-rw-------)设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权
限,其他用户只有读权限;
<1>#chmod u+x,g+rx,o+r anaconda -ks.cfg
<2>#chmod u=x,g=rx,o=r anaconda -ks.cfg
如:如果anaconda -ks.cfg文件什么权限读没有,可以使用root用户设置说有人独有执行权限,
<1>#chmod +x anaconda -ks.cfg
<2>#chmod a=x anaconda -ks.cfg
<3>#chmod a+x anaconda -ks.cfg
2、数字形式
经常可以看到类似于chmod 777 a.txt这种权限授予方式,这种方式称之为数字形式权限
数字形式 | |
---|---|
读 (r) | 4 |
写 (w) | 2 |
执行(x) | 1 |
没有权限 | 0 |
数值 | 权限 |
---|---|
0 | - - -,不能读,不能写,不能执行 |
1 | - - x,不能读,不能写,能执行 |
2 | - w - ,不能读,能写,不能执行 |
3 | - w x,不能读,能写,能执行 |
4 | r - - ,能读,不能写,不能执行 |
5 | r - x,能读,不能写,能执行 |
6 | r w -,能读,能写,不能执行 |
7 | r w x,能读,能写,能执行 |
如:给anaconda -ks.cfg文件设置权限,要求:所有者拥有全部权限,同组用户拥有可读权限,其他用户只读
权限数值 | |
---|---|
全部权限(u) | 读 + 写 + 执行 = 4 + 2 + 1 = 7 |
读+执行(g) | 读 + 执行=4+1=5 |
读权限 (o) | 读 = 4 |
#chmod 754 anaconda -ks.cfg
奇葩面试题:
用超级管理员设置文档权限命令为#chmod -R 731 aaa ,问有何异常?
分析 | |
---|---|
拥有者 | 7 = 4 + 2 + 1 = 读 + 写 +执行 |
同组用户 | 3 = 2 + 1 = 写 + 执行 —> 无法读,怎么写 |
其他用户 | 1 = 执行 |
注意:设置写权限时要注意是否会出现类似上面的现象,权限数字出现 “ 2 ” 或“ 3 ”,则该权限均存在不合理的地方;
3、注意事项
使用root用户创建一个文件夹(/oo),权限默认,具体如下:
drwxr-xr-x 2 root root 4096 4月 1 14:43 oo
需要在oo目录下创建文件(/oo/xx.txt),需要给777权限;
[root @ localhost /] # touch /oo/xx.txt
[root @ localhost /] # ls -l /oo/
总用量 0
-rw-r--r-- 1 root root 0 四月 1 14:45 xx.txt
[root @ localhost /] # chmod 777 /oo/xx.txt
[root @ localhost /] # ls -l /oo/
总用量 0
-rwxrwxrwx 1 root root 0 四月 1 14:45 xx.txt
切换到test用户(不是文档所有者,也不是同组用户,属于other部分)
问题1:test用户是否可以打开/oo/xx.txt文件?
是
问题2:test能否编辑/oo/xx.txt文件?
是
问题3:test用户是否可以删除/oo/xx.txt文件?
否
```原因:由于文件夹没有写权限,故无法改变目录结构,无法删除文件
同样也不允许创建文件或文件夹```
三、属主和属组的设置
属主:所属的用户,即文件的主人
属组:所属的用户组
drwxr-xr-x 3 root root 4096 三月 30 14:57 media
前面一个root,表示所属用户,属主
后面一个root,表示所属用户组,属组
这两项信息在文档创建的时候会使用,创建者的信息(用户名、用户所在的主组名称)‘’
如果需要删除某个用户,则该文档对应的属主和属组信息就需要修改;
drwxr-xr-x | 3 | root | root | 4096 | 三月 30 14:57 | media |
---|---|---|---|---|---|---|
文档类型及权限 | 连接数 | 文档所属用户 | 文档所属组 | 文档大小 | 文档最后被修改时间 | 文档名称 |
1、chown 命令
作用:用于修改文档所属的用户
语法:# chown -R username 文档路径
-R,改变整个文件夹,表递归,文件不需要
如:将/oo/目录所有者改为test用户
[root @ localhost /] # -rwxrwxrwx 2 root root 4096 4月 1 14:43 oo
[root @ localhost /] # chown test /oo
[root @ localhost /] # ls -l
-rwxr-xrwx 2 test root 4096 4月 1 14:43 oo
2、chgrp 命令
作用:更改文档所属的用户组;
语法:chrgp -R groupname 文档路径
-R,表示递归
如:将/oo/目录所有者改为test用户,并且将所属用户组也改为test
[root @ localhost /] # drwxr-xr-x 2 test root 4096 4月 1 14:43 oo
[root @ localhost /] # chgrp test /oo/
[root @ localhost /] # ls -l
-rwxr-xr-x 2 test root 4096 4月 1 14:43 oo
```注意:使用一个命令同时修改用户及用户组```
语法: #chown -R username:groupname 文档路径
就是在中间添加一个冒号(英文)
四、拓展
问题1:reboot 、shutdown、init、halt、user管理,在使用普通用户身份无法操作,但在有些情形下需要执行权限,有不可把root用户把自己的命令告诉普通用户,该如何解决?
可以使用sudo(switch user do)命令进行权限设置,sudo可以让管理员(root)事先定义某些特殊命令那些用户可以执行;
默认sudo中没有出root用户之外的规则,向要使用则需要先配置sudo
sudo配置文件:/etc/sudoers
<1>配置sudo文件使用“ #visudo” ,打开之后其使用方法和vim一致
[root @ localhost /] # vim /etc/sudoers
[root @ localhost /] # visudo
<2>配置普通用户的权限
**配置文件中默认的配置**
##Allow root to run any commands anywhere
root ALL=(ALL) ALL
root:表示用户名,如果是用户组,则可以写成“ %组名 ”
ALL:表示登录的主机(地址或白名单)
(ALL):表示以谁的身份去执行,ALL表示以root身份
ALL:表示当前用户可以执行的命令,多个命令可以使用“ ,(英文逗号)”分割
案例:test用户不能添加用户,要去使用sudo设置,将其设置为可添加用户,并且可以修改密码
(但不能修改root用户密码)
注意:在写sudo规则时,不建议写直接形式的命令,而是写命令的完整路径
路径可以用which命令来查看
语法:# which 指令名称
[NO write since last change] --->以root用户添加规则
/usr/sbin/useradd
/usr/bin/passwd
最终配置如下:
test ALL=(ALL) /usr/sbin/useradd,/usr/bin/passwd
中间用英文逗号分隔开
在添加好对应的规则之后旧可以切换用户,切换到普通用户test,再去执行
此时需要执行刚刚配置分规则,具体如下:
[test @ localhost /] $ sudo useradd aop
[sudo] passwword for test: **-->确认test用户密码**
[test @ localhost /] $ tail -l /etc/passwd
aop:x:502:502:: /home/aop:/bin/bash
在输入sudo指令之后,需要输入当前的用户密码进行确认操作(不是root用户密码),输入之后接来下5分钟内再次执行sudo指令不需要密码;
注意:安装要求,不能让其他用户(test)修改root用户密码,而按照当前规则用户test依旧可以修改root密码,
说明此规则依旧未结束
test ALL=(ALL) /usr/sbin/useradd,!/usr/bin/passwd,/usr/bin/passwd [A-Za-Z]*,!/usr/bin/passwd root
普通用户查看自身具有那些特殊权限?
[test @ licalhost /] $ sudo -l
sudo不是任何linux独有的命令,但常见的centos和unbuntu都存在这个命令