1. 所有者与群组
Linux中有三个身份类别owner/group/others,各有read/write/exectue等权限。
** 所有者**
一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
群组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。处在同一群组的人对文件有相同的权限,对同一组的用户进行权限管理。
其他组
除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
其他人
除了文件拥有者和群组内的其他用户,一般是可以公开的权限,对所有人都可以的权限的管理单元。
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个
root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录
在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件
可以说是Linux系统里面帐号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊!
2. Linux文件权限概念
查看文件属性ls -al ~
第一栏的10个字符代表这个文件的类型与权限(permission):
第一个字符代表这个文件的类型:文件(-)、目录(d)、链接(l)、设备(b)。
后面的字符每3个一组(“rwx”的组合),其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。
- 第一组为“文件拥有者可具备的权限” ;
- 第二组为“加入此群组之帐号的权限”;
- 第三组为“非本人且没有加入本群组之其他帐号的权限”。
rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)
第三栏的字符串表示所有者。
第四栏的字符串表示所在群组。
权限也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7。 在改变权限的命令中使用。
3. 更改文件的所有者、群组、权限
改变文件拥有者,chown
语法:
[root@localhost~]# chown [-R] 帐号名称 文件或目录
[root@localhost~]# chown [-R] 帐号名称:群组名称 文件或目录
# 选项:-R :进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
范例:
修改文件所有者改变用户组,chmod
change group的缩写
语法:
[root@localhost ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R: 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
案例:
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]# chgrp wangtao .bashrc
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root wangtao 176 12月 29 2013 .bashrc
改变权限,chmod
权限设置有两种方法,分别 是使用数字和符号来变更。
数字来代表各个权限,各权限的分数对照表如下:
r:4 > w:2 > x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx--x] 分数则是:owner=7,group=6,others=1, 则文件的权限数字就是761.
语法:
[root@localhost ~]# chmod [-R] xyz 文件或目录
# 选项与参数:
# xyz: 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
# -R: 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
范例
修改文件权限符号更改文件权限
基本上就九个权限分别是(1)user (2)group (3)others三种身份,借由u, g, o来代表三种
身份的权限,此外,a则代表all亦即全部的身份!读写的权限就可以写成r ,w,x啰!
这样可以使用下面的方式来看:
| chmod | u g o a | +(加入)-(除去)=(设置)| r w x | 文件或目录 |
范例
[root@localhost ~]# chmod u=rxw,go=rx .bashrc
#注意喔!那个u=rwx,go=rx是连在一起的,中间并没有任何空白字符!
[root@localhost ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]# chmod a-x .bashrc
[root@localhost ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
[root@localhost ~]#
4. 文件与目录的默认权限与隐藏权限
除了基本r , w, x权限外,在Linux传统的Ext2/Ext3/Ext4文件系统下,我们还可以设置其他的系统隐藏属性, 这部份可使用 chattr 来设置,而以 lsattr 来查看,最重要的属性就是可以设置其不可修改的特性!
4.1 文件默认权限:umask
[root@localhost tmp]# ls -l
总用量 4
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-------. 1 root root 0 2月 15 01:35 yum.log
[root@localhost tmp]# mkdir dir1
[root@localhost tmp]# touch test1
[root@localhost tmp]# ls -l
总用量 4
drwxr-xr-x. 2 root root 18 2月 15 12:32 dir1
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-r--r--. 1 root root 0 2月 15 12:33 test1
-rw-------. 1 root root 0 2月 15 01:35 yum.log
如上创建一个目录和文件时,他的默认权限是drwxr-xr-x和-rw-r--r--。那么指定这个默认值就是umash了。
查看umash的值:
[root@localhost ~]# umash
0022
注意,最小Linux安装没有umash命令
第1个数字代表特殊字符,第2,3,4个数字代表ower,gourp,others。
一般文件和目录创建的默认权限一般是:
- 若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就
是最大为 666 分,默认权限如下: -rw-rw-rw- - 若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开
放,亦即为 777 分,默认权限如下: drwxrwxrwx
而umash的分数指的是“该默认值需要减掉的权限!”,当要拿掉能写的权限,就是输入2分。
从上面的例子中: umask为022,所当使用者:
- 创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
- 创建目录时:(drwxrwxrwx)-(d----w--w-)==> drwxr-xr-x
正如上面范例所示!
那么如何设置umask的值呢,umash 后面加数字。
范例:
umash
在默认的情况中, root 的 umask 会拿掉比较多的属性,root 的 umask 默认是 022 , 这是基
于安全的考虑啦~至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入
权力! 其实,关于默认 umask 的设置可以参考 /etc/bashrc 这个文件的内容,不过,不建议
修改该文件.
4.2 文件隐藏属性
除了那9个权限,另还有文件的隐藏属性,在系统安全上面重要的紧。
下面的chattr指令只能在Ext2/Ext3/Ext4的Linux传统文件系统上面完整生效, 其他的文件系统可能就无法完整的支持这个指令了,例如xfs仅支持部份参数而已。
如何设置这个文件与检查这些隐藏的属性。chattr
[root@localhost~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+:增加某一个特殊参数,其他原本存在参数则不动。
-:移除某一个特殊参数,其他原本存在参数则不动。
=:设置一定,且仅有后面接的参数
A:当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
S:一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a:当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这属性
c:这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d:当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份
i:这个i可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”对于系统安全性有相当大的助益!只有root 能设置此属性
s:当文件设置了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u:与s相反的,当使用u来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
注意1:属性设置常见的是a与 i的设置值,而且很多设置值必须要身为root才能设置
注意2:xfs文件系统仅支持AadiS而已
范例
[root@localhost tmp]# touch attrtest
[root@localhost tmp]# chattr +i attrtest
[root@localhost tmp]# rm attrtest
rm:是否删除普通空文件 "attrtest"?y
rm: 无法删除"attrtest": 不允许的操作
[root@localhost tmp]# ls -l
总用量 4
-rw-r--r--. 1 root root 0 2月 15 13:23 attrtest
drwxr-xr-x. 2 root root 18 2月 15 12:32 dir1
-rwx------. 1 root root 827 2月 15 01:46 ks-script-4K3G9g
-rw-r--r--. 1 root root 0 2月 15 12:33 test1
-rw-------. 1 root root 0 2月 15 01:35 yum.log
[root@localhost tmp]# lsattr attrtest
----i----------- attrtest
[root@localhost tmp]# chattr -i attrtest
[root@localhost tmp]#
这个指令在系统的数据安全上面很重要,由于这些属性是隐藏的性质,所以要以lsattr才能看到该属性。最重要的是设置+i与 +a, +i 可以让一个文件无法被更改,+a只可以log file 这种文件只能增加。
显示文件隐藏属性 lsattr
[root@localhost ~]# lsattr [-adR] 文件或目录
选项与参数:
-a:将隐藏文件的属性也秀出来;
-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R:连同子目录的数据也一并列出来!
5. 文件特殊权限: SUID, SGID, SBIT
查看 /tmp 和/usr/bin/passwd 的权限
[root@localhost ~]# ls -ld /tmp; ls -l /usr/bin/passwd
drwxrwxrwt. 8 root root 4096 2月 15 13:23 /tmp
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
可以看到s跟t权限...
Set UID
当s这个标志出现在文件拥有者的x权限上时,例如刚刚提到的/usr/bin/passwd 这个文件的权限状态:“-rwsr-xr-x”,此时就被称为Set UID,简称为SUID的特殊权限。基本上SUID有这样的限制与功能:
- SUID 权限仅对二进制程序(binary program)有效;
- 执行者对于该程序需要具有 x 的可执行权限;
- 本权限仅在执行该程序的过程中有效(run-time);
- 执行者将具有该程序拥有者(owner)的权限。
这个权限在一些特殊文件上非常有用,需要好好琢磨。
另外,SUID 仅可用在binary program 上, 不能够用在 shell script 上面!这是因为 shellscript 只是将很多的 binary 可执行文件叫进来执行而已!所以 SUID 的权限部分,还是得要看
shell script 调用进来的程序的设置,而不是 shell script 本身。当然,SUID 对于目录也是无效的~这点要特别留意。
Set GID
当s标志在文件拥有者的x项目为SUID,那s在群组的x时则称为Set GID, SGID
与 SUID 不同的是,SGID 可以针对文件或目录来设置!如果是对文件来说, SGID 有如下的功能:
- SGID 对二进制程序有用;
- 程序执行者对于该程序来说,需具备 x 的权限;
- 执行者在执行的过程中将会获得该程序群组的支持!
举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容 (详细说明会在下节讲述), mlocate.db 的权限如下:
[root@study ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db
与 SUID 非常的类似,若我使用 dmtsai 这个帐号去执行 locate 时,那 dmtsai 将会取得slocate 群组的支持, 因此就能够去读取 mlocate.db 啦!非常有趣吧!
除了 binary program 之外,事实上 SGID 也能够用在目录上,这也是非常常见的一种用途!当一个目录设置了 SGID 的权限后,他将具有如下的功能:
- 使用者若对于此目录具有 r 与 x 的权限时,该 使用者能够进入此目录;
- 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
- 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
Sticky Bit
这个 Sticky Bit,SBIT目前只针对目录有效,对于文件已经没有效果了。SBIT对于目录的作用是:
- 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
- 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
SUID/SGID/SBIT 权限设置
使用数字代表这几个权限
- 4 为 SUID
- 2 为 SGID
- 1 为 SBIT
设要将一个文件权限改为“-rwsr-xr-x”时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也就是:“ chmod 4755 filename ”来设置!
范例
[root@localhost ~]# cd /tmp
[root@localhost tmp]# touch test
[root@localhost tmp]# chmod 4755 test;ls -l test
-rwsr-xr-x. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 6755 test; ls -l test
-rwsr-sr-x. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 1755 test; ls -l test
-rwxr-xr-t. 1 root root 0 2月 15 15:33 test
[root@localhost tmp]# chmod 7666 test; ls -l test
-rwSrwSrwT. 1 root root 0 2月 15 15:33 test
我们是下达7666喔!也就是说,user ,group以及others 都没有 x这个可执行的标志(因为666 嘛),所以,这个 S, T 代表的就是“空的”啦!怎
网友评论