文件权限管理
一、基本权限介绍
-
基本权限类型
-
r:可读=》4
-
w:可写=》2
-
x:可执行=》1
-
-:没有权限=》0
-
-
权限的归属
-
User(u):属主用户(文件所有者)
-
Group(g):属组用户(包含组成员)
-
其他人:o 其他用户
-
-
一个用户访问文件流程如下:
-
判断用户是否为文件的所有者,如果是,按所有者的权限进行访问
-
判断是否为文件的所有组成员,如果是,就按组的权限去访问
-
最终用户就是文件的其他的人,按其他人的权限去访问
-
二、修改权限
-
修改属主、属组
-
chown(设置用户和组)
mkdir dir //创建目录
touch dir/file_test //创建文件
mkdir dir/dir_test //创建目录
示例1:
chown bin dir/ //修改所属主为bin
ll -d dir/ //检查属主
drwxr-xr-x 2 bin root 4096 7月 22 00:50 dir/
示例2:
chown .adm dir/ //修改所属组为adm
ll -d dir/ //检查属组
drwxr-xr-x 2 bin adm 4096 7月 22 00:50 dir/
示例3:
chown -R root.root dir/ //递归修改目录及目录下的所有文件属主和属组 -
-
修改u、g、o对应的权限
-
chmod(设置权限)
-
+:增加权限
-
-:删除权限
-
=:设置权限
-
#u、g、o方式
chmod //修改文件目录权限rwx -R递归修改
[root@db04 ~]# touch file
[root@db04 ~]# chmod a=rwx file
[root@db04 ~]# chmod a+rwx file
[root@db04 ~]# ll file
-rwxrwxrwx 1 root root 0 6月 20 23:23 file
[root@db04 ~]# chmod a-rwx file
[root@db04 ~]# chmod a=-rwx file
[root@db04 ~]# ll
总用量 0
---------- 1 root root 0 6月 20 23:23 file
[root@db04 ~]# chmod u+rw,g+r,o+rx file
[root@db04 ~]# ll
总用量 0
-rwxrwxrwx 1 root root 0 6月 20 23:23 file
[root@db04 ~]# chmod u=rwx,g=rw,o=rx file
[root@db04 ~]# ll
总用量 0
-rwxrw-r-x 1 root root 0 6月 20 23:23 file -
-
-
-
chown:
Linux中用来改变某个文件属主的命令, 如漫画中所示, 将某个"资源"(门)的访问权限给予别人。(卖房)
-
chmod:
Linux中用来改变某个文件的访问模式的命令, 如漫画中所示,chmod 777
会将大门敞开, 谁都可以进出。(租房)
-
三、权限对文件的or 目录的意义
-
基础权限设置案例
权限 对文件的影响 对目录的影响 读取权限(r) 具有读取\阅读文件内容权限 具有浏览目录及子目录 写入权限(w) 具有新增、修改文件内容的权限 具有增加和删除目录内文件 执行权限(x) 具有执行文件的权限 具有访问目录的内容(取决于目录中文件权 -
文件权限实验案列
//默认文件匿名用户仅有读权限
[root@zls ~]# echo "date" >> filename
[root@zls ~]# ll filename
-rw-r--r-- 1 root root 5 Jan 24 08:24 filename
//测试读权限(无法执行或删除)
[root@zls ~]# su - zls
[zls@zls ~]$ cat /root/filename
date
//增加x执行权限
[root@zls ~]# chmod o+x /root/filename
[root@zls ~]# ll /root/filename
-rw-r--r-x 1 root root 5 Jan 24 08:24 /root/filename
//测试执行权限
[zls@zls ~]$ /root/filename
Wed Jan 24 08:28:34 EST 2018
//增加w执行权限
[root@zls ~]# chmod o+w /root/filename
[root@zls ~]# ll /root/filename
-rw-r--rwx 1 root root 5 Jan 24 08:24 /root/filename
//测试执行权限
[zls@zls ~]$ vim /root/filename
-
-
rwx对文件的影响(只对文件内容有影响)
-
r:读取文件的内容
-
w:修改文件内容
-
x:可以把文件当成一个命令/程序运行
-
-
文件权限需要组合:
-
rw: 文件可读可写,不能执行
-
rx: 文件可读,不可写,可以执行
-
rwx:文件可读,可写,也可以执行
-
-
操作文件夹下的子文件与子文件夹(不是文件内容)
例1:在目录下创建、删除、移动文件需要的权限=对所有文件夹的x权限+对目标文件夹有r权限
/t1/t2/t3/
例2:浏览一个目录下的子目录名与子文件名需要的权限=对所有文件夹的x权限+对目标文件夹有r权限
总结例1与例2:
只要涉及到操作文件夹下的东西,当前用户
1、首选需要具备对沿途所有文件夹的x权限
2、其他需要具备对目标文件夹的r或者w权限
r代表可以浏览
w代表可以创建、删除、移动 -
rwx对目录的影响
-
目录只有r权限: 可以浏览该目录下的子目录名和子文件名字,不能进入目录
-
1.能使用ls命令浏览目录及子目录, 同时会提示权限拒绝
-
2.能使用ls -l命令浏览目录及子目录, 会带问号,同时只能看到文件名
-
总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限
-
-
写入权限(w)
-
单纯的w权限没有任何意义。 如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x配合)
-
注意: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关) 不能进入目录、不能复制目录、不能删除目录、不能移动目录
-
-
执行权限(x)
-
目录只有x权限
-
1.只能进入目录
-
2.其他什么都做不了
# ps:只要我们要操作目录下的内容,一定要对该目录有x权限
-
-
注意:权限必须组合使用
-
-
操作文件夹下的文件内容
例1:查看某一个文件内容需要具备的权限=对沿途所有文件夹的x权限以及对目标件的r权限
例2:改某一个文件内容需要具备的权限=对沿途所有文件夹的x权限以及对目标文件的w权限
操作文件夹的文件内容,当前用户
1、首选需要具备对沿途所有文件夹的x权限
2、其他需要具备对目标文件的r或者w权限
r代表可以读文件内容
w代表可以改文件内容 -
目录权限实验案列:
实战案例1: 对目录没有w,对文件有rwx
[root@zls ~]# mkdir /dirname
[root@zls ~]# echo "test" >> /dirname/filename
[root@zls ~]# chmod 777 /dirname/filename
[root@zls ~]# ll -d /dirname/
drwxr-xr-x 2 root root 22 Jan 24 08:40 /dirname/
[root@zls ~]# ll -d /dirname/filename
-rwxrwxrwx 1 root root 5 Jan 24 08:41 /dirname/filename
//普通用户验证权限
[zls@zls ~]$ cat /dirname/filename
test
[zls@zls ~]$ rm -f /dirname/filename
rm: cannot remove ‘/dirname/filename’: Permission denied
实战案例2: 对目录有w,对文件没有任何权限
[root@zls ~]# chmod 777 /dirname/
[root@zls ~]# chmod 000 /dirname/filename
[root@zls ~]# ll -d /dirname/
drwxrwxrwx 2 root root 22 Jan 24 08:40 /dirname/
[root@zls ~]# ll -d /dirname/filename
---------- 1 root root 5 Jan 24 08:41 /dirname/filename
file_zls//普通用户验证权限
[zls@zls ~]$ cat /dirname/filename
cat: /dirname/filename: Permission denied
[zls@zls ~]$ rm -f /dirname/filename
[zls@zls ~]$ touch /dirname/filename_2 -
权限小结:
-
文件rw权限, 可以查看和编辑文件内容
-
文件rx权限, 只能查看和执行文件、不能编辑、复制、移动、删除
-
目录rx权限, 允许浏览目录内文件以及子目录、并允许在目录内新建文件, 不允许创建、删除文件和目录
-
文件管理之特殊权限
SUID:
-
SUID权限仅对可执行文件有效
-
如果执行者对该可执行文件具有x的权限,执行者将在该文件的执行过程中拥有该文件属主的权限。
# 如果一个文件有SUID权限且属主对该文件有x权限,则会在属主对应的x权限显示为小写s。如果没有x权限,则会显示大写S。
[chirou@duorou ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
# passwd命令本质是在修改/etc/shadow文件,但我们查看该文件权限发现是000,也就是说只有root用户能修改该文件内容。通过给passwd命令设置SUID权限能让普通用户执行该命令时拥有root权限,以此达到修改密码的目的。
SGID:
-
SGID作用于普通文件时:
-
与SUID类似,在执行该文件时,用户将在文件执行过程中拥有该文件属组的权限。
-
-
SGID作用于目录时:
-
当一个用户对目录有写和执行权限,该用户就可以在该目录下新建文件,文件的属组都是该目录的属组。如果创建的是目录,那么此目录也会继承SGID权限。
[chirou@duorou /home/chirou]# mkdir t1 # 用chirou用户创建目录
[root@duorou /home/chirou]# chown .panghu t1 # 改变属组方便辨别
[root@duorou /home/chirou]# chmod g+s t1 # 添加SGID权限
[root@duorou /home/chirou]# ll
drwxrwsr-x. 2 chirou panghu 6 10月 29 19:23 t1 # 属组如果有x权限则显示小写s,如果没有x权限则显示大写S。
[root@duorou /home/chirou]# mkdir t1/t2
[root@duorou /home/chirou]# ll t1/
drwxr-sr-x. 2 root panghu 6 10月 29 19:46 t2
-rw-r--r--. 1 root panghu 0 10月 29 19:25 f1
# 会发现即便是root在该目录下创建文件,文件的属组依然是该目录的属组,如果创建的是目录,那么此目录也会继承SGID权限。 -
SBIT:粘滞位
SBIT是the restricted deletion flflag or sticky bit的简称,有时也称为sticky。SBIT目前只对目录有效,用来阻止非文件的所有者删除文件。例如系统自带/tmp目录,SBIT会在其他人权限的x位显示t,如果其他人对该文件没有x权限,则会显示大写T。在设置SBIT目录内创建的文件,仅有用户自身和root才能退删除,主要用作共享目录。
# tmp目录所有用户拥有全部权限,如果没有SBIT那么会造成一个普通用户创建的文件,另一个普通用户也能删除。
[root@duorou /]# ll -d /tmp
drwxrwxrwt. 10 root root 4096 10月 29 20:46 /tmp
三种特殊权限用数字的表示方式为:
权限 | 对应数字 |
---|---|
SUID | 4 |
SGID | 2 |
SBIT | 1 |
使用chmod命令设置特殊权限:
# 加减法
chmod u+s /PATH/File # 设置SUID
# 赋值法
chmod u=rwxs,g=xs /PATH/File # 设置SUID和SGID
# 数字法
chmod 4644 /PATH/File # 相当于-rwSr--r--
chmod 7755 /PATH/File # 相当于-rwsr-sr-x
权限管理之umask
umask是权限掩码的意思,新建文件或目录的默认权限是由umask决定的。
Linux中文件起始权限为0666、目录权限为0777,通过与umask运算得出最后的权限结果。
文件的权限计算方法:偶数位直接相减,奇数位相减后加1
文件起始权限 | umask值 | 计算方法 | 计算后的文件权限 |
---|---|---|---|
0666 | 0022(每位都是偶数) | 直接相减 | 0644 |
0666 | 0033(有奇数有偶数) | 奇数位相减后在其原奇数位加1 | 0644 |
0666 | 0325(有奇数有偶数) | 奇数位相减后在其原奇数位加1 | 0442 |
目录的计算方法:直接相减即可
目录的起始权限 | umask值 | 计算方法 | 计算后的文件权限 |
---|---|---|---|
0777 | 0022 | 相减 | 0755 |
0777 | 0033 | 相减 | 0744 |
0777 | 0325 | 相减 | 0452 |
能看出umask设置的越小,创建新文件的权限越大,一般而言不要修改umask的值。
查看umask值:
# 直接执行umask命令即可查看,root和普通用户的umask值不同。
# 第一位是特殊权限,后三位对应u、g、o的权限。
[root@duorou /]# umask
0022
[chirou@duorou ~]$ umask
0002
临时设置umask:
# 第一位是特殊权限,后三位对应u、g、o的权限。
[chirou@duorou ~]$ umask 0000
永久修改umask:
修改/etc/profile文件或/etc/bashrc文件。
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002 # 表示UID大于199且属主与属组相同的用户umask值,指普通用户。
else
umask 022 # 除上述条件以外的用户,指root。
fi