文章目录
一、Linux基本权限管理
例子
[root@localhost ~]# ll
-rw-r–r--. 1 root root 30 2月 11 19:55 1.txt
-: 文件类型;普通文件
rw-: 属主拥有的权限 – 读写权限
r–: 属组拥有的权限 – 只读权限
r–: 其他人拥有的权限 – 只读权限
1: 链接引用数
root: 文件属主
root: 文件属组
30: 文件大小
文件的权限主要针对三类对象进行定义:
owner : 属主 u
group : 属组 g
other :其他 o
每个文件针对每类访问者都定义了三种权限:
r: readable 可读
w:writeable 可写
x:eXcutable 可执行
- 文件:
r:可以使用文件查看类工具获取其内容 4
w:可以修改其内容 2
x:可以把此文件提交给内核启动为一个进程 1 - 目录:
r: 可以使用ls查看目录中的文件列表
w: 可以在此目录创建或删除文件
x: 可以使用ls查看目录中的文件列表,以及可以cd到此目录中
问题
1.zhangsan用户能够进入/root/目录中吗?
[root@test ~]# ll -d /root
dr-xr-x---. 3 root root 255 Feb 7 06:24 /root
zhangsan 用户权限是 other —
答案:不能进入
- 将zhangsan用户添加附加组root ,zhangsan用户能够进入吗?
[root@localhost ~]# usermod -aG root zhangsan
[root@localhost ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) 组=1000(zhangsan),0(root)
[root@localhost ~]# su zhangsan
[zhangsan@localhost ~]# cd /root/
[zhangsan@localhost ~]# ls
1.txt a anaconda-ks.cfg CentOS-7-x86_64-Minimal-1810.iso Dockerfile mc
答案:zhangsan – root r-x 能进入,但是没有w权限无法创建或删除文件
权限相关命令:
- chmod命令: 设置文件权限
[root@test ~]# chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
常用选项:
-R: 递归修改
MODE
u=[rwx] : 设置属主权限
g=[rwx] : 设置属组权限
o=[rwx] : 设置其他权限
方式1:
[root@test ~]# ll hello
-rw-r--r--. 1 root root 1 Feb 6 02:50 hello
[root@test ~]# chmod u=rwx,g=rw,o=rx hello
[root@test ~]# ll hello
-rwxrw-r-x. 1 root root 1 Feb 6 02:50 hello
方式2:
chmod [1-7][1-7][1-7] filename (r=4,w=2,x=1)
[root@test ~]# chmod 644 hello
-rw-r--r--. 1 root root 1 Feb 6 02:50 hello
- chown命令: 改变文件属主和属组
[root@test ~]# chown --help
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...
常用选项:
-R: 递归修改
[OWNER] 指定属主
[GROUP] 指定属组
[root@test ~]# ll hello
-rw-r--r--. 1 root wangwu 1 Feb 6 02:50 hello
[root@test ~]# chown wangwu:wangwu hello
[root@test ~]# ll hello
-rw-r--r--. 1 wangwu wangwu 1 Feb 6 02:50 hello
- chgrp命令:修改属组
[root@test ~]# chgrp --help
Usage: chgrp [OPTION]... GROUP FILE...
常用参数:
-r 参数
GROUP 指定属组
PS:
–reference=RFILE :以参考文件的属主属组来设定
- umask命令
文件或者目录的遮掩码: 当用户创建文件或者目录的时候的默认权限
文件或目录的权限:
FILE: 666-umask值(通常来说文件预设没有x权限)
DIR: 777 - umask值
[root@localhost b]# umask
0022
[root@localhost b]# touch 1.txt
[root@localhost b]# ll 1.txt
-rw-r--r--. 1 root root 0 2月 12 11:15 1.txt
[root@localhost b]# touch 2.txt
[root@localhost b]# ll 2.txt
-rw-r--r--. 1 root root 0 2月 12 11:15 2.txt
[root@localhost b]# umask 0042
[root@localhost b]# touch 3.txt
[root@localhost b]# ll 3.txt
-rw--w-r--. 1 root root 0 2月 12 11:17 3.txt
[root@test ~]# umask 0042 设定umask值
查看umask: umask
二、Linux特殊权限管理
文件的特殊权限:SUID SGID SBIT
SUID:借出程序所有者的权限 4
[root@test ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
属主的执行x权限位:s --> SUID 权限
passwd命令:修改用户密码
根据权限可以得知同一用户或其他人都可以调用该命令;
/etc/shadow文件: 存放着用户及用户密码
passwd命令需要修改/etc/shadow文件
[root@test ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1037 Feb 7 07:56 /etc/passwd
[root@test ~]# ll /etc/shadow
----------. 1 root root 797 Feb 7 07:56 /etc/shadow
问题:
- /etc/passwd文件仅仅root用户拥有w权限,其他用户没有
- 其他用户虽然可以调用passwd命令,但是无法写入到/etc/passwd文件
SUID权限作用: 其他用户没有权限修改/etc/passwd文件,但是root用户可以将
w权限赋予给其他用户去修改/etc/passwd命令
注意:
- SUID权限仅仅对二进制程序有效
- 执行者必须有用x权限
- 仅在本程序中拥有修改权限
- 属主拥有s权限,即可将自己的权限暂时借由他人使用,前提是要拥有x权限
SGID权限:借出用户组的权限 2
注意:
- 二进制程序有效
- 执行者拥有x权限
- 执行过程中暂时拥有用户组权限
umask 0022 默认遮掩吗
实验环境:
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# ll /home/
total 0
drwx------. 2 lisi lisi 62 Aug 5 09:51 lisi
drwx------. 2 zhangsan zhangsan 62 Aug 5 09:51 zhangsan
[root@localhost ~]# chmod 2770 /home/zhangsan
[root@localhost ~]# ll -d /home/zhangsan
drwxrws---. 2 zhangsan zhangsan 62 Aug 5 09:51 /home/zhangsan
[root@localhost ~]# usermod -aG zhangsan lisi
[root@localhost ~]# su lisi
[lisi@localhost root]$ cd /home/lisi/
[lisi@localhost ~]$ touch 1.txt
[lisi@localhost ~]$ ll
total 0
-rw-rw-r--. 1 lisi lisi 0 Aug 5 09:56 1.txt
[lisi@localhost ~]$ cd /home/zhangsan
[lisi@localhost zhangsan]$ touch 1.txt
[lisi@localhost zhangsan]$ ll
total 0
-rw-rw-r--. 1 lisi zhangsan 0 Aug 5 09:57 1.txt
#lisi用户在SGID目录创建文件的属主为zhangsan(该目录的所属组)
上面创建的两个1.txt都是lisi创建的,属主都是lisi;而在zhangsan目录下创建的1.txt属主是zhangsan,即目录的属组。
这种权限特性可以在同一个用户组的多个用户拥有共同的目录,在创建文件时该用户组的所有用户具有相同的权限操作
通常一个属组中的用户在拥有SGID权限的目录下创建文件,属组都是该目录的所属组
Sticky: 对目录有效 1
[root@test ~]# ll -d /tmp/
drwxrwxrwt. 8 root root 172 Feb 8 01:16 /tmp/
- 当用户对此目录具有w|x权限时,及拥有写入权限
- 用户在此目录创建文件,只有自己和root用户有权限删除
- 用户不允许对其他用户进行任何操作
三、ACL权限
ACL 访问控制列表; 主要目的是在提供的传统的owner group w x r 权限之外的细部权限设定。
ACL 可以针对某一个使用者,某一个文件或者目录来设定rwx权限,对于需要特殊权限的使用状态非常有帮助。
setfacl 命令 : 设定权限
[root@test tmp]# setfacl --help
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
常用选项:
-m : 添加acl设定参数
-x :删除acl设定参数
-b :移除所有的acl设定参数
-R :递归添加acl设定参数
-d : 添加默认acl设定参数(目录)
删除用户权限: setfacl -x u:username file
删除组权限: setfacl -x g:groupname file
删除整个acl权限: setfacl -b file
- 实例1 针对用户的设定方式:
设定规范:u:username:power
1.设定user对testfile有rwx权限
setfacl -m u:user:rwx testfile
2.设定user对testdirectory目录下所有文件有rwx权限
setfacl -R -m u:user:rwx testdirectory
3.去掉user对testdirectory的x权限
setfacl -x u:user testdirectory/
4.去掉所有acl权限
setfacl -b
5.为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
setfacl -d -m u:user:rwx testdirectory/
- 实例2: 针对用户组的设定方式
设定规范:g:groupname:power
- 给acl_test1文件添加mygropu1组rx权限设定
[root@study ~]# setfacl -m g:mygroup1:rx acl_test1
[root@study ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:rx
group::r--
group:mygroup1:rx # 组权限设定
mask::rx
other::r--
getfacl命令:查看acl权限设定
[root@test tmp]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:user:rwx # 针对user用户具有rwx权限
group::r--
group:group1:rw- # 针对group1组具有rw权限
mask::rwx
other::r-- # 如果没有其他设定 默认属于other
[root@test tmp]# ll testfile
-rw-rwxr--+ 1 root root 0 Feb 8 02:29 testfile
[root@test tmp]# su user
[user@test tmp]$ echo "hello" > testfile
[user@test tmp]$ cat testfile
hello
传统情况下,user用户只有r权限,但是acl权限的设定让user用户拥有w权限,所以可以针对testfile文件进行编辑操作。