权限设置
发布时间:2009-09-22 14:21:29来源:红联作者:堕落kiss
chown
语法:
[root @test /root ]# chown [-R] user:group [目录名称]
参数说明:
-R :循环的将该目录下的所有档案都改成 user 与 group 的名称!
? chmod
语法:
[root @test /root ]# chmod [-R] [parameter] [目录名称]
参数说明:
-R :循环的一直将该目录的档案均改变之!
范例:
[root @test /root]# chmod 777 .bashrc
说明:
还记得在『档案属性与系统』那一章吧!一个档案或目录至少有九个属性,三个三个一组,共分为三组!而可以使用数字
来当作变换属性的参考依据!各属性如下:
r:4
w:2
x:1
举个例子来说,当一个属性为『-rwxr-xr--』时,那是几分呢?!我们可以将他看成如下『-[rwx][r-x][r--]』三组,所
以分数就变成了『[4+2+1][4+0+1][4+0+0]』共有『754』分啦!这样会算吗?!OK!测试一下,底下的分数为几分:
-r-xr-xr-x
-rwxrw----
如果你可以算出『555』与『760』,呵呵!那么你就应该会算?!所以,如果你要将 .bashrc 设定成所有人都可以读取的
话,就下达『 chmod 777 .bashrc 』吧!其中需要特别注意的是,通常我们都会允许个人网页的设定!那么由于个人网
页预设是记录在/home/userID/public_html底下,偏偏 /home/userID 的属性为『drwx------』根本就不允许任何人进入!
所以,你最少要将你的目录设定成 『drwx--x--x』 才可以!当然也可以设定成『drwxr-xr-x』!不过不建议设定成
『777』呦!
? umask
OK!那么现在我们知道如何建立或者是改变一个目录或档案的属性了,不过,您知道当你建立一个新的档案或目录时,
他的预设属性会是什么吗?呵呵!那就与 umask 有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前
使用者在建立档案或目录时候的属性默认值』,那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:
语法:
[root @test root]# umask
0022
[root@vbird test]# umask 002 <==后面接 3 个数字!
[root@vbird test]# umask
0002
说明:
查看 umask 数值为直接输入 umask 即可,而设定呢?没错!就是 umask 之后接三个数字!那么如何来指定呢?主要还
是跟 Linux 的档案属性(那九个属性, r, w, x )有关的,而且是以分数的那一个关系为例的,而有底下的规则为辅:
? 若使用者建立为『档案』则预设『没有可执行 ( x ) 项目』,亦即只有 rw 这两个项目,也就是最大为 666 分
--rw-rw-rw-
? 若使用者建立为『目录』,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为 777 分
drwxrwxrwx
那么 umask 指定的是『该默认值需要减掉的权限!』因为 r、w、x 分别是 4、2、1 分,所以?!也就是说,当要拿掉能
写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉
执行与写入的权限,也就是 3 分,这样了解吗?请问您, 5 分是什么?呵呵!就是读与执行的权限啦!如果以上面的例
子来说明的话,因为 umask 为 002 ,所以 user, group 并没有被拿掉属性,不过 others 的属性被拿掉了 2 ( 也就是 w 这
个属性 ),那么由于当使用者:
? 建立档案时:(-rw-rw-rw-) - (--------w-) ==> -rw-rw-r--
? 建立目录时:(drwxrwxrwx) - (--------w-) ==> drwxrwxr-x
不相信吗?你只要使用 touch test 然后看看这个 test 的档案属性,就可以知道了!那么如何看你这个使用者目前的 umask
呢?直接下达 umask 即可!实作看看先:
[root@vbird test]# umask
0002
[root@vbird test]# touch test1
[root@vbird test]# mkdir test2
[root@vbird test]# ls -l
-rw-rw-r-- 1 root root 0 Oct 22 00:00 test1
drwxrwxr-x 2 root root 4096 Oct 22 00:00 test2/
发现了什么?呵呵! Test1 的属性为 666-002 = 664 !正确吗?是的!正确!
而 test2 这个目录呢?就是 777-002 = 775 !也正确!
[root@vbird test]# umask 003
[root@vbird test]# touch test3
[root@vbird test]# mkdir test4
[root@vbird test]# ll
-rw-rw-r-- 1 root root 0 Oct 22 00:03 test3
drwxrwxr-- 2 root root 4096 Oct 22 00:03 test4/
嘿!属性又跟刚刚的不一样?!仔细推敲一下为什么呦!test3 666-003 =663,这是
怎么一回事?! 663 应该是 -rw-rw--wx 才对啊!怎么会是上面的属性!呵呵!这
里就要特别的给他强调了!『尽量不要以数字相加减啦!』容易造成类似上面的问题!
你应该要这样想(-rw-rw-rw-) - (--------wx)=-rw-rw-r--这样就对啦!了解了吗?
不要用十进制的数字喔!够能力的话,用二进制来算,不晓得的话,用 rwx 来算喔!
^_^
由上面的例子您应该很轻易的就可以发现 umask 的用途!而这个 umask 可以在 /etc/bashrc 里面进行修改喔!预设的情况
之下, root 的 umask 为 022 而一般使用者则为 002 ,因为可写的权限蛮严重的,因此预设都会拿掉这个权限!此外,
因为 root 比较重要!所以为了安全的需求,其同群组的写入属性就被拿掉了!这东西对于安全性也有一定程度的贡献呦!
? chattr
语法:
[root @test /root ]# chattr [+-=][ASacdistu] [档案或目录名称]
参数说明:
+-= :分别为 [+ 增加] [- 减少] [= 设定] 属性的意思
A :当设定了 A 这个属性时,这个档案(或目录)的存取时间 atime (access) 将不可被修改,
可避免例如手提式计算机容易有磁盘 I/O 错误的情况发生!
S :这个功能有点类似 sync 的功能!就是会将数据同步写入磁盘当中!可以有效的避免数据流失!
a :当设定 a 之后,这个档案将只能增加数据,而不能删除,只有 root 才能设定这个属性。
c :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩出来!
但是在储存的时候,将会先进行压缩之后再储存(看来对于大档案似乎蛮有用的!)
d :当 dump (备份)程序被执行的时候,设定 d 属性将可使该档案(或目录)具有 dump 功效!
i :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法写入或新增数据!』
对于系统安全性有相当大的帮助!
j :当使用 ext3 这个档案系统格式时,设定 j 属性将会使档案在写入时先记录在 journal 中!
但是当 filesystem 设定参数为 data=journalled 时,由于已经设定了日志了,所以这个属性无效!
s :当档案设定了 s 参数时,他将会被完全的移除出这个硬盘空间。
u :与 s 相反的,当使用 u 来设定档案时,则数据内容其实还存在磁盘中,可以使用来 undeletion.
范例:
[root @test /root]# chattr +i /etc/shadow<==呵呵!如此则无法更动这个档案?!
[root @test /root]# chattr -i /etc/shadow <==解除该属性!
说明:
这这个指令是重要的,尤其是在系统的安全性上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!
其中,个人认为最重要的当属 +i 这个属性了,因为他可以让一个档案无法被更动,对于需要强烈的系统安全的人来说,
真是相当的重要的!里头还有相当多的属性是需要 root 才能设定的呢!此外,如果是 log file 这种的登录档,就更需要
+a 这个可以增加,但不会被杀掉的参数了!怎样?很棒吧!未来提到登录档的认知时,我们再来聊一聊如何设定他吧!
? lsattr
语法:
[root @test /root ]# lsattr [-aR]
参数说明:
-a :将隐藏文件的属性也秀出来;
-R :连同子目录的数据也一并列出来!
范例:
[root @test /root]# chattr +i .bash_logout
[root @test /root]# lsattr -a
-------------- ./.
-------------- ./..
---i---------- ./.bash_logout
-------------- ./.bash_profile
-------------- ./.bashrc
-------------- ./.emacs
-------------- ./.screenrc
说明:
这两个指令在使用上必须要特别小心,例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录档案给他设定成为
具有 i 的属性,那么过了若干天之后,你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!
SUID, SGID, Sticky bit 的设定方法:
前面介绍过 SUID 与 SGID 的功能,那么如何开启档案使成为具有 SUID 与 SGID 的权限呢?!这就需要刚刚的数字更改权限的方
法了!现在你应该已经知道数字型态个更改权限方式为『三个数字』的组合,那么如果在这三个数字之前再加上一个数字的话,那
最前的面数字就代表这几个属性了! ( 注:通常我们使用 chmod xyz filename 的方式来设定 filename 的属性时,则是假设没有
SUID, SGID 及 Sticky bit 啦! )
? 4 为 SUID
? 2 为 SGID
? 1 为 Sticky bit
假设要将一个档案属性改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也
就是:『 chmod 4755 filename 』来设定!此外,还有大 S 与大 T 的产生喔!参考底下的范例啦!
[root@test tmp]# touch test
[root@test tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Feb 6 23:08 test
[root@test tmp]# chmod 4755 test
[root@vbird tmp]# ll
total 0
-rwsr-xr-x 1 root root 0 Feb 6 23:08 test*
[root@test tmp]# chmod 6755 test
[root@test tmp]# ll
total 0
-rwsr-sr-x 1 root root 0 Feb 6 23:08 test*
[root@test tmp]# chmod 1755 test
[root@test tmp]# ll
total 0
-rwxr-xr-t 1 root root 0 Feb 6 23:08 test*
上面的三个例子应该都很好说明啊!就是直接将 x 以 s 或者是 t 来取代就是了!
也就是分别为 SUID, SGID 及 sticky bit 的设定方法啦!
[root@test tmp]# chmod 7666 test
[root@test tmp]# ll
total 0
-rwSrwSrwT 1 root root 0 Feb 6 23:08 test
这个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗?因为 s
与 t 都是取代 x 这个参数的,但是你有没有发现阿,我们是下达 7666 喔!也就是
说, user, group 以及 others 都没有 x 这个可执行的标志 ( 因为 666 嘛! ),
所以,这个 S, T 代表的就是『空的』啦!怎么说? SUID 是表示『该档案在执行的
时候,具有档案拥有者的权限』,但是档案拥有者都无法执行了,哪里来的权限给其
它人使用?当然就是空的啦! ^_^