6.Linux权限管理

2021-05-17 分类:Linux基础 阅读(264) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.权限基本概述

1.什么是权限?
权限就是一种约束,例如公司的机房只有有权限的人才能进入,不能什么人都可以进。权限也是一种安全措施。

2.为什么要有权限?
因为系统中不可能只存在一个root用户,一定会存在多个用户,为了保护每个登陆用户的隐私和工作环境安全,所以就有了权限。(比如两个租客合租同一个房子,a租客把b租客的被床单扔了(删除),是不是会影响到b租客的生活?)

3.权限与用户之间的关系?
在Linux系统中,针对文件定义了三种身份,分别是属主(owner)、属组(group)、其他人(others),每一种身份又对应三种权限,分别是可读(readable)、可写(writable)、可执行(excutable)。
用户对文件资源,有三种角色ugo,当一个用户访问文件流程如下
1) 判断用户是否为文件所有者,如果是则按所有者的权限进行访问
2) 判断用户是否为文件所有组成员,如果是则按组的权限进行访问
3) 如果不是所有者,也不是该文件所属组,则按匿名权限进行访问

4.权限中的rwx分别代表什么含义?
当我们使用ls -l查看一个文件的详细属性时,能看到每个文件都有一个9位基本权限位,比如: rwxr-xr-x其中每三位字符为一组,分别表示属主权限位,属组权限位,匿名权限位。
linux中基本权限位则是使用这9位字符来表示,主要控制文件属主(User)、属组(Group)、其他用户(Other)

字母含义对应权限
r(read)读取权限4
w(write)写入权限2
x(execute)执行权限1
-(没有权限)占位符0

PS: 如果权限位不可读、不可写、不可执行,则全部使用-作为占位符表示,那么什么是占位符,就是占个位置的符号而已代表没有此权限。

2.权限设置示例

1.为什么要设定权限,我们又如何修改一个文件的权限?
Q1: 为什么要设定权限,可以赋于某个用户或组 -- 能够以何种方式 -- 访问某个文件
Q2: Linux下使用chmod命令来变更权限,root用户可以变更所有文件的权限,而普通用户仅能变更属于自己的文件。

2.使用chmod设定权限示例

方式一: ugo

[root@web01 ~]# touch file                    #创建文件
[root@web01 ~]# chmod a=rwx file              #给所有人添加读写执行权限
[root@web01 ~]# chmod a=-rwx file             #取消所有的权限
[root@web01 ~]# chmod u=rwx,g=rw,o=- file     #属主读写执行,属组读写,其他人无权限
[root@web01 ~]# chmod ug=rwx,o=r file         #属主属组读写执行,其他人读权限
[root@web01 ~]# ll file
-rwxrw-r-- 1 root root 0 Apr 13 03:29 file

方式二、number

#选项:  -R递归修改
[root@web01 ~]# touch file
[root@web01 ~]# chmod 644 file
[root@web01 ~]# chmod 600 file
[root@web01 ~]# ll file
-rw------- 1 root root 0 Apr 13 03:29 file

#针对目录设定权限
[root@web01 ~]# mkdir dir
[root@web01 ~]# chmod 777 dir/    #修改目录允许所有人访问
[root@web01 ~]# chmod -R 755 dir/ #修改目录及子目录权限
[root@web01 ~]# ll -d dir/
drwxr-xr-x 2 root root 6 Apr 13 03:34 dir/

3.权限设置案例
针对 hr 部门的访问目录/home/hr 设置权限,要求如下:
1.root 用户和 hr 组的员工可以读、写、执行
2.其他用户没有任何权限

[root@web01 ~]# groupadd hr
[root@web01 ~]# useradd hr01 -G hr
[root@web01 ~]# useradd hr02 -G hr
[root@web01 ~]# mkdir /home/hr
[root@web01 ~]# chown hr /home/hr
[root@web01 ~]# chmod 770 /home/hr
[root@web01 ~]# ll -d /home/hr
drwxrwx--- 2 root hr 6 Apr 13 03:26 /home/hr

3.权限设置案例

在Linux中权限对文件和对目录的影响是有不同区别的。

权限对文件的影响对目录的影响
读取权限(r)具有读取\阅读文件内容权限具有浏览目录及子目录
写入权限(w)具有新增、修改文件内容的权限具有增加和删除目录内文件
执行权限(x)具有执行文件的权限具有访问目录的内容(取决于目录中文件权限)

文件权限实验案例:

#1.新建文件,并添加内容至文件中,默认文件匿名用户仅有读权限
[root@web01 ~]# echo "date" > filename
[root@web01 ~]# ll filename
-rw-r--r-- 1 root root 5 Jan 24 08:24 filename

#2.切换sfy普通用户
[root@web01 ~]# su - sfy

#3.对文件拥有读取的权限,但bgx用户对文件没有执行和删除的权限
[sfy@web01 ~]$ cat  /root/filename
date

#4.使用root增加x执行权限
[root@web01 ~]# chmod o+x /root/filename
[root@web01 ~]# ll /root/filename
-rw-r--r-x 1 root root 5 Jan 24 08:24 /root/filename

#5.测试x权限是否真的能执行该文件
[sfy@web01 ~]$ /root/filename
Wed Jan 24 08:28:34 EST 2018

#6.增加w执行权限
[root@web01 ~]# chmod o+w /root/filename
[root@web01 ~]# ll /root/filename
-rw-r--rwx 1 root root 5 Jan 24 08:24 /root/filename

#7.测试执行权限
[sfy@web01 ~]$ vim /root/filename

PS: 总结rwx对文件的影响
读取权限(r)具有读取\阅读文件内容权限
1.只能使用查看类命令cat、head、tail、less、more

写入权限(w)具有新增、修改文件内容的权限
1.使用vim编辑会提示权限拒绝, 但可强制保存,会覆盖文件的所有内容
2.使用echo命令重定向的方式可以往文件内写入数据,>>可以进行追加
3.不能删除文件,因为删除文件看的不是文件的属性,需要看上级目录是否有w的权限

执行权限(x)具有执行文件的权限
1.执行权限什么用都没有
2.如果普通用户需要执行文件,需要配合r权限

目录权限实验案例:

#示例1: 创建目录,并在该目录下创建文件,匿名用户对目录没有w权限,对文件有777权限 
[root@web01 ~]# mkdir /dirname
[root@web01 ~]# echo "test" >> /dirname/filename
[root@web01 ~]# chmod 777 /dirname/filename

#普通用户验证权限,能正常查看,但无法删除[奇怪]
[sfy@web01 ~]$ cat /dirname/filename
test
[sfy@web01 ~]$ rm -f /dirname/filename
rm: cannot remove ‘/dirname/filename’: Permission denied


#示例2: 设置目录777权限,相当于匿名用户对目录有w权限,对文件没有任何权限
[root@web01 ~]# chmod 777 /dirname/
[root@web01 ~]# chmod 000 /dirname/filename

#普通用户验证权限
[sfy@web01 ~]$ cat /dirname/filename
cat: /dirname/filename: Permission denied
[sfy@web01 ~]$ rm -f /dirname/filename
[sfy@web01 ~]$ touch /dirname/filename_2

PS: 总结rwx对目录的影响
读取权限(r),如果目录只有r权限: 具有浏览目录及子目录权限
1.可以使用ls命令浏览目录及子目录, 但同时也会提示权限拒绝
2.使用ls -l命令浏览目录及子目录,文件属性会带问号,并且只能看到文件名
总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限

写入权限(w),如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x权限配合)
PS: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关)
不能进入目录、不能复制目录、不能删除目录、不能移动目录

执行权限(x),如果目录只有x权限
1.只能进入目录
2.不能浏览、复制、移动、删除

Linux权限总结与注意事项
文件r权限, 只给用户查看,无其他操作
文件rw权限, 可以查看和编辑文件内容
文件rx权限, 允许查看和执行文件、但不能修改文件----->PASS
文件rwx权限, 能读,能写,能执行,但不能删除,因为删除需要看上级目录的权限有没有w----->PASS
目录rx权限, 允许浏览目录内文件以及子目录、并允许在目录内新建文件, 不允许创建、删除文件和目录
目录wx权限, 能进入目录,能删除内容,能写入内容,但就是无法使用ls cat这样的命令----->PASS
目录rw权限, 能看,能写,但无法进入目录----->PASS目录
x权限,只要指定目录里有文件,并且文件有r权限,就可以复制内容到其他目录
PS: 文件的 x权限小心给予,目录的 w权限小心给予。
PS: 文件通常设定的权限是644,目录设定的权限是755
PS: 控制目录权限755, 如果有普通用户需要操作目录里面的文件,在来看文件的权限

4.属主属组设置

变更文件属主和属组的意义?
比如: 我现在手里有多套房,希望出售其中的A房进行变现,那么我会考虑将A房过户给金主,过户成功后A房就属于金主了,那么此时A房的拥有者就属于金主而不再属于我。

在Linux中如何变更一个文件或者一个资源的属主和属组呢,可以使用chown、chgrp命令实现。
chown能设置属主和属组,chgrp仅能设置属组。(所以用哪个你懂的)

#chown 更改属主以及属组 -R:递归修改

#准备环境,创建文件和目录
[root@web01~]# mkdir dir/test1 && touch dir/file

#示例1: 修改所属主为bin
[root@web01 ~]# chown bin dir/

#示例2: 修改所属组为adm
[root@web01 ~]# chown .adm dir/

#示例3: 递归修改目录及目录下的所有文件属主和属组
[root@web01 ~]# chown -R root.root dir/

5.特殊权限SUID

1.问题抛出
在 Linux 系统中,每个普通用户都可以更改自己的密码,这是合理的设置。问题是,普通用户的信息保存在 /etc/passwd 文件中,用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己的密码时修改了 /etc/shadow 文件中的加密密码,但是文件权限显示,普通用户对这两个文件其实都是没有写权限的,那为什么普通用户可以修改自己的权限呢?......(难道学了个假的权限)

[root@web01 ~]# ll /etc/passwd
-rw-r--r-- 1 root root 6209 Apr 13 03:26 /etc/passwd
[root@web01 ~]# ll /etc/shadow
---------- 1 root root 11409 Apr 13 03:26 /etc/shadow

2.解决方案
其实,普通用户可以修改自己的密码在于 passwd 命令。该命令拥有特殊权限 SetUID,也就是在属主的权限位的执行权限上是 s。可以这样来理解它:当一个具有执行权限的文件设置 SetUID 权限后,用户在执行这个文件时将以文件所有者的身份来执行。

PS: 当普通用户使用 passwd 命令更改自己的密码时,实际上是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,root 当然可以将密码写入 /etc/shadow 文件,所以普通用户也可以修改 /etc/shadow 文件,命令执行完成后,该身份也随之消失。

3.示例演示
举个例子,有一个用户 lamp,她可以修改自己的权限,因为 passwd 命令拥有 SetUID 权限;但是她不能査看 /etc/shadow 文件的内容,因为査看文件的命令(如 cat)没有 SetUID 权限。命令如下:

#自己可以修改自己的密码,从而改变/etc/shadow中的数据
[lamp@web01 ~]$ passwd

#但无法使用cat命令查看/etc/shadow
[lamp@web01 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

4.例子解释
passwd 是系统命令,可以执行,所以可以赋予 SetUID 权限。
lamp 用户对 passwd 命令拥有 x(执行)权限。
lamp 用户在执行 passwd 命令的过程中,会暂时切换为 root 身份,所以可以修改 /etc/shadow 文件。
命令结束,lamp 用户切换回自己的身份。
PS: cat命令没有 SetUID权限,所以使用 lamp 用户身份去访问 /etc/shadow 文件,当然没有相应权限了。
F: 但如果将passwd命令的suid去掉会发生什么???

2.suid授权方法4000 权限字符s(S),用户位置上的x位上设置

# chmod 4755 passwd
# chmod  u+s  passwd

3.suid的作用
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限。
2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S。
3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
注意: suid极度危险,不信可以尝试对vim或rm进行设定SetUID。

6.特殊权限SGID

将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致,演示如下

#1.建立测试目录
[root@web01 ~]# cd /tmp/ && mkdir dtest

#2.给测试目录赋予SetGID权限,检查SetGID是否生效
[root@web01 tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/

#3.给测试目录赋予777权限,让普通用户可以写
[root@web01 tmp]# chmod 777 dtest/

#4.切换成普通用户lamp,并进入该目录
[root@web01 tmp]# su - lamp
[lamp@web01 ~]$ cd /tmp/dtest/

#5.普通用户创建测试文件,检查文件的信息
[lamp@web01 dtest]$ touch lamp_test
[lamp@web01 dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test

2.sgid授权方法: 2000权限字符s(S),取决于属组位置上的x

# chmod 2755  directory 
# chmod  g+s  directory

3.sgid作用
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

7.特殊权限SBIT

Sticky(SI TI KI)粘滞位目前只对目录有效,作用如下:
普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录中拥有写入权限。如果没有粘滞位,那么普通用户拥有 w 权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。但是一旦被赋予了粘滞位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。

[root@web01 tmp]# ll -d /tmp/
drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/

2.sticky授权方法,1000 权限字符t(T),其他用户位的x位上设置。

# chmod 1755  /tmp
# chmod o+t /tmp

3.sticky作用
1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
3.一个目录即使它的权限为"777"如果是设置了粘滞位,除了目录的属主和"root"用户有权限删除,除此之外其他用户都不允许删除该目录。

8.权限属性chattr

chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
chatrr 命令格式:[root@bgx ~]# chattr [+-=] [选项] 文件或目录名

#选项: + 增加权限 -减少权限 =等于某个权限
# a:让文件或目录仅可追加内容
# i:不得任意更动文件或目录

#1.创建文件并设置属性
[root@web01 ~]# touch file_a file_i
[root@web01 ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

#2.使用chattr设置属性,lsattr查看权限限制
[root@web01 ~]# chattr +a file_a
[root@web01 ~]# chattr +i file_i
[root@web01 ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i

#3.a权限,无法写入和删除文件,但可以追加数据,适合/etc/passwd这样的文件
[root@web01 ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@web01 ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
[root@web01 ~]# echo "aa" >> file_a

#5.i权限, 无法写入,无法删除,适合不需要更改的重要文件加锁
[root@web01 ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@web01 ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@web01 ~]# rm -f  file_i
rm: cannot remove ‘file_i’: Operation not permitted

#6.解除限制
[root@web01 ~]# chattr -a file100 
[root@web01 ~]# chattr -i file200

3.进程掩码umask

1.umask是什么?
当我们登录系统之后创建一个文件总是有一个默认权限的,比如: 目录755、文件644、那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限。

2.umask是如何改变创建新文件的权限
系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但umask表示要减去的值,所以新目录文件的权限应该是777 - 022 =755。至于文件的权限也依次类推666 - 022 =644。

3.umask涉及哪些配置文件
umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile
shell (vim,touch) --umask--> 会影响创建的新文件或目录权限
vsftpd服务如果修改--umask--> 会影响ftp服务中新创建文件或创建目录权限
useradd如果修改umask--> 会影响用户HOME家目录权限

4.umask演示示例

#1.假设umask值为:022(所有位为偶数)
#文件的起始权限值
6 6 6  -  0 2 2  = 6 4 4 

#2.假设umask值为:045(其他用户组位为奇数)
#计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6  -   0 4 5 = 6 2 1

#3.默认目录权限计算方法
7 7 7  -  0 2 2 = 7 5 5
 
#umask所有位全为偶数时
# umask 044
# mkdir d044   目录权限为733
# touch f044   文件权限为622

#umask部分位为奇数时
# umask 023
# mkdir d023   目录权限为754
# touch f023   文件权限为644

#umask值的所有位为奇数时
# umask 035
# mkdir d035   目录权限为742
# touch f035   文件权限为642

示例1: 在 shell 进程中创建文件

#查看当前用户的umask权限
[root@web01 ~]# umask
0022
[root@web01 ~]# touch file0022
[root@web01 ~]# mkdir dir0022
[root@web01 ~]# ll -d file0022  dir0022/
drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/
-rw-r--r-- 1 root root 0 Jan 24 09:02 file0022

示例2: 修改 shell umask 值(临时生效)

[root@web01 ~]# umask 000
[root@web01 ~]# mkdir dir000
[root@web01 ~]# touch file000
[root@web01 ~]# ll -d dir000 file000
drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000
-rw-rw-rw- 1 root root 0 Jan 24 09:04 file000

示例3: 通过 umask 决定新建用户 HOME 目录的权限

[root@web01 ~]# vim /etc/login.defs
UMASK 077
[root@web01 ~]# useradd dba
[root@web01 ~]# ll -d /home/dba/
drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/

[root@web01 ~]# vim /etc/login.defs
UMASK 000
[root@web01 ~]# useradd sa
[root@web01 ~]# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1