chmod权限管理
 chmod(英文全拼:change mode)设置用户对文件的权限
 命令格式:chmod [-选项] 归属关系+-=权限类别 文件...
 常用选项:
   -R 递归修改目录下所有的子文件与子目录的权限与父目录相同
 归属关系:u 所有者  g 所属组  o 其他人
 权限类别: r 读取 w 写入 x 执行 - 没有权限  
 操作:+ 添加权限 - 去除权限 = 重新定义权限
 权限数字表示:r ---- 4   w ---- 2  x ---- 1   0 没有权限
#查看文件详细属性
[root@localhost ~]# ll hello
-rw-r--r--. 1 root root 426 3月  28 15:00 hello

#为文件所有者添加执行权限
[root@localhost ~]# chmod u+x hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

#为文件所属组添加写权限
[root@localhost ~]# chmod g+w hello
[root@localhost ~]# ll hello
-rwxrw-r--. 1 root root 426 3月  28 15:00 hello

#为文件其他人添加写权限
[root@localhost ~]# chmod o+w hello
[root@localhost ~]# ll hello
-rwxrw-rw-. 1 root root 426 3月  28 15:00 hello

#使用(逗号)可以同时为多个用户授权
[root@localhost ~]# chmod g+x,o+x hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello

#去除所有者执行权限
[root@localhost ~]# chmod u-x hello
[root@localhost ~]# ll hello
-rw-rwxrwx. 1 root root 426 3月  28 15:00 hello

#去除所属组执行权限
[root@localhost ~]# chmod g-x hello
[root@localhost ~]# ll hello
-rw-rw-rwx. 1 root root 426 3月  28 15:00 hello

#去除其他人执行权限
[root@localhost ~]# chmod o-x hello
[root@localhost ~]# ll hello
-rw-rw-rw-. 1 root root 426 3月  28 15:00 hello

#同时去除ugo写权限
[root@localhost ~]# chmod u-w,g-w,o-w hello
[root@localhost ~]# ll hello
-r--r--r--. 1 root root 426 3月  28 15:00 hello

#重新定义所有者权限
[root@localhost ~]# chmod u=rwx hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

#重新定义所属组权限
[root@localhost ~]# chmod g=rwx hello
[root@localhost ~]# ll hello
-rwxrwxr--. 1 root root 426 3月  28 15:00 hello

#重新定义其他人权限
[root@localhost ~]# chmod o=rwx hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello

#创建目录并设置目录权限
[root@localhost ~]# mkdir /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月  11 14:30 /test

#为目录所属组添加写权限
[root@localhost ~]# chmod g+w /test
[root@localhost ~]# ll -d /test
drwxrwxr-x. 2 root root 6 4月  11 14:30 /test

#为目录其他人添加写权限
[root@localhost ~]# chmod o+w /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 6 4月  11 14:30 /test
[root@localhost ~]# 

#重新定义所有用户权限
[root@localhost ~]# chmod u=rwx,g=rx,o=rx /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月  11 14:30 /test

#同时为所有用户定义相同权限
[root@localhost ~]# chmod ugo=rwx /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月  11 14:37 /test

#权限数字定义方式
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello
所有者:rwx   4+2+1=7
所属组:r     4
其他人:r     4
[root@localhost ~]# chmod 744 hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

所有者:rw 4+2=6
所属组:rw 4+2=6
其他人:--- 0
[root@localhost ~]# chmod 660 hello
[root@localhost ~]# ll hello
-rw-rw----. 1 root root 426 3月  28 15:00 hello

所有者:rwx 4+2+1=7
所属组:wx  2+1=3
其他人:--- 0
[root@localhost ~]# touch /hello.txt
[root@localhost ~]# ll /hello.txt 
-rw-r--r--. 1 root root 0 4月  11 14:45 /hello.txt
[root@localhost ~]# chmod 730 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwx-wx---. 1 root root 0 4月  11 14:45 /hello.txt

#去除所有用户权限
[root@localhost ~]# chmod 000 /hello.txt 
[root@localhost ~]# ll /hello.txt 
----------. 1 root student 0 4月  11 14:45 /hello.txt

#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月  11 14:37 /test

[root@localhost ~]# mkdir /test/xxoo
[root@localhost ~]# ll -d /test/xxoo/
drwxr-xr-x. 2 root root 6 4月  11 14:54 /test/xxoo/

[root@localhost ~]# ll /test/abc.txt 
-rw-r--r--. 1 root root 0 4月  11 14:37 /test/abc.txt
#默认用户在该目录下创建文件权限与父目录不一致

#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# chmod -R 777 /test
[root@localhost ~]# ll /test/abc.txt 
-rwxrwxrwx. 1 root root 0 4月  11 14:37 /test/abc.txt
[root@localhost ~]# ll -d /test/xxoo
drwxrwxrwx. 2 root root 6 4月  11 14:54 /test/xxoo

#深入理解权限,
[root@localhost ~]# mkdir /test1
[root@localhost ~]# chmod 777 /test1
[root@localhost ~]# ll -d /test1
drwxrwxrwx. 2 root root 6 4月  11 14:57 /test1

#在该目录下创建文件与目录
[root@localhost ~]# touch /test1/root.txt
[root@localhost ~]# mkdir /test1/rootbak
[root@localhost ~]# chmod o=rx /test1
[root@localhost ~]# ll -d /test1
drwxrwxr-x. 2 root root 6 4月  11 14:59 /test1
[root@localhost ~]# touch /test1/root.txt

#普通用户对该目录如果拥有rwx权限是可以删除该目录下任何用户创建的文件(包括root)
[user1@localhost ~]$ cd /test1
[user1@localhost test1]$ ls
root.txt
[user1@localhost test1]$ ll root.txt 
-rw-r--r--. 1 root root 0 4月  11 14:57 root.txt
[user1@localhost test1]$ rm -rf root.txt 
[user1@localhost test1]$ ls
rootbak
[user1@localhost test1]$ rm -rf rootbak/
[user1@localhost test1]$ ls
[user1@localhost test1]$ ll -d /test1
drwxrwxrwx. 2 root root 6 4月  11 14:59 /test1

总结:
1.用户对文件拥有rwx权限
r:查看文件内容
w:对文件内容拥有增删改权限,并不能删除文件,删除文件取决于对文件的父目录有没有rwx权限
x:执行文件写权限可以增加/修改/删除文件里内容

2.用户对目录拥有rwx权限
r:查看目录下内容
w:在该目录创建文件,修改文件属性,删除任何用户的文件(包括root)
x:可以切换到该目录
umask预设权限
 umask用于显示或设置创建文件的权限掩码
 命令格式:umask [-p] [-S] [mode]
[root@localhost ~]# mkdir /test2
[root@localhost ~]# ll -d /test2
drwxr-xr-x. 2 root root 6 4月  11 15:05 /test2
[root@localhost ~]# umask --help
umask: 用法:umask [-p] [-S] [模式]

#查看目录默认权限掩码,以数字形式显示
[root@localhost ~]# umask -p
umask 0022

#查看目录默认权限掩码,以字母形式显示
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx

#设置目录默认权限掩码,为所属组添加写权限
[root@localhost ~]# umask g+w 
[root@localhost ~]# mkdir /test3
[root@localhost ~]# ll -d /test3
drwxrwxr-x. 2 root root 6 4月  11 15:09 /test3

#去除目录默认权限掩码
[root@localhost ~]# umask g-w 
[root@localhost ~]# mkdir /test4
[root@localhost ~]# ll -d /test4
drwxr-xr-x. 2 root root 6 4月  11 15:10 /test4
chown归属关系管理
 chown(英文全拼:change owner)用于设置文件的所有者和所属组关系
 命令格式:
   chown [-选项] 所有者:所属组 文档 #同时修改所有者和所属组身份
   chown [-选项] 所有者 文档 #只修改所有者身份
   chown [-选项] :所属组 文档 #只修改所属组身份

 常用选项:
   -R 递归修改
#创建文件
[root@localhost ~]# chmod 744 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 root student 0 4月  11 14:45 /hello.txt

#修改文件所有者为user1用户
[root@localhost ~]# chown user1 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 user1 student 0 4月  11 14:45 /hello.txt

#修改文件所有者与所属组为lisi
[root@localhost ~]# chown lisi:lisi /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 lisi lisi 4 4月  11 15:26 /hello.txt

#创建目录
[root@localhost ~]# mkdir /test5
[root@localhost ~]# ll -d /test5
drwxr-xr-x. 2 root root 6 4月  11 15:30 /test5

#修改目录所有者与所属组为lisi
[root@localhost ~]# chown lisi:lisi /test5
[root@localhost ~]# ll -d /test5
drwxr-xr-x. 2 lisi lisi 6 4月  11 15:30 /test5

[root@localhost ~]# touch /test5/root.txt
[root@localhost ~]# ll /test5/root.txt 
-rw-r--r--. 1 root root 0 4月  11 15:31 /test5/root.txt

#递归修目录下所有子文件与子目录归属关系
[root@localhost ~]# chown -R lisi:lisi /test5
[root@localhost ~]# ll /test5/root.txt 
-rw-r--r--. 1 lisi lisi 0 4月  11 15:31 /test5/root.txt
SetUID特殊权限
 SetUID(SUID):对于一个可执行的文件用了SUID权限后,普通用户在执行该文件后,临时拥有文件所有者的身份,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有身份
 SetUID权限会附加在所有者的 x 权限位上,所有者的 x 权限标识会变成 s
 设置SetUID命令格式:chmod u+s 文件名
#搜索命令绝对路径
[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

#普通用户使用cat命令是默认无法查看/etc/shadow文件内容
[lisi@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够

#设置SUID权限
[root@localhost ~]# chmod u+s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

#普通用户再次使用cat命令时临时获取文件所有者身份
[lisi@localhost ~]$ cat /etc/shadow

#去除SUID权限
[root@localhost ~]# chmod u-s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

[root@localhost ~]# which vim
/usr/bin/vim

[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2294208 10月 31 2018 /usr/bin/vim

#为vim设置SUID权限
[root@localhost ~]# chmod u+s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2294208 10月 31 2018 /usr/bin/vim

[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2737 4月  10 17:26 /etc/passwd

[root@localhost ~]# chmod u-s /usr/bin/vim
[root@localhost ~]# vim /etc/passwd
SetGID特殊权限
 SetGID(SGID):当对一个可执行的二进制文件设置了SGID后,普通用户在执行该文件时临时拥有其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份
 当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所属组相同
 SetGID权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s
 设置SetGID命令格式:chmod g+s 文件名
[root@localhost ~]# mkdir /test6
[root@localhost ~]# chmod 777 /test6
[root@localhost ~]# ll -d /test6
drwxrwxrwx. 2 root root 6 4月  11 15:59 /test6

#为目录设置SGID权限
[root@localhost ~]# chmod g+s /test6
[root@localhost ~]# ll -d /test6
drwxrwsrwx. 2 root root 6 4月  11 15:59 /test6
#SGID权限会附加在所属组执行权限位,所属组执行权限变为s

[root@localhost ~]# touch /test6/1.txt
[root@localhost ~]# ll /test6/1.txt 
-rw-r--r--. 1 root root 0 4月  11 16:00 /test6/1.txt

#修改目录所属组为lisi组
[root@localhost ~]# chown :lisi /test6
[root@localhost ~]# ll -d /test6
drwxrwsrwx. 2 root lisi 19 4月  11 16:00 /test6

#SGID对目录设置后,在该目录下创建的任何文件都会继承父目录的所属组
[root@localhost ~]# touch /test6/2.txt
[root@localhost ~]# ll /test6/2.txt 
-rw-r--r--. 1 root lisi 0 4月  11 16:01 /test6/2.txt
Sticky BIT特殊权限
 Sticky BIT(SBIT):该权限只针对于目录有效,当普通用户对一个目录拥有rwx权限时,普通用户可以在此目录下拥有增删改的权限,应为普通用户对目录拥有rwx权限时,是可以删除此目录下的所有文件
 如果对一个目录设置了SBIT权限,除了root可以删除所有文件以外,普通用户就算对该目录拥有rwx权限,也只能删除自己建立的文件,不能删除其他用户建立的文件
 SBIT权限会附加在其他人的 x 权限位上,其他人的 x 权限标识会变成 t
 设置SBIT命令格式:chmod o+t 目录名
#为目录设置SBIT
[root@localhost ~]# chmod o+t /test
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 6 4月  11 16:07 /test

[lisi@localhost test]$ ls
kenji.txt  laowang.txt  lisi.txt

[lisi@localhost test]$ rm -rf *
rm: 无法删除"kenji.txt": 不允许的操作
rm: 无法删除"laowang.txt": 不允许的操作
FACL访问控制列表
 FACL(Filesystemctl Access Control List)文件系统访问控制列表:利用文件扩展属性保存额外的访问控制权限,单独为每一个用户量身定制一个权限
 命令格式:setfacl 选项 归属关系:用户名:权限 文档

 常用选项:
   -m 设置权限
   -x  删除指定用户权限
   -b  删除所有用户权限
#为natasha用户设置ACL权限
[root@localhost ~]# setfacl -m u:natasha:rx /yunwei/
[root@localhost ~]# ll -d /yunwei/
drwxrwx---+ 2 root yunwei 54 4月  11 16:43 /yunwei/
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 42 4月  11 16:11 /test

#查看目录ACL权限
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:natasha:r-x
group::rwx
mask::rwx
other::---

#用户测试权限
[natasha@localhost ~]$ ls /yunwei/
hell.sh  kenji.txt  lisi.txt
[natasha@localhost yunwei]$ rm -rf kenji.txt 
rm: 无法删除"kenji.txt": 权限不够
[natasha@localhost yunwei]$ touch natasha.txt
touch: 无法创建"natasha.txt": 权限不够
[natasha@localhost yunwei]$ vim kenji.txt 


[root@localhost ~]# setfacl -m u:tom:rx /yunwei
[root@localhost ~]# setfacl -m u:jack:rx /yunwei
[root@localhost ~]# setfacl -m u:hary:rx /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:hary:r-x
user:tom:r-x
user:natasha:r-x
user:jack:r-x
group::rwx
mask::rwx
other::---

#删除指定用户ACL权限
[root@localhost ~]# setfacl -x u:tom /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:hary:r-x
user:natasha:r-x
user:jack:r-x
group::rwx
mask::rwx
other::---

#删除所有用户ACL权限
[root@localhost ~]# setfacl -b /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
group::rwx
other::---
课后练习
1.创建test1用户,并指定用户UID为6666,指定用户描述信息为test1@163.com,指定用户解释器为/sbin/nologin
test1:x:6666:6666:test1@163.com:/home/test1:/sbin/nologin

2.创建名为stugrp组,将test1用户加入到stugrp组
[root@localhost ~]# groupadd stugrp
[root@localhost ~]# gpasswd -a test1 stugrp

3.请写出/etc/passwd文件中每个字段含义
用户名 密码占位符 UID GID 描述信息 家目录 解释器

4.创建test2用户,并设置密码为123456
[root@localhost ~]# useradd test2
[root@localhost ~]# passwd test2

5.修改root用户密码为123456
[root@localhost ~]# passwd

6.请写出Linux系统下存放用户密码信息文件
/etc/shadow

7.设置test2用户首次登录系统需要修改密码
[root@localhost ~]# chage -d 0 test2

8.使用root切换为test1用户身份
su - 用户名

9.将test2用户添加至stugrp组,并锁定用户密码
[root@localhost ~]# gpasswd -a test2 stugrp
[root@localhost ~]# passwd -l test2

10.删除test1用户,连同用户家目录一并删除
root@localhost ~]# userdel -r test1

11.请写出Linux系统存放组信息文件,与组密码信息文件
[root@localhost ~]# ls /etc/group
[root@localhost ~]# ls /etc/gshadow

12.将test2用户从stugrp组中删除
[root@localhost ~]# gpasswd -d test2 stugrp

13.在根下创建upload目录,并修改目录所有者为test2用户,所属组为stugrp组,并将lisi用户加入到stugrp组,修改所有者权限rwx,修改所属组权限为rwx,设置其他人没有任何权限
[root@localhost ~]# mkdir /upload
[root@localhost ~]# chown test2:stugrp /upload/
[root@localhost ~]# gpasswd -a lisi stugrp
[root@localhost ~]# chmod 770 /upload/

14.创建test3用户,非交互式设置用户密码为123456,并设置test3用户可以对upload目录拥有rx权限
[root@localhost ~]# useradd test3
[root@localhost ~]# echo 123456 | passwd --stdin test3
[root@localhost ~]# setfacl -m u:test3:rx /upload/
[root@localhost ~]# getfacl /upload/

15.在根下创建shared目录,并同时设置所有人都有完全权限(至少两种方法设置),要求所有普通用户在该目录下只能修改自己创建的文件
[root@localhost ~]# mkdir /shared
[root@localhost ~]# chmod ugo=rwx /shared/
[root@localhost ~]# chmod 777 /shared/
[root@localhost ~]# ll -d /shared/
[root@localhost ~]# chmod o+t /shared/
上一篇 下一篇