基本权限的类型
使用ls -l命令可以查看一个文件的详细信息,其中第一部分分为十个字符,第一个字符表示该文件的类型,其余九个字符按三位一组,分别对应属主、属组和其他人的权限。
字符 | 含义 | 数字表示 |
---|---|---|
r | 可读 | 4 |
w | 可写 | 2 |
x | 可执行 | 1 |
权限的归类
- u:属主user
- g:属组group
- o:其他人other(既不是属主,也不是属组成员则为其他人)
权限的设置
chmod命令:三种修改方式
-R:递归修改,将目录及目录内的所有文件权限都修改。新创建的文件不会继承该权限。
-
1、加减法
chmod u+wx,g+x,o+w /PATH/File chmod u-x,g-r /PATH/File chmod a+r /PATH/File # 在原来的权限基础上修改,可以只修改某一类权限
-
2、赋值法
chmod u=rwx,g=rx,o=- /PATH/File # 不管原来的权限,直接覆盖,-表示无权限
-
3、数字法
chmod 756 /PATH/File # 三组权限一起覆盖
属主属组设置
chown命令:
-R:递归修改,将目录及目录内的所有文件都修改。新创建的文件不会继承目录属主和属组。
# 修改属主和属组,属组和属组可以无关.
chown chirou.panghu /PATH/File
# 修改属主和属组,并且属组为该用户的主组
chown chrou. /PATH/Flies
# 仅修改属主
chown panghu /PATH/File
# 仅修改属组
chown .panghu /PAHT/File
权限的作用
针对文件:
-
r:读取文件的内容
-
w:修改文件内容
-
注:如果用户对文件有写权限,没有读权限,那么当用vim编辑该文件时,不会显示原文件内容,并且在保存时会覆盖原文件内容,这是由于vim编辑器对文件编辑的原理。它会将文件内容从硬盘中全部读出至内存(没有读权限所以读不出),在编辑完成保存时,是将原文件删除,再将一个新文件改名为原文件名。
-
-
x:将文件当成一个程序运行。(前提是该文件可以运行)
注:对于shell脚本等解释型语言,由于解释器需要先读出内容,逐行解释成可执行代码才能运行,所以除了需要对脚本有x权限,还需要有r权限才能够运行。
# 将echo命令复制到当前目录下,并将权限改为仅其他人有x权限。
[root@duorou /]# cp -a `which echo` . ; chmod 001 echo
---------x. 1 root root 33088 8月 20 2019 echo
# 写一个脚本,并将权限改为仅其他人有x权限。
[root@duorou /]# cat > echo.sh << EOF
> echo "how are you"
> EOF
[root@duorou /]# chmod 001 echo.sh
[root@duorou /]# ll echo.sh
---------x. 1 root root 19 10月 29 20:41 echo.sh
# 使用绝对路径执行这两个程序发现我们手动编辑的脚本权限不够无法执行。
[chirou@duorou ~]$ /echo 123
123
[chirou@duorou ~]$ /echo.sh
bash: /echo.sh: 权限不够
# 加上r权限后即可执行
[root@duorou /]# chmod o+r /echo.sh
[root@duorou /]# ll /echo.sh
-------r-x. 1 root root 19 10月 29 20:41 /echo.sh
[chirou@duorou ~]$ /echo.sh
how are you
# 系统自带的echo程序是已经被编译好的可直接执行文件,不需要通过shell解释器读取内容后即可执行,所以不需要r权限也可执行。
针对目录:
- r:查看目录内的文件名
- w:创建、删除和移动子文件
- x:可以进入目录,只要需要操作目录下的内容,一定要对该目录有x权限。
注:只要涉及到操作文件夹下的东西,当前用首先必须要对沿途所有目录有x权限,其他需要具备对目标目录的r或w权限。
[root@duorou /]# mkdir -p /a/b/c ; chmod -R 001 /a ; chmod 000 /a/b/c # 创建/a/b/c目录,并且将/a/b目录权限都设置为只有其他人有x权限,/a/b/c设置为没有任何权限。
d--------x. 3 root root 15 10月 29 20:03 /a
d--------x. 3 root root 15 10月 29 20:03 /a/b
d---------. 2 root root 6 10月 29 20:03 /a/b/c
# 在/a/b/c目录内创建文件f1,并修改该文件的权限仅有其他人可读权限
[root@duorou /]# echo "this is f1" > /a/b/c/f1 ; chmod 004 /a/b/c/f1
[root@duorou /]# ll /a/b/c/f1
-------r--. 1 root root 11 10月 29 20:07 /a/b/c/f1
# 用普通用户查看f1文件内容,即便对该文件有读权限依然显示权限不够。
[chirou@duorou ~]$ cat /a/b/c/f1
cat: /a/b/c/f1: 权限不够
# 对/a/b/c目录添加x权限后,可以查看f1文件的内容
[root@duorou /]# chmod 001 /a/b/c
[root@duorou /]# ll /a/b/c
-------r--. 1 root root 11 10月 29 20:07 f1
[chirou@duorou ~]$ cat /a/b/c/f1
this is f1
# 对目录如果只有w权限没有x权限,那么也无法在里面添加或删除文件
[root@duorou /]# ll /a/b/c -d
d-------w-. 2 root root 16 10月 29 20:07 /a/b/c
[chirou@duorou ~]$ mkdir /a/b/c/d1
mkdir: 无法创建目录"/a/b/c/d1": 权限不够
[chirou@duorou ~]$ rm -rf /a/b/c/f1
rm: 无法删除"/a/b/c/f1": 权限不够
# 如果对目录仅有r权限,没有x权限,那么仅能查看目录内的文件名,不能查看元数据等信息。
[chirou@duorou ~]$ ll /a
ls: 无法访问/a/b: 权限不够
总用量 0
d????????? ? ? ? ? ? b
三种特殊权限
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