linux文件权限

1.文件权限概述

linux文件权限

2.权限位说明

linux文件或目录的权限位是由9个权限位来控制的,每三位一组,它们分别是文件属主(Owner)的读、写、执行,用户组(Group)的读、写、执行以及其余用户(Other)的读、写、执行。linux

r   read  可读权限 对应数字4

w  write 可写权限 对应数字2

x  (Execute,执行权限)对应数字1

`-` (没有任何权限) 对应数字0

3.实战案例

3.1 演示环境

用户环境准备shell

[root@linzhongniao ~]# groupadd nishishei  一个家庭
[root@linzhongniao ~]# useradd linzhongniao -g nishishei 主人
[root@linzhongniao ~]# useradd lisi -g nishishei
useradd: user 'lisi' already exists

若是提示建立的用户已经存在能够用usermod修改用户所在用户组安全

[root@linzhongniao ~]# usermod lisi -g nishishei 家庭成员
[root@linzhongniao ~]# useradd test  外面的人
[root@linzhongniao ~]# id linzhongniao
uid=509(linzhongniao) gid=509(nishishei) groups=509(nishishei)
[root@linzhongniao ~]# id lisi
uid=504(lisi) gid=509(nishishei) groups=509(nishishei)
[root@linzhongniao ~]# id test
uid=510(test) gid=510(test) groups=510(test)

文件测试准备bash

[root@linzhongniao ~]# mkdir /linzhongniao -p
[root@linzhongniao ~]# echo "echo linux">/linzhongniao/test.sh
[root@linzhongniao ~]# chmod +x /linzhongniao/test.sh 
[root@linzhongniao ~]# cat /linzhongniao/test.sh 
echo linux
[root@linzhongniao ~]# ls -l /linzhongniao/test.sh 
 -rwxr-xr-x. 1 root root 11 Jul 26 23:05 /linzhongniao/test.sh

3.2修改文件的属主和所属组

修改文件的属主和所属组用chown命令ide

格式chown 用户.(或者:)用户组 文件/目录测试

[root@linzhongniao ~]# chown linzhongniao.nishishei /linzhongniao/test.sh 
[root@linzhongniao ~]# ls -l /linzhongniao/test.sh
 -rwxr-xr-x. 1 linzhongniao nishishei 11 Jul 26 23:05 /linzhongniao/test.sh

linzhongniao用户和nishishei用户组的成员拥有对应属主的权限,即读,写和执行的权限。
登陆lisi用户能够查看和执行test.sh,由于lisi属于nishishei用户组,属于这个组的只有读和执行的权限,没有删除和修改的权限。优化

4.普通文件权限及结论总结

(1)可读r:表示具备读取、阅读文件内容的权限。ui

(2)可写w:表示具备新增、修改删除文件(删除必须有执行权限)内容的权限,若是没有r的配合,那么vi编辑文件会提示没法编辑(但可强制编辑,echo 能够重定向或追加)。code

总结:有读和写(r和w)的权限配合,能够用vi编辑文件,不配合也能vi编辑,保存要强制保存。
有写和执行(w和x)权限的配合,能够删除文件。继承

(3)特别提示:删除文件(修改文件名)的权限是受父目录的权限控制的,和文件自己权限无关。若是想删除文件应该给上一级目录的用户或者用户组可写和执行的权限权限。

[linzhongniao@linzhongniao ~]$ ls -ld /linzhongniao/test.sh 
 -rwxr-xr-x. 1 linzhongniao nishishei 13 Jul 27 19:25 /linzhongniao/test.sh
[linzhongniao@linzhongniao ~]$ ls -ld /linzhongniao/
drwxr-xr-x. 2 root root 4096 Jul 27 19:25 /linzhongniao/
[linzhongniao@linzhongniao ~]$ rm -rf /linzhongniao/test.sh 
rm: cannot remove `/linzhongniao/test.sh': Permission denied
permitted

没有权限删除,因此要给文件上一级所在目录的其余用户添加可写权限

[root@linzhongniao ~]# chmod o+w /linzhongniao/
[root@linzhongniao ~]# ls -ld /linzhongniao/
drwxr-xrwx. 2 root root 4096 Jul 27 19:25 /linzhongniao/
[linzhongniao@linzhongniao ~]$ ls -ld /linzhongniao/
drwxr-xrwx. 2 root root 4096 Jul 27 19:25 /linzhongniao/
[linzhongniao@linzhongniao ~]$ rm -rf /linzhongniao/test.sh

(4)root只要有x的权限就能执行。

5.目录的权限及总结

5.1可读r

可读的权限,须要和x执行权限配合使用才能查看目录或文件的内容

(1)若是没有x权限不能进到目录里,即没法cd dir

(2)若是没有x权限,ls查看列表时是能够看到全部的文件名,可是会提示无权限访问目录下文件。

(3)若是ls –l 查看列表时全部属性会带有问号,也会提示没法访问目录下的文件,可是能够看到文件名。

[root@linzhongniao ~]# touch /linzhongniao/test/tmp.txt
[root@linzhongniao ~]# ls -ld /linzhongniao/test/
drwxrwxr-x. 2 root root 4096 Jul 27 20:16 /linzhongniao/test/

举例:可读权限r和执行权限x的使用

将其余用户只给可读权限

[root@linzhongniao ~]# chmod o=r /linzhongniao/test/
[root@linzhongniao ~]# ls -ld /linzhongniao/test/   
drwxrwxr--. 2 root root 4096 Jul 27 20:16 /linzhongniao/test/

切换到test用户测试,以下所示是不能查看和进入到目录里面去的

[test@linzhongniao ~]$ ls -ld /linzhongniao/test/tmp.txt
ls: cannot access /linzhongniao/test/tmp.txt: Permission denied
[test@linzhongniao ~]$ cd /linzhongniao/test/
 -bash: cd: /linzhongniao/test/: Permission denied
[test@linzhongniao ~]$ ls /linzhongniao/test/
ls: cannot access /linzhongniao/test/tmp.txt: Permission denied
tmp.txt

给上级目录的其余用户可执行权限,就能够查看文件内容了

[root@linzhongniao ~]# chmod o=rx /linzhongniao/test/ 
[root@linzhongniao ~]# ls -ld /linzhongniao/test/ 
drwxrwxr-x. 2 root root 4096 Jul 27 20:20 /linzhongniao/test/
[test@linzhongniao ~]$ ls /linzhongniao/test/
tmp.txt
[test@linzhongniao ~]$ cd /linzhongniao/test/
[test@linzhongniao test]$ pwd
/linzhongniao/test
[test@linzhongniao test]$ whoami
test

5.2可写w

w表示具备建立、增长、删除或修改目录内文件内容的权限(须要x权限配合)。

[root@linzhongniao ~]# chmod o=x /linzhongniao/test/ 
[root@linzhongniao ~]# ls -ld /linzhongniao/test/
drwxrwx--x. 2 root root 4096 Jul 27 20:20 /linzhongniao/test/
[test@linzhongniao test]$ touch ddd.txt
touch: cannot touch `ddd.txt': Permission denied
[test@linzhongniao test]$ ls
ls: cannot open directory .: Permission denied

5.3可执行x权限

表示具备进入目录和执行的权限,例如:cd dir。可是没有读取r权限没法显示列表文件和目录,以及不能进入到目录中。没有可写权限不能删除修改编辑文件内容。有执行脚本的权限。

[root@linzhongniao ~]# chmod o=x /linzhongniao/test/ 
[root@linzhongniao ~]# ls -ld /linzhongniao/test/
drwxrwx--x. 2 root root 4096 Jul 27 20:20 /linzhongniao/test/
[test@linzhongniao ~]$ cd /linzhongniao/test/

提示:可读权限r和可写权限w都要和执行x权限配合才可以查看和编辑修改目录或文件的内容。

6.改变权限属性命令chmod

chmod - change file mode bits
[root@linzhongniao ~]# which chmod
/bin/chmod

chmod是用来改变文件或目录权限的命令,但只有文件的属主和超级用户才有这种权限,经过chmod来改变文件或目录的权限有两种方法:一种是经过权限字母和操做符表达式的方法来设置权限,另一种是使用数字的方法来设置权限,数字方法是比较经常使用的。

若是咱们想改变的仅仅是第一个打开的目录的权限时,使用chmod命令时不用加任何参数,若是想把目录下的全部文件或子目录也同时改变,须要使用 –R参数。

6.1 chmod数字权限表示法

[root@linzhongniao ~]# chmod 755 /linzhongniao/test/
[root@linzhongniao ~]# ls -ld /linzhongniao/test/ 
drwxr-xr-x. 2 root root 4096 Jul 27 20:20 /linzhongniao/test/

6.2 chmod字符式权限表示法

chmod 用户类型 [+|-|=] 权限字符 文件名

用表格表示以下

linux文件权限

演示:

[root@linzhongniao ~]# ls -ld test.sh 
 -rw-r--r--. 1 root root 25 Jul 27 21:52 test.sh

属主给执行权限

[root@linzhongniao ~]# chmod u+x test.sh 
[root@linzhongniao ~]# ls -ld test.sh
 -rwxr--r--. 1 root root 25 Jul 27 21:52 test.sh

属组给执行权限

[root@linzhongniao ~]# chmod g+x test.sh  
[root@linzhongniao ~]# ls -ld test.sh
 -rwxr-xr--. 1 root root 25 Jul 27 21:52 test.sh

属主取消可读权限,属组和其余用户给执行权限,中间能够用“,”逗号分隔

[root@linzhongniao ~]# chmod u-r,g+x,o+x test.sh 
[root@linzhongniao ~]# ls -ld test.sh
 --wxr-xr-x. 1 root root 25 Jul 27 21:52 test.sh
[root@linzhongniao ~]# chmod ugo=r test.sh 
[root@linzhongniao ~]# ls -ld test.sh
 -r--r--r--. 1 root root 25 Jul 27 21:52 test.sh
[root@linzhongniao ~]# chmod a=xr test.sh
[root@linzhongniao ~]# ls -ld test.sh
 -r-xr-xr-x. 1 root root 25 Jul 27 21:52 test.sh

6.3 默认权限分配的命令umask(了解便可)

为何linux的默认目录权限是755,而文件的默认权限是644呢?

这些都是由umask值来控制的,它在建立文件的时候由一段脚原本控制作判断。

[root@linzhongniao ~]# umask
0022
[root@linzhongniao ~]# sed -n '65,69p' /etc/bashrc 
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
   umask 002
else
   umask 022
fi

6.3.1 根据umask值来计算文件权限的方法

(1)简单好用的加减法计算(并不是是数学里面的加减法运算)

用666减去umask设置的035等于631,凡是获得的数的个位为奇数位,个位加1;同理目录的权限计算方法也是同样的用777减去umask值。

[root@linzhongniao ~]# umask 035
[root@linzhongniao ~]# touch fff
[root@linzhongniao ~]# ll fff
 -rw-r---w-. 1 root root 0 Jul 27 22:34 fff

umask设置的值都为偶数直接相减

[root@linzhongniao ~]# umask 044
[root@linzhongniao ~]# touch hhh
[root@linzhongniao ~]# ll hhh
 -rw--w--w-. 1 root root 0 Jul 27 22:37 hhh

(2)永久修改umask值(了解)

[root@linzhongniao ~]# sed -n '65,69p' /etc/bashrc 
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
   umask 002
else
   umask 022
fi

6.4 setuid和setqid粘滞位

linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限。粘滞位像tmp目录同样,是整个系统临时文件的的存放地,一个目录即便它的全部权限都开放rwxrwxrw,若是设置了粘滞位,除非目录的属主和root用户有权删除它除此以外的用户不能删除。能够工做可是不能删除。

suid   s(有x)   S(没有x)   4  用户对应的权限位(用户对应的3位上)

sgid   s(有x)   S(没有x)2  用户组对应的权限位(用户组对应的3位上)

sticky  t(有x)   T(没有x)   1  其余用户对应的权限位(其余用户对应的3位上)

例如:

[root@linzhongniao ~]# find /usr/bin -type f -perm 4755 -exec ls -l {} \;
 -rwsr-xr-x. 1 root root 22544 Mar 17  2015 /usr/bin/pkexec
 -rwsr-xr-x. 1 root root 2438408 Jun 19 23:16 /usr/bin/Xorg
 -rwsr-xr-x. 1 root root 54464 Mar 22  2017 /usr/bin/at
 -rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd
 -rwsr-xr-x. 1 root root 70480 May 11  2016 /usr/bin/chage
 -rwsr-xr-x. 1 root root 75640 May 11  2016 /usr/bin/gpasswd
 -rwsr-xr-x. 1 root root 40240 May 11  2016 /usr/bin/newgrp
 -rwsr-xr-x. 1 root root 51784 Aug 24  2016 /usr/bin/crontab

6.4.1 suid知识小结

suid是针对命令和二进制程序的

(1)用户或属主对应的前三位权限的x位上若是有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。

(2)suid做用是让普通用户能够以root(或其余)的用户角色运行,只有root(或其余)帐号才能运行的程序或命令以及程序命令对应原本没有权限操做的文件等(注意和su及sudo的区别)。suid是为某一个命令设置特殊权限(使用者为全部人)。

(3)问题:但愿linzhongniao用户可以删除原本无权删除的文件。

解答:给rm命令的属主设置suid权限

[root@linzhongniao ~]# ls -ld /linzhongniao/
drwxr-xrwx. 3 root root 4096 Jul 27 20:16 /linzhongniao/
[root@linzhongniao ~]# chmod 755 /linzhongniao/

设置权限位755,其余用户没有删除的权限

[root@linzhongniao ~]# ls -ld /linzhongniao/
drwxr-xr-x. 3 root root 4096 Jul 27 20:16 /linzhongniao/

切换到linzhongniao用户,删除/linzhongniao/test/下面的文件,会提示没有权限

[linzhongniao@linzhongniao test]$ whoami
linzhongniao
[linzhongniao@linzhongniao test]$ ls
ddddd  tmp.txt
[linzhongniao@linzhongniao test]$ rm -f tmp.txt 
rm: cannot remove `tmp.txt': Permission denied

给rm命令设置suid权限,看linzhongniao用户能不能删除

[root@linzhongniao ~]# ls -l `which rm|tail -1`
 -rwxr-xr-x. 1 root root 57440 Jun 19 23:15 /bin/rm
[root@linzhongniao ~]# chmod u+s /bin/rm
[root@linzhongniao ~]# ls -l `which rm|tail -1`
 -rwsr-xr-x. 1 root root 57440 Jun 19 23:15 /bin/rm

切换到linzhongniao用户,再删除文件就能够删除了

[linzhongniao@linzhongniao test]$ whoami
linzhongniao
[linzhongniao@linzhongniao test]$ pwd
/linzhongniao/test
[linzhongniao@linzhongniao test]$ rm -f tmp.txt

(4)suid修改的是执行的命令passwd,而不是处理的目标文件/etc/shadow

[root@linzhongniao test]# touch test.sh
[root@linzhongniao test]# chmod u+s test.sh 
[root@linzhongniao test]# ls -l test.sh 
 -rwSr--r--. 1 root root 0 Jul 28 09:25 test.sh

(5)仅对二进制命令程序有效不能用在shell等相似脚本文件上(由于shell脚本仅仅是调用二进制命令程序而已,所以具体权限还须要看二进制命令自己)。

(6)二进制命令程序须要有可执行权限x配合。

(7)suid权限只在程序命令执行过程当中有效。

(8)执行suid命令的任意系统用户均可以得到该命令程序在执行期间对应的拥有者的全部权限。

(9)suid是一把双刃剑,是一个比较危险的功能,对系统安全有必定的威胁。系统suid的无用的功能取消suid权利(安全优化)。

6.4.2 sgid知识小结

sgid是针对用户组的权限位

对于文件来讲,sgid的功能以下:

(1)与suid不一样的是,sgid既能够针对文件也能够针对目录设置。

(2)二进制命令或程序须要有可执行权限x。

(3)执行命令的任意用户能够得到该命令程序执行期间所属组的权限。

对于目录来讲,sgid的功能以下:

(1)linux里默认状况全部用户建立文件,默认用户和组都是自身。

[linzhongniao@linzhongniao ~]$ touch sss
[linzhongniao@linzhongniao ~]$ ls -l sss
 -rw-r--r--. 1 linzhongniao nishishei 0 Jul 28 11:02 sss

(2)能够为目录设置sgid,让超级用户root建立属于目录属主或者属组的文件。

6.4.3 sgid基于locate命令文件的案例

让用户没有使用locate查找命令路径的权限

[root@linzhongniao ~]# ls -l `which locate`
 -rwx--s--x. 1 root slocate 38464 Mar 12  2015 /usr/bin/locate
[root@linzhongniao ~]# chmod g-s  `which locate`
[root@linzhongniao ~]# ls -l `which locate` 
 -rwx--x--x. 1 root slocate 38464 Mar 12  2015 /usr/bin/locate
[root@linzhongniao ~]# su - linzhongniao
[linzhongniao@linzhongniao ~]$ locate cat
locate: can not stat () `/var/lib/mlocate/mlocate.db': Permission denied

6.4.4 setgid基于目录的案例

RHCE认证考试题建立共享目录

建立共享目录/home/admins:属组为adminuser,adminuser组成员对目录有写入读写和执行的权限,其余全部用户没有任何权限(root除外);在/home/admins目录中建立文件会自动继承adminuser组,文件只有属主能够删除。

[root@linzhongniao ~]# mkdir -p /home/admins
[root@linzhongniao ~]# groupadd adminuser
[root@linzhongniao ~]# ls -ld /home/admins
drwxr-xr-x. 2 root root 4096 Jul 28 11:19 /home/admins
[root@linzhongniao ~]# chown .adminuser /home/admins
[root@linzhongniao ~]# ls -ld /home/admins  
drwxr-xr-x. 2 root adminuser 4096 Jul 28 11:19 /home/admins
[root@linzhongniao ~]# touch /home/admins/test

虽然是在/home/admins/下建立的,可是root用户建立的至关于root本身的孩子属主和属组仍是root;须要设置setgid,让root建立属于别的组的孩子。

[root@linzhongniao ~]# chmod g+s /home/admins/
[root@linzhongniao ~]# touch /home/admins/linzhongniao.txt
[root@linzhongniao ~]# ll /home/admins/linzhongniao.txt
 -rw-r--r--. 1 root adminuser 0 Jul 28 11:24 /home/admins/linzhongniao.txt

7.改变文件所属关系命令chown

chown(change owner)

当咱们要改变一个文件的属主或者属组,咱们所使用的用户必须是该文件的属主并且同时是目标属组的成员,或超级用户。只有超级用户才能改变文件的属主。

chown语法:

chown [选项]…[全部者](:或.)[组] 文件

若是想把目录下的全部内容修改属主和属组加-R参数。

改变属组也能够用chgrp命令,推荐使用chown

[root@linzhongniao ~]# chgrp kkk text.txt 
[root@linzhongniao ~]# ls -l text.txt
 -rw-r--r--. 1 root kkk 10 Aug  6 11:01 text.txt

8.改变文件属性chattr

chattr改变文件属性,lsattr显示设置的文件属性

(1) i参数锁定目录或文件,+i锁定目录,-i取消锁定

锁定passwd文件,锁定以后就不能建立用户了

[root@linzhongniao ~]# chattr +i /etc/passwd
[root@linzhongniao ~]# lsattr /etc/passwd     
 ----i--------e- /etc/passwd
[root@linzhongniao ~]# useradd dddd 
useradd: cannot open /etc/passwd
[root@linzhongniao ~]# chattr -i /etc/passwd 
[root@linzhongniao ~]# useradd dddd
[root@linzhongniao ~]# id dddd
uid=511(dddd) gid=512(dddd) groups=512(dddd)

(2)a参数只能追加不能删除

只能向文件中追加内容,不能删除和编辑。注意:尽管是root用户也只能追加,不能删除。

[root@linzhongniao ~]# chattr +a text.txt 
[root@linzhongniao ~]# lsattr  text.txt
 -----a-------e- text.txt
[root@linzhongniao ~]# rm -f text.txt 
rm: cannot remove `text.txt': Operation not permitted
[root@linzhongniao ~]# >text.txt
 -bash: text.txt: Operation not permitted
[root@linzhongniao ~]# echo "111">>text.txt 
[root@linzhongniao ~]# cat text.txt
ssdsd
111
相关文章
相关标签/搜索