本节内容
1. 权限类别
属主(owner) 属组(group) 其他人(other)
2. 查看权限
ls -l
十位: 第一位文件类型-,d,l,
3. 设置权限
chmod 选项 权限模式 filename
选项:-R: 递归设置
4. 字母数字权限
r: 读权限 -->4 -->SUID
w: 写权限-->2-->SGID
x: 执行权限-->1-->SBIT
-:无权限-->0
5. UMASK:022
创建文本666-022=644(创建文本的默认权限)
创建目录777-022=755(创建目录的默认权限)
6.读写执行权限
读权限:
文本:就是查看文本内容
目录:就是ls列出来目录下的文件
写权限:
文本:就是编辑文本内容
目录:就是删除,移动,复制,创建目录下的文件
执行权限:
文本:就是可以执行该文本(二进制程序和脚本)
目录:可以cd到该目录下
7.属主和属组(:和 . )
chown 选项 属主:属组 filename
chown -R 属主: filename(把属主和属组都改了)
chown -R :属组 filename(只更改了属组)
chown -R 属主:属组 filename(把属主和属组都改了)
chown -R 属主 filename(只更改属主)
8. 文件特殊权限
SUID:只能设置在二进制程序上面(不可以设置在目录上面,可以查看文本,编辑文本)
如果给二进制程序上面设置了SUID权限(属主和执行者必须有
执行权限),那么执行者在执行该二进制程序使瞬间获得属主权限
SGID:可以设置在二进制也可以设置在目录上面
SBIT:只能删除自己创建的文件
9. ACL权限
针对特定用户设置特定权限
setfacl -m u:ken:r filename创建
getfacl filename查看
setfacl -b filename删除
10. sudo
就是让某些用户拥有某些命令的最高权限
visudo
ken ALL=(ALL) ALL
用户 地址 root 命令
一、权限概述
Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者)、group(和所有者同组的用户)、others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身份各有read(读)、write(写)、execute(执行)等权限。
linux系统中的三类人:属主、属组、其他人
如果root用户创建了test文件,默认属主为root,属组也是root,其他人ren1,ren1用户既不是root用户,也不再root组里面,是其他人。
在Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。
root用户可以无视读写权限,root用户无执行权限也是无法执行,但自身可以加上权限。
二、权限介绍
在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹、特定系统指令的使用或存储量的限制。
在Linux中分别有读、写、执行权限:
读权限:
对于目录来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限:
对目录来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档rm,mv,touch…
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限:
对于目录来说:执行权限影响用户是否可以执行cd操作
对于文件来说,特别脚本文件。执行权限影响文件是否可以运行。
三、查看文件权限
十位字符表示含义:
第1位:表示文档类型,取值常见的有“d表示文件夹”、“-表示文件”、“l表示软连接”、“s表示套接字”、“c表示字符设备”、“b表示块状设备”等等;
第2-4位:表示文档所有者的权限情况,第2位表示读权限的情况,取值有r、-;第3位表示写权限的情况,w表示可写,-表示不可写,第4位表示执行权限的情况,取值有x、-。
第5-7位:表示与所有者同在一个组的用户的权限情况,第5位表示读权限的情况,取值有r、-;第6位表示写权限的情况,w表示可写,-表示不可写,第7位表示执行权限的情况,取值有x、-。
第8-10位:表示除了上面的前2部分的用户之外的其他用户的权限情况,第8位表示读权限的情况,取值有r、-;第9位表示写权限的情况,w表示可写,-表示不可写,第10位表示执行权限的情况,取值有x、-。
权限分配中,均是rwx的三个参数组合,且位置顺序不会变化。没有对应权限就用 – 代替。
例子:
[root@renyz08 ~]# ll #ll 是“ls -l”的别名
-rw-r--r-- 1 root root 0 7月 12 19:38 test
rw- 表示属主的权限。表示属主对test文件拥有读写权限,无执行权限
r-- 表示属组的权限。表示属组里面的用户对test文件拥有读权限,无写和执行权限
r-x 表示其他人的权限。表示其他人对test文件拥有读和执行权限,无写权限。
四、权限设置
语法:#chmod 选项 权限模式 文件
作用:修改文件的权限
常用选项:
-R:递归设置权限 (当文档类型为文件夹的时候)
(同时修改目录及目录下的所有文件)
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
注意点:如果想要给文档设置权限,操作者要么是root用户,要么就是文档的所有者。
1、用户表示
u:表示所有者身份owner(user)属主
g:表示给所有者同组用户设置(group)属组
o:表示others,给其他用户设置权限(其他人)
a:表示all,给所有人(包含ugo部分)设置权限
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
2、权限字符:
r:读
w:写
x:表示执行
-:表示没有权限
3、权限分配方式:
+:表示给具体的用户新增权限(相对当前)
-:表示删除用户的权限(相对当前)
=:表示将权限设置成具体的值(注重结果)【赋值】
例子1:给属主增加执行权限
-rw-r--r-- 1 root root 0 7月 12 19:38 test
[root@renyz08 ~]# chmod u+x test
[root@renyz08 ~]# ll
-rwxr--r-- 1 root root 0 7月 12 19:38 test
例子2:去掉属主的执行权限
[root@renyz08 ~]# chmod u-x test
[root@renyz08 ~]# ll
-rw-r--r-- 1 root root 0 7月 12 19:38 test
例子3:授予属主读写执行权限
方法一:
[root@renyz08 ~]# chmod u+x test
方法二:
[root@renyz08 ~]# chmod u=rwx test
[root@renyz08 ~]# ll
-rwxr--r-- 1 root root 0 7月 12 19:38 test
例子4:属主仅用于读权限
方法一:
[root@renyz08 ~]# chmod u-wx test
[root@renyz08 ~]# ll
-r--r--r-- 1 root root 0 7月 12 19:38 test
方法二:
[root@renyz08 ~]# chmod u=r test
[root@renyz08 ~]# ll
-r--r--r-- 1 root root 0 7月 12 19:38 test
例子5:给属组添加执行权限
[root@renyz08 ~]# chmod g+x test
[root@renyz08 ~]# ll
-r--r-xr-- 1 root root 0 7月 12 19:38 test
例子6:给属组删除执行权限
[root@renyz08 ~]# chmod g-x test
[root@renyz08 ~]# ls -l
-r--r--r-- 1 root root 0 7月 12 19:38 test
例子7:授予属组中用户读写执行权限
[root@renyz08 ~]# chmod g=rwx test
[root@renyz08 ~]# ll
-r--rwxr-- 1 root root 0 7月 12 19:38 test
例子8:给其他人添加执行权限
[root@renyz08 ~]# chmod o+x test
[root@renyz08 ~]# ll
-r--rwxr-x 1 root root 0 7月 12 19:38 test
例子9:给其他人删除执行权限
[root@renyz08 ~]# chmod o-x test
[root@renyz08 ~]# ll
-r--rwxr-- 1 root root 0 7月 12 19:38 test
例子10:给其他人添加读写执行权限
[root@renyz08 ~]# chmod o=rwx test
[root@renyz08 ~]# ll
-r--rwxrwx 1 root root 0 7月 12 19:38 test
思考:让ren2用户拥有root用户在/tmp目录下创建对的test文件的写权限?
-rw-r--r-- 1 root root 0 7月 12 20:32 test
方法一:
[root@renyz08 tmp]# chmod 0+w test
方法二:
[root@renyz08 tmp]# usermod -G root ren2
方法三:
[root@renyz08 tmp]# chown ren2 test
方法四:
[root@renyz08 tmp]# chown :ren2 test
4、用数字表示权限
经常会在一些技术性的网页上看到类似于#chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
读: r 4(2^2)
写: w 2(2^1)
执行:x 1(2^0)
没有任何权限:0 对应---
如下:
rwxr–r 744
755 rwxr-xr-x
700 rwx------
655 rw-r-xr-x
644 rw-r—r--
600 rw-------
000 ---------
面试题:用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
所有者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其他用户 = 1 = 执行
问题在权限731中3表示写+执行权限,但是写又不必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。以后建议各位在设置权限的时候不要设置这种“奇葩权限”。
单独出现2、3的权限数字一般都是有问题的权限
例子1:属主拥有读写权限,属组拥有读权限,其他人拥有读写执行权限
[root@renyz08 tmp]# chmod 647 test
[root@renyz08 tmp]# ll test
-rw-r--rwx 1 root root 0 7月 12 20:32 test
例子2:同时给所有用户添加执行权限
[root@renyz08 tmp]# chmod +x test #a+x 中a可以省略
[root@renyz08 tmp]# ll test
-rwxr-xrwx 1 root root 0 7月 12 20:32 test
例子3:同时给所有用户删除执行权限
[root@renyz08 tmp]# chmod -x test
[root@renyz08 tmp]# ll test
-rw-r--rw- 1 root root 0 7月 12 20:32 test
例子4:同时给所有用户添加读权限
[root@renyz08 tmp]# chmod +r test
[root@renyz08 tmp]# ll test
-rw-r--rw- 1 root root 0 7月 12 20:32 test
例子5:同时给所有用户删除读权限
[root@renyz08 tmp]# chmod -r test
[root@renyz08 tmp]# ll test
--w-----w- 1 root root 0 7月 12 20:32 test
例子6:同时给所有用户添加写权限
[root@renyz08 tmp]# chmod +w test
#如果前面不加a的话,默认只添加属主的写权限
[root@renyz08 tmp]# ll test
--w------- 1 root root 0 7月 12 20:32 test
[root@renyz08 tmp]# chmod a+w test
[root@renyz08 tmp]# ll test
--w--w--w- 1 root root 0 7月 12 20:32 test
例子7:同时删除所有人的写权限
[root@renyz08 tmp]# chmod a-w test
[root@renyz08 tmp]# ll test
---------- 1 root root 0 7月 12 20:32 test
设置权限注意事项:
要么只读
如果有写权限,那么就需要有读权限
5、-R 选项:在更改目录权限时使用
例子1:
[root@renyz08 tmp]# mkdir test
[root@renyz08 tmp]# ll test
总用量 0
[root@renyz08 tmp]# touch test/test{1..4}
[root@renyz08 tmp]# ll test
总用量 0
-rw-r--r-- 1 root root 0 7月 12 20:53 test1
-rw-r--r-- 1 root root 0 7月 12 20:53 test2
-rw-r--r-- 1 root root 0 7月 12 20:53 test3
-rw-r--r-- 1 root root 0 7月 12 20:53 test4
[root@renyz08 tmp]# chmod +x test
#不加-R选项仅仅只会更改ken目录本身的权限
[root@renyz08 tmp]# ls -ld test
drwxr-xr-x 2 root root 58 7月 12 20:53 test
[root@renyz08 tmp]# ll test
总用量 0
-rw-r--r-- 1 root root 0 7月 12 20:53 test1
-rw-r--r-- 1 root root 0 7月 12 20:53 test2
-rw-r--r-- 1 root root 0 7月 12 20:53 test3
-rw-r--r-- 1 root root 0 7月 12 20:53 test4
[root@renyz08 tmp]# chmod -R +x test
#加-R选项会把ken目录以及目录下的所有文件权限都会更改
[root@renyz08 tmp]# ll test
总用量 0
-rwxr-xr-x 1 root root 0 7月 12 20:53 test1
-rwxr-xr-x 1 root root 0 7月 12 20:53 test2
-rwxr-xr-x 1 root root 0 7月 12 20:53 test3
-rwxr-xr-x 1 root root 0 7月 12 20:53 test4
五、chown命令
作用:更改文件的属主(change owner)
语法:#chown -R 新的username 文档路径
选项:
-R 同时更改目录以及目录下的所有文件的属主和属组(文件不需要-R)
例子1:改变test2文件的属主为ren2
[root@renyz08 tmp]# chown ren2 test/test2
例子2:改变test2文件的属组为ren3
[root@renyz08 tmp]# chown :ren3 test/test2
[root@renyz08 tmp]# ll test/test2
-rwxr-xr-x 1 ren2 ren3 0 7月 12 20:53 test/test2
例子3:同时更改为test3文件的属主和属组权限为root
方法一:
[root@renyz08 tmp]# chown root:root test/test3
[root@renyz08 tmp]# ll test/test3
-rwxr-xr-x 1 root root 0 7月 12 20:53 test/test3
方法二:
[root@renyz08 tmp]# chown root: test/test3
方法三:
[root@renyz08 tmp]# chown root.root test/test3
方法四:
[root@renyz08 tmp]# chown root. test/test3
例子4:-R 选项
[root@renyz08 tmp]# chown ren4. test
#不加-R仅仅更改目录本身的属主和属组
[root@renyz08 tmp]# ll
drwxr-xr-x 2 ren4 ren4 58 7月 12 20:53 test
[root@renyz08 tmp]# ll test
总用量 0
-rwxr-xr-x 1 root root 0 7月 12 20:53 test1
-rwxr-xr-x 1 ren2 ren3 0 7月 12 20:53 test2
-rwxr-xr-x 1 root root 0 7月 12 20:53 test3
-rwxr-xr-x 1 root root 0 7月 12 20:53 test4
[root@renyz08 tmp]# chown -R ren4. Test
#加上-R同时更改目录以及目录下的所有文件的属主和属组
[root@renyz08 tmp]# ll test
总用量 0
-rwxr-xr-x 1 ren4 ren4 0 7月 12 20:53 test1
-rwxr-xr-x 1 ren4 ren4 0 7月 12 20:53 test2
-rwxr-xr-x 1 ren4 ren4 0 7月 12 20:53 test3
-rwxr-xr-x 1 ren4 ren4 0 7月 12 20:53 test4
六、文件的特殊权限
SUID
SGID
SBIT
ACL
1、SUID(set uid设置用户ID)
限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
注意:设定suid的命令其他人也需要有执行权限
uid权限设置:
chmod u+s cmd
例子1:给cat命令添加SUID权限(普通用户没法cat /etc/shadow)
[root@renyz08 ~]# chmod u+s `which cat`
[root@renyz08 ~]# ls -ld `which cat`
-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
#文件有执行权限时,添加SUID后,显示s
[root@renyz08 ~]# chmod u-x `which cat`
[root@renyz08 ~]# ls -ld `which cat`
-rwSr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
#文件没有执行权限时,添加SUID后,显示S
验证:
再次查看/etc/shadow文件发现可以看了
[ren23@renyz08 ~]$ cat /etc/shadow
root:$6$yqv.0UOIdStkIBmT$lr6lh4dghoNJQF6YoPn4upZFCUNT0df1SDujNlnIQzWKETrEJsYgdcqly611u1FXmkPblNMWG2swNETi7N5Ff1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
…
2、SGID
限定:既可以给二进制可执行程序设置,也可以对目录设置权限
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
例子1:给目录test添加SGID权限
[root@renyz08 tmp]# ls -ld test
drwxr-xr-x 2 ren4 ren4 97 7月 13 09:01 test
[root@renyz08 tmp]# chmod g+s test
drwxr-sr-x 2 ren4 ren4 97 7月 13 09:01 test
[root@renyz08 tmp]# touch test/test123
[root@renyz08 tmp]# ll test/test123
-rw-r--r-- 1 root ren4 0 7月 13 10:25 test/test123
3、SBIT
对于设置sbit权限的文件,用户只能删除自己创建的文件,无法删除其他用户的文件
例子1:设置SBIT权限
[root@renyz08 ~]# chmod o+t /tmp/test
[root@renyz08 ~]# ls -ld /tmp/test
drwxrwsr-t 2 ren4 ren4 125 7月 13 10:33 /tmp/test
/tmp目录本身默认已经添加了SBIT权限!
[root@renyz08 ~]# ls -ld /tmp
drwxrwxrwt. 15 root root 4096 7月 13 09:41 /tmp
验证:
[ren2@renyz08 test]$ touch test22
[ren2@renyz08 test]$ su - ren3
[ren3@renyz08 test]$ rm -rf test22
验证无法删除!
如何删除?
[root@renyz08 ~]# chmod o-t /tmp/test
[ren3@renyz08 test]$ rm -f test22
[ren3@renyz08 test]$
4、ACL
扩展ACL :access control list
作用:对特定的用户实现了权限管控
选项:-m (--modify) 表示设置的意思
例子1:设置ren2用户对文件test8拥有读写权限
[root@renyz08 test]# setfacl -m u:ren2:rw test8
-rw-rw-r--+ 1 root ren4 0 7月 13 10:33 test8
验证:
[root@renyz08 test]# id ren2
uid=1005(ren2) gid=0(root) 组=0(root),1011(ren3)
[root@renyz08 test]# id ren3
uid=1011(ren3) gid=1011(ren3) 组=1011(ren3),0(root)
[ren3@renyz08 test]$ su - ren2
[ren2@renyz08 ~]$ cd /tmp/test
[ren2@renyz08 test]$ cat test8
[ren2@renyz08 test]$ echo "123" > test8 #ren2用户可读可写
[ren2@renyz08 test]$ cat test8
123
[ren2@renyz08 test]$ su - ren3
[ren3@renyz08 ~]$ cd /tmp/test
[ren3@renyz08 test]$ cat test8
123
[ren3@renyz08 test]$ echo "dd" > test8 #ren3用户可读不可写
-bash: test8: 权限不够
怎么清除acl权限:
[root@renyz08 test]# setfacl -b test8
[root@renyz08 test]# getfacl test8
# file: test8
# owner: root
# group: ren4
user::rw-
group::r--
other::r--
七、sudo
sudo(switch user do)命令用来进行权限设置。Sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认sudo中是没有除root之外用户的规则,要想使用需先配置sudo。
Sudo配置文件:/etc/sudoers
该文件默认只读,不允许修改,因此不能直接修改。
a. 配置sudo文件请使用“#visudo”,打开之后其使用方法和vim一致
b. 配置普通用户的权限(在root下增加)
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
Root:表示用户名,如果是用户组,则可以写成“%组名”
ALL:表示允许登录的主机(地址白名单)
(ALL):表示以谁的身份执行,ALL表示root身份
ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割
例子1:让ren2用户拥有创建用户的功能
[root@renyz08 test]# visudo
101 ren2 ALL=(ALL) /sbin/useradd
#ren2是用户名,ALL表示可以从任意主机进行登录(ALL) 以root的身份进行尽心命令的运行
#/sbin/useradd表示ren2用户可以以root的身份来执行创建用户
[root@ken tmp]# visudo
[ren2@renyz08 ~]$ useradd ren11
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。
[ren2@renyz08 ~]$ sudo useradd ren11
#配置visudo后需要使用sudo去执行相应的命令
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
#如果用户ren2设置了登录密码,在第一次执行命令时需要输入密码,同时5分钟之内不需要输入密码!
注意:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。
路径可以使用which命令来查看
语法:#which 指令名称