文件的时间属性有三种,atime(最后被访问的时间),这个最后被访问是指用cat,less,more,mv,cp等操作后显示的时间。对于ls aa ,echo abc >aa 这样的操作,是不是改变aa文件的atime的。可以用ll --time=atime filename 来查看文件的atime.
ctime(文件权限与属性被更改的时间),这个主要包括,用chmod, chown, mv, cp 等命令进行操作,均会改变其时间。即使用cp -a来保留其时间,但因为档案是被重新建立的,所以ctime也会被更新。只要重新建立档案,就会更新ctime。但如果我们用cat, vi, touch --time, ls 等操作,是不会改变其ctime的。改变文件里面的内容与文件的建立或访问时间是不会影响ctime的值的。可以用 ll --time=ctime filename 来查看ctime
mtime(文件内容被更改的时间)。与vi,nano,echo等有关。即使你用vi并没有修改里面的内容,但是你却用wq保存了,时间照样会更新。只有当文件里面的内容被更改或重新保存时才会更新mtime。此时间与cat,ls,chown,chmod,cp,mv等无关。改变其所有者及权限,或者访问时间,不会改变其mtime的值。这也是ll 默认值。当然,这个值是最重要的!
touch不仅可以创建空文件,还可以更改文件的时间属性。
-d 指定要更改的时间。如touch -d "2011-02-01" ab 就可以把当前目录下的ab的atime,mtime改为2011年2月1日。但不会改变其ctime时间。
[sunjiebin@rhel6 sun]$ ll
-rw-rw-r--. 1 sunjiebin sunjiebin 4 10月 11 22:11 ab
[sunjiebin@rhel6 sun]$ touch -d "2011-02-01" ab
[sunjiebin@rhel6 sun]$ ll
-rw-rw-r--. 1 sunjiebin sunjiebin 4 2月 1 2011 ab
[sunjiebin@rhel6 sun]$ ll --time=ctime ab
-rw-rw-r--. 1 sunjiebin sunjiebin 4 10月 11 22:16 ab
-t 一次性详细指定时间。如touch -t 1102011122.08 ab 即指指定文件ab的修改时间为2011年2月1日11点22分08秒。这个与touch -d "2011-02-01 11:22:08" ab效果是一样的。
umask 新建文件预设权限。可以用umask来查看预设权限数值。也可以用umask -S来查看新建的文件权限关系。普通用户默认的umask值为0002.第一个0暂时不知道干嘛的,后面三个0分别代表所属者,所属组,其它用户对应的掩码值。umask中的值的权限与新建文件的权限是相反的。umask=0002,代表的权限为u= , g= ,o=w 。那么反过来,新建的文件权限即为:u=rw, g=rw, o=r。也就是664的权限(新建文件默认是没有x权限的)。umask -S u=rwx,g=rwx,o=rx 即 umask 0002。可以直接用umask 0022即表示设置预设权限为所有者完全控制,所属组和其它用户只读。
lsattr 查看文件的隐藏权限,其中-a显示出隐藏文件的隐藏权限。-R显示出目录及目录内的所有文件隐藏权限。-d只显示指定目录的隐藏权限,而不显示目录以下的文件隐藏权限。这三个参数与ls的参数意义一样。
chattr 设置文件隐藏权限。只不过chattr只能在ext2/3/4文件系统上生效。+添加权限,-去掉权限,=替换权限。
+A 让atime无法更改。即不记录文件被访问的时间。
[root@rhel6 sun]# chattr +A ab
[root@rhel6 sun]# ll --full-time --time=atime ab
-rw-r--r--. 1 root root 15 2011-10-12 13:40:22.999414919 +0800 ab
[root@rhel6 sun]# cat ab
al
[root@rhel6 sun]# ll --full-time --time=atime
总用量 4
-rw-r--r--. 1 root root 15 2011-10-12 13:40:22.999414919 +0800 ab
我对ab文件进行访问也没有改变其atime时间了。
+a 让文件只能增加,不能删除或修改里面的数据。要注意的是,在增加这个属性后,我们就不能用vi,nano等来编辑这个文件了。编辑后就会发现不能保存。然而,你还是可以用"echo >> "这个来追加字符进去。但不能用"echo > "去替换字符。
[root@rhel6 test]# touch ab
[root@rhel6 test]# chattr +a ab
[root@rhel6 test]# echo aa >ab
-bash: ab: 不允许的操作
[root@rhel6 test]# echo aa >>ab
[root@rhel6 test]# cat ab
aa
+i 让文件无法更改。不能被删除,改名,移动,添加数据。但是可以被复制,且复制后的文件i属性消失。也就是那文件固定在那里,任何人也动不了!这个属性对于安全性较高的文件很有用。
[root@rhel6 test]# touch bc
[root@rhel6 test]# chattr +i bc
[root@rhel6 test]# rm -rf bc
rm: 无法删除"bc": 不允许的操作
[root@rhel6 test]# mv bc cd
mv: 无法将"bc" 移动至"cd": 不允许的操作
[root@rhel6 test]# echo yy >>bc
-bash: bc: 权限不够
[root@rhel6 test]# cp bc ../
[root@rhel6 test]# ls ../
ab bc test tt
[root@rhel6 test]# lsattr ../bc
-------------e- ../bc
+c 保存时对文件自动压缩,打开时自动解压。节省磁盘空间。
+S 同步写入磁盘
+s 如果增加这个属性后,对此文件的删除后将无法再行恢复。即彻底删除文件。
+u 与-s相反,即删除后还可以恢复。
我们用得最多的还是i和a属性。
注意:当对文件夹进行chattr +a时,如果不用-R选项,那么此文件夹下原来就已经存在的文件则不会被加上a的属性。但后续在此文件夹下新建的文件将会继承其隐藏属性。如果用了-R,则会将该文件夹下原来已有的文件同时也加上a属性。如果要删除chattr建立的文件夹,必需先用chattr -a -R 来清除文件夹及文件夹里面所有的a属性才能完全删除。
[root@rhel6 test]# mkdir test2
[root@rhel6 test]# touch test2/ab
[root@rhel6 test]# chattr +a test2/
[root@rhel6 test]# lsattr -R -d test2
-----a-------e- test2
[root@rhel6 test]# lsattr test2/
-------------e- test2/ab
[root@rhel6 test]# chattr +a -R test2/
[root@rhel6 test]# lsattr test2/
-----a-------e- test2/ab
[root@rhel6 test]# mkdir test2/test3
[root@rhel6 test]# lsattr test2
-----a-------e- test2/ab
-----a-------e- test2/test3
[root@rhel6 test]# rm -rf test2/
rm: 无法删除"test2/ab": 不允许的操作
rm: 无法删除"test2/test3": 不允许的操作
[root@rhel6 test]# chattr -a -R test2
[root@rhel6 test]# rm -rf test2
[root@rhel6 test]# ls
4913 5036 ab ab~ abc az~ bc
以上实验验证了上述说法。
suid
我们知道shadow是用来存放用户信息和密码的,但/etc/shadow这个文件普通用户是没有任何权限的。但是你又可以用passwd来修改密码,这时候其实也就修改了shadow。这是不是与系统的系统的权限设定矛盾呢?这里就涉及到了扩展权限suid。我们看一下passwd的执行文件权限。
[root@rhel6 test]# ll -d /tmp; ll /usr/bin/passwd
drwxrwxrwt. 5 root root 4096 10月 12 15:04 /tmp
-rwsr-xr-x. 1 root root 26968 1月 29 2010 /usr/bin/passwd
可以看到/usr/bin/passwd文件竟然有一个s的属性!就是因为这个s,让我们有了suid特殊权限。让我们能够修改/etc/shadow。suid的作用在于,(1)普通用户执行passwd的时候,能够暂时将其权限替换为文件所有者,也就是由root去访问/etc/shadow文件来修改密码;(2)只对二进制执行文件有效,对shell脚本也亦无效。如果普通用户连对文件执行的权限都没有,那么这个权限是无效的。我们用普通用户cat /etc/shadow时,你会发现无法查看shadow文件。因为普通用户对shadow是没有权限的,而cat命令并没有suid权限。
sgid
和suid有些类似,这个是对群组有效。可作用于文件夹和文件上。在执行一个文件时,会将你的所属组替换为文件所属组,然后以那个所属组的权限去执行那个命令。这个命令还能用在目录上,当用户在具有sgid的目录下新建文件时,其新建文件的所属组会被自动替换为该目录的所属组,而不是用户本身所在的分组。
sbit
这个特殊权限只对目录有效。它的作用在于用户只能删除和移动自己建立的文件,即使对其它文件拥有全部权限也不能删除,移动或改名!但是如果有rw权限可以用vi,echo来更改文件里面的内容!/tmp目录就拥有sbit特殊权限。我们用yy来建立一个文件aa,然后设置权限为777,再用sunjiebin用户来删除看看。
[root@rhel6 ~]# ll -d /tmp
drwxrwxrwt. 5 root root 4096 10月 12 17:19 /tmp
[root@rhel6 ~]# su - yy
[yy@rhel6 tmp]$ touch ab
[yy@rhel6 tmp]$ chmod 777 ab
[yy@rhel6 tmp]$ su - sunjiebin
密码:
[sunjiebin@rhel6 ~]$ ll /tmp/ab
-rwxrwxrwx. 1 yy yy 0 10月 12 18:38 /tmp/ab
[sunjiebin@rhel6 ~]$ rm -rf /tmp/ab
rm: 无法删除"/tmp/ab": 不允许的操作
[sunjiebin@rhel6 tmp]$ echo yy >>ab
[sunjiebin@rhel6 tmp]$ cat ab
yy
[sunjiebin@rhel6 tmp]$ mv ab cd
mv: 无法将"ab" 移动至"cd": 不允许的操作
[sunjiebin@rhel6 tmp]$ cp -p ab ~
[sunjiebin@rhel6 tmp]$ ll ~/ab
-rwxrwxrwx. 1 sunjiebin sunjiebin 5 10月 12 18:47 /home/sjb/ab
虽然我们有完全控制权限,由于有sbit的存在,所以我们是删不掉,也移不走ab的。但是我们却可以用echo来更改ab里面的内容!同时,我们还可以复制该文件,复制过的文件会丢失sbit属性。
suid,sgid,sbit权限的设定。在chmod 的三个数字前面再加一个数字即可。其中suid=4,sgid=2,sbit=1。我们在test文件夹下建立一个ab文件,且给它加上suid权限。[root@rhel6 test]# touch ab
[root@rhel6 test]# ll ab
-rw-r--r--. 1 root root 0 10月 12 19:02 ab
[root@rhel6 test]# chmod 4644 ab
[root@rhel6 test]# ll ab
-rwSr--r--. 1 root root 0 10月 12 19:02 ab
咦,怎么成了大S了啊?我要小s呢。。原来大S代表的是你没有x权限啦!当你这个文件有x权限时,才会有小s啊!那我们改下权限看看。
[root@rhel6 test]# chmod 4744 ab
[root@rhel6 test]# ll ab
-rwsr--r--. 1 root root 0 10月 12 19:02 ab
看到没有,果断变成小s了吧。大S是无效的,小s才货真价实呢!因为suid只对二进制执行文件有效!执行权限都没有,那这个属性也就无意义了。
我们也可以用 chmod 2744 ab来为ab增加sgid属性。 也可以用chmod 1744 ab 来增加sbit属性的sbit属性,虽然能增加,但这个属性是无意义的。因为ab是一个文件,不是目录!还可以用a+s,g+s,o+t来增加这三个特殊属性。
[root@rhel6 ~]# chmod o+t ab
[root@rhel6 ~]# ll ab
-rwxr--r-T. 1 root root 0 10月 11 21:50 ab
[root@rhel6 ~]# chmod o+xt ab; ll ab
-rwxr--r-t. 1 root root 0 10月 11 21:50 ab
好了,这三个权限现在只是了解一下,以后章节中鸟哥还会再详细介绍的。呵呵
今天到此为止~