linux中权限的问题:
首先linux是一种文件式的操作系统,任何一种设备在系统中都可以看做是一种文件,一个用户能否对文件进行操作,取决于文件对用户所释放的权限。
举一个简单的例子:
[root@localhost 06yue]# ls -al /etc/passwd
-rw-r--r-- 1 root root 3383 Apr 30 04:46 /etc/passwd
- rw- r-- r--
“-”代表文件是常规文件 文件所有者的权限 组内用户所拥有的权限 其他用户所拥有的权限
“d”目录
“l”符号链接设备
“c”字符设备
“b”块设备
“p”先进先出
“s”套接字
r可读权限,w可写权限,x可执行权限
s or S(SUID,Set UID)称为Set UID,简称为SUID,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序所有者的权限,举个例子。
[root@localhost 06yue]# ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
正常情况下这个文件只有root可以去执行,但是加上s权限以后,除了root意外的其他用户就也可执行了,并且在执行时会暂时或得root用户的权限,
SUID对目录是无效的。这点要特别注意。
s或S(SGID,Set GID)与SUID类似,如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的用户组所有者(group id)。
如果SGID是设置在目录上,则在该目录内所建立的文件或目录的用户组,将会是此目录的用户组,举个例子。
[root@localhost 06yue]# chown 06yue.06yue auth/
[root@localhost 06yue]# chmod g+s auth/
[root@localhost 06yue]# ls -l
total 28
drwxrwsr-x 3 06yue 06yue 4096 Apr 30 19:11 auth/
[root@localhost 06yue]# cd auth/
[root@localhost auth]# mkdir auth_sgid
[root@localhost auth]# ls -l
total 12
drwxr-sr-x 2 root 06yue 4096 Apr 30 19:11 auth_sgid
t或T(Sticky Bit)当前只针对目录有效,对文件没有效果。在具有t权限的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。
举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。
因为SUID、SGID、Sticky占用x的位置来表示,所以在表示上会有大小写之分。加入同时拥有执行权限和SUID、SGID、Sticky,则权限表示字符是小写的:
-rwsr-sr-t 1 root root 4096 6月 23 08:17 conf
如果在没有执行权限的情况下,则表示字符会变成大写:
-rwSr-Sr-T 1 root root 4096 6月 23 08:17 conf
文件隐藏属性 :
chattr(设置文件隐藏属性)
[root@localhost ~]# chattr [+-=][ASacdistu] 文件或目录名
参数:
+ : 增加某个特殊参数,其他原本存在的参数不动。
- : 删除某个特殊参数,其他原本存在的参数不动。
= : 设置一定,且仅有后面接的参数
A : 当设置了A属性时,这个文件(或目录)的存取时间atime(access)将不可被修改,可避免例如手提电脑有磁盘I/O错误的情况发生。
S : 这个功能有点类似sync。就是将数据同步写入磁盘中。可以有效地避免数据流失。
a : 设置a之后,这个文件将只能增加数据,而不能删除,只有root才能设置这个属性。
c : 这个属性设置之后,将会自动将此文件“压缩”,在读取的时候将会自动解压缩,但在存储的时候,将会先进行压缩后再存储(对于大文件有用)。
d : 当执行dump(备份)程序的时候,设置d属性将可使该文件(或目录)具有转储功效。
i : i的作用很大。它可以让一个文件“不能被删除、改名、设置连接,也无法写入或新增数据”。对于系统安全性有相当大的帮助。
j : 当使用ext3文件系统格式时,设置j属性将会使文件在写入时先记录在journal中。但是,当文件系统设置参数为data=journalled时,由于已经设置日志了,所以这个属性无效。
s : 当文件设置了s参数时,它将会从这个硬盘空间完全删除。
u : 与s相反,当使用u来设置文件时,则数据内容其实还存在磁盘中,可以用来还原删除.
注意:这个属性设置上,比较常见的是a与i的设置值,而且很多设置值必须要root才能设置。
lsattr(显示文件的隐藏属性)
[root@linux ~]# lsattr [-aR] 文件或目录
参数:
-a : 将隐藏文件的属性也显示出来。
-R : 连同子目录的数据也一并列出来。
举个例子:
[root@localhost 06yue]# ls -al
total 12
drwxrwsr-x 3 06yue 06yue 4096 Apr 30 19:11 .
drwx------ 8 06yue 06yue 4096 Apr 30 19:10 ..
-rw-r--r-- 1 root root 0 Apr 30 18:21 auth
[root@localhost 06yue]# chattr +i auth
[root@localhost 06yue]# rm -rf auth
rm: cannot remove `auth': Operation not permitted //////
设置完成后是连root都无法删除的
[root@localhost 06yue]# lsattr auth
----i-------- auth
[root@localhost 06yue]# chattr -i auth
[root@localhost 06yue]# rm -rf auth
[root@localhost 06yue]# ls -al
total 12
drwxrwsr-x 3 06yue 06yue 4096 Apr 30 19:11 .
drwx------ 8 06yue 06yue 4096 Apr 30 19:10 ..
ACL可以指定单个用户或是用户组对文件或者是目录的权限,与文件或者目录原有的权限不发生冲突
[root@localhost 06yue]# getfacl auth_acl
# file: auth_acl
# owner: root
# group: 06yue
user::rw-
group::r--
other::r--
[root@localhost 06yue]# setfacl -m u:06yue:x auth_acl
[root@localhost 06yue]# getfacl auth_acl
# file: auth_acl
# owner: root
# group: 06yue
user::rw-
user:06yue:--x
group::r--
mask::r-x
other::r--
这里给06yue这个用户可以执行的权限,就算原文件设置的权限没有给06yue这个用户执行权限,只要acl里设置了,那么06yue这个用户也是可以执行的
我们看到getfacl中有一行是mask,这里的mask是acl的默认权限,也就是说mask的值决定了06yue这个用户可以额外获得的权限,如果在acl中06yue设置了w权限,但是mask却没有,那么06yue也是不能修改这个文件的。
具体setfacl和getfacl命令请参照man手册