linux文件和目录的权限详解
一、文件和目录权限概述
1、linux文件或目录的权限是由9个权限为来控制的。
每三位为一组,它们分别是文件属主(Owner)的读、写、执行,用户组(Group)的读、写、执行以及(Other)其他用户的读、写、执行;
r (read) 可读权限,对应数字4
w (write) 可写权限,对应数字2
x (Execute) 可执行权限,对应数字1
- 没有权限 , 对应数字0
2、用户属主、用户组、其他用户。
文件属主/用户(Owenr/User):读read、写write、执行x
文件用户组(Group):读r、写w、执行x
其他用户(Other):读r、写w、执行x
如果权限位不可读、不可写、不可执行,则用 - 来表示
图解:
3、小结:linux普通文件的读、写、执行权限说明:
1)可读r表示具有读取\阅读文件内容的权限,
2)可写w表示具有新增、修改文件内容的权限
3)如果没有r,那么vi会提示无法编辑(可强制编辑). echo可重定向或追加);
4)特别提示:删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身权限无关
5)可执行x:表示具有执行文件的权限
6)文件本身要能够执行 I
7)普通用户同时还需要具备r的权限才能。
8) root只要有x的权限就能执行。
win32下可执行文件:*.exe,*.bat, *.com
nux下可执行文件:*.sh , *.py ,*.perl等。
4、小结:linux目录的读、写执行权限说明:
1)可读r:表示具有浏览目录下面文件及子目录的权限,即 ls dir
如果没有x权限,不能进到目录里,即无法cd dir
如果没有x权限,ls 列表时可以看到所有文件名。但是会提示无权访问目录下文件
如果ls -l 列表,所有的属性会带有问号,也会提示无权访问目录下文件,但是可以查看到所有文件名
2)可写w:表示具有增加、删除或修改目录内文件名(一般指文件名)的权限(需要x权限配合)
3 ) 可执行x:表示具有进入目录的权限;例如: cd dir
4 ) 但是没有r 无法列表文件及目录,没有w无法新建和删除
二、权限属性的修改
1、改变权限属性命令 chmod
chmod是用来改变文件或目录权限的命令,但只有文件的属主和超级用户root才有这种权限。通过chmod来改变文件或目录的权限有两种方法:
一种是通过权限字母和操作符表达式的方法来设置权限;
另一种是使用数字方法设置权限。
1 )chmod 数字权限方法(推荐)
使用数字权限设置权限的命令格式如下:
chmod [数字组合] 文件名
例子:
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-r-xr-x 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod 644 test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-r--r-- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
每个三位数的权限代码(分别是属主、属组、其他用户)组合,有8种可能:
八进制数字 权限
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
2 )chomd 字符式权限表示法
使用权限字符设置权限的命令格式如下(图):
chomd [用户类型] [+| - |=] [权限字符] 文件名,用表示如下:
2、用户定义字母:
u代表属主用户Lowneriuser)
g代表属组(group)
o代表其它用户(other)
a代表属主、属组和其它用户,也就是上面三个用户(或组)的所有(all);
3、权限定义字母:
r代表读权限,用数字4表示;
w代表写权限,用数字2表示;
x代表执行权限,用数字1表示;
- 代表没有权限,用数字o表示
4、权限增减字符:
+:添加某个权限
-:取消某个权限
=:取消其他所有权限赋予给定的权限
例子:
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-r--r-- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod u+x test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rwxr--r-- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod g+w test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rwxrw-r-- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod u-x,g+w,o-rwx test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-rw---- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod ugo=rw test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-rw-rw- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod a=rw test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-rw-rw- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
[[email protected] oldboy]# chmod 644 test.txt
[[email protected] oldboy]# ll /tmp/oldboy/test.txt
-rw-r--r-- 1 root root 34 3月 17 07:18 /tmp/oldboy/test.txt
5、对于目录权限的设置,要用到-R参数;
和数字权限方法一样,如果我们为一个目录及其下的子目录和文件具有相同的属性,就可以用-R参数
例子:
[[email protected] oldboy]# chmod R a+rwx ett diri
[[email protected] oldboy]# Is lr ett diri
总计4
rwxrwxrwx l root root O Oct 30 11:01 0ldbovtest. txt
drwxrwxrwx 2 root root 4096 0ct 30 11:01 etiantian
6、知识点:web apache nginx站点目录的文件和目录给什么权限:
默认权限是安全权限的临界点,工作中尽量给这个临界点,或者小于临界点,不要大于临界点权限。
三、特殊权限
1、特殊权限位基本说明:
linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限
suid s(有x)S 4用户对应的权限位(用户对应的3位上)
sgid s(有x)S 2用户组对应的权限位用户组对应的3位上)
sticky t(有x)T 1其他用户对应的权限位
2、suid知识小结:是针对命令和二进制程序的
1)用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。
2) suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)帐号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
(注意和su及sudo的区别),suid为某一个命令设置特殊权限(使用者为所有人)。
通过给rm命令设置suid加深学生对suid的理解。
3)问题:希望oldboy用户能够删除本来无权删除的文件。
a. sudo给oldboy授权rm,b. 给rm命令设置suid,c. 设置上级目录w权限。
4)suid修改的是执行的命令passwd,而不是处理的目标文件/etc/shadow。
5)仅对二进制命令程序有效,不能用在shell等类似脚本文件上(因为shell脚本仅仅是调用二进制命令程序而已,因此,具体权限还需要看二进制命令本身)
6)二进制命令程序需要有可执行权限x配合。
7)suid权限仅在程序命令执行过程中有效。
8)执行suid命令的任意系统用户都可以获得该命令程序在执行期间对应的拥有者的所有权限
9)suid双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。
系统suid的无用的功能取消suid权利(安全优化)。
3、对于目录:sgid的功能:
1)linux里默认情况所有用户创建文件,默认用户和组都是自身。
2)sgid可以让用户再次目录下创建的文件和目录,具有和此目录相同的用户组设置。
setgid位主要用在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所属组权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变得简单。提示:用八进制数2000表示setgid权限位。
4、sgid知识总结介绍:
特别说明:
1)与suid不同的是,suid既可以针对文件也可以针对目录设置!
2)sgid是针对用户组权限位的。
对于文件来说,suid的功能如下:
(1) sgid仅对二进制命令程序有效。
(2)二进制命令或程序需要有可执行权限x。
(3)执行命令的任意用户可以获得该命令程序执行期间所属组的权限。
5、特殊权限对应的数字小结:
suid 4000权限字符s(S),用户位上的x位上设置。
授权方法chmod 4755 /bin/rm或chmod u+s test
sgid 2000权限字符s(S),用户组位的x位上设置。
授权方法chmod 2755 0ldboy.txt或chmod g+s test
牯滞位1000权限字符t(TJ,其他用户位的x位上设置。
授权方法chmod 1777/tmp或chomd o+t/tmp
如果对应位有x则,字符权限表现为小写,台则表现为大写。
tmp经典的粘滞位曰录案例,特点,谁都有写权限,因此安全成问题。常常是木马第一手跳板地点。
四、文件及目录的归属关系
1、文件或目录的归属关系主要定义文件或目录归属哪个用户所有及归于哪个用户组所有。
[[email protected] oldboy]# Is -ld catchfish. txt
-rw-r-r- 1 root root 0 Oct 30 15: 05 catchfish. txt
上面的例子表示,catchfish.txt这个文件,其属主是root,归属的组是root用户组,而root用户所拥
有的权限是rw-,root用户组拥有的权限是r一。
有时我们可能不理解,为什么Linux要设置文件的属主、属组,为什么还要为属主、属组和其它用户
都要设置权限呢??我们在以前的文档说过,Linux是多用户的操作系统,文件的安全性对Linux是极为重
要的,Linux的安全性主要表现在在用户管理和权限(用户的权限及文件的权限)管理上。
2、chown(change owner) 更改及设置文件对应的用户和组。
当我们要改变一个文件的属主,我们所使用的用户必须是该文件的属主而同时是目标属组成员,或超级用户。只有超级用户的才能改变文件的属主。
chown 语法:
chown [选项]… [所有者][:组] 文件…
例子:
chown 用户 文件或目录 #<==仅仅授权用户。
chown :组 文件或目录 #<==仅仅授权组。 等同于“chgrp组 文件或目录”
chown 用户:组 文件或目录 #<==表示授权用户和组。
强调:
1)其中冒号“:“可以用点号 ”.“ 替代。
2)要授权的用户和组名,必须是linux系统里实际存在的。
3、chgrp (changegroup) 改变文件的属组命令。
语法:chgrp oldboy ffff== chown .oldboy ffff
chgrp[参数选项]... 组文件...
它的用户和chown类似,只不过它仅是用来改变文件或目录的属组的;-R参数用于目录及目录下所有文件改变属组的。这和chown也是一样的,可以把chgrp看作是chown的子集。一般会用chown即可。