标签:权限 user 读取 col 创建文件 gid 灵活 一起 所有者
Linux 文件权限Linux系统中有句话叫做“everything is files”,这当然不是戏称了,windows系统里的mp3、avi、txt、exe、word等等格式的文件在Linux系统里都是以文件形式存在,当然有人会说那Linux系统的文件不也是以 .mp3、 .txt结尾吗?不是的,Linux系统里这样写是为了的系统操作人员方便辨认,把后面的 .mp3、 .txt删了,也不影响文件本质(当然前提是编码格式不变)。在Linux系统里的文件权限分为有r、w、x、s、t。
1. 查看文件权限
[root@localhost ~]# ll /app/house total 0 drwxrwx---. 2 root root 6 Jul 21 15:17 common
文件类型 所有者权限 用户组权限 其他用户权限 特殊权限 连接数 所有者 用户组 大小 修改日期 文件名
d rwx rwx --- . 2 root root 6 Jul 21 15:17 common
a.文件类型:Linux文件一共有七种类型,分别是:- 普通文件、d 目录文件、b 块设备、c 字符设备、l 符号链接文件、p 管道文件pipe、s 套接字文件sock
b.所有者权限: 对于目录来说,内容为文件夹中的文件名列表 :r:可读取文件名列表
w:可新建,删除,重命名文件名
x:有进入文件夹的权限,若要执行文件夹的w权限,必须要先有进入文件夹的权限,所以要使用w权限,必须要有x权限
对于文件来说,内容为文件内容本身:r:可读取文件内容
w:可修改文件内容
x:可执行文件
权限可以用数字表示:r: 4
w:2
x: 1 例如 764 表示 rwxrw-r--
文件还有3种特殊权限 ,也可以用数字表示suid:4 s
sgid:2 s
sticky:1 t
suid:当对于一个可执行的二进制文件作用了suid之后,任何人在执行该文件时,临时拥有其所有人的权限,可设置改权限
[root@localhost ~]# vim cyn.txt (当执行这个脚本的时候该用户会临时有文件所有者的权限,由于过程比较繁杂,请自行测试,欢迎留言讨论) #/bin/bash echo hello,my name is cyn [root@localhost ~]# chmod +x cyn.txt [root@localhost ~]# ./cyn.txt hello,my name is cyn. [root@localhost ~]# chmod u+s cyn.txt [root@localhost ~]# ll total 4 -rwsr-xr-x. 1 root root 38 Jul 21 17:29 cyn.txt
sgid:-当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限,可设置改权限
[root@localhost ~]# chmod g+s cyn.txt [root@localhost ~]# ll total 4 -rwsr-sr-x. 1 root root 38 Jul 21 17:29 cyn.txt(当执行该脚本的时候,会临时有该文件所属组的权限,可以自行测试,欢迎留言讨论)
-当对于一个目录作用了sgid权限之后,任何人在该目录下所创建的文件的所属组,均与该目录的所属组相同。比如A用户要创建一个文件,这个文件会属于A用户所在的 A组,但是A用户想把这个文件创建之后使其所属组继承与B目录的所属组,这个时侯B目录(所属组B组)设置 sgid权限的话,A用户在B目录下面创建文件,文件会自动属于B组,设 置 方法与上面二进制文件一样
sticky:对于一个目录作用了sticky权限,该目录下的文件仅其所属人和目录的所属人及root可以删除,比如在一个共享组里任何人可以上传文件,万一有人误操作把其他的人文件 删了,这个时候为了防止这种情况发生就可以设置sticky权限。
[root@localhost ~]# ls /tmp drwxrwxrwt 6 root root 4096 Jul 21 17:29 /tmp
c.用户组权限: 同所有者权限
d.其他用户权限: 不是文件所有者,也不属于文件所属用户组的用户,称为其他用户,其他用户权限若为-,表示没有相应的权限
e.特殊权限 :acl权限
[leonard@localhost ~]$ ls -l -rw-rw---- 1 cyn root 6 Jul 21 17:29 test.txt
在这里说明了对于test.txt这个文件cyn用户拥有rw-权限。所有属于root组的用户拥有rw-权限. 其他任何用户对于文件没有任何的权限,如果我们现在希望john这个用户也可以对 test.txt 文件进行读写操作.,我自己大概会想到以下几种办法:
1). 给文件的other类别增加读和写的权限,这样由于john会被归为other类别,那么他也将拥有读写的权限。
2). 将john加入到root组。那么john会被归为group类别,那么他将拥有读写的权限。
3). 设置sudo, 使john能够以cyn的身份对test.txt进行操作,从而获得读写权限。
第一种做法的问题在于所有用户都将对test.txt拥有读写操作,显然这种做法不可取。
第二种做法的问题在于john被赋予了过多的权限.所有属于admin组的文件,john都可以拥有其等同的权限了。
第三种做法虽然可以达到只限定john拥有对test.txt文件的读写权限.但是需要对sudoers文件进行严格的格式控制. 而且当文件数量和用户很多的时候,这种方法就相当地不灵活了。
看来好像都没有一个很好的解决方案. 其实问题就出在Linux 文件权限里面,对于other的定义过于广泛,以至于很难把权限限定于一个不属于file owner和group的用户身上. 那 么 Access Control List (ACL)就是用来帮助我们解决这个问题的。
简单地来说ACL权限就是可以设置特定用户或者用户组对于一个文件/文件夹的操作权限。ACl权限判断顺序 owner > acl user > group > other
可以设置用户acl,也可以设置组acl权限。设置ACL setfacl ,查看ACL getfacl
[root@localhost ~]# mkdir -p /acltest/acl [root@localhost ~]# cd /acltest/ [root@localhost acltest]# ll total 0 drwxr-xr-x. 2 root root 6 Jul 21 20:03 acl [root@localhost acltest]# setfacl -Rm g:shuguo:rwx /acltest/ [root@localhost acltest]# getfacl /acltest/ getfacl: Removing leading '/' from absolute path names # file: acltest/ # owner: root # group: root user::rwx user:liubei:r-- group::r-x group:shuguo:rwx mask::rwx other::r-x [root@localhost acltest]# ll total 0 drwxrwxr-x+ 2 root root 6 Jul 21 20:03 acl
删除ACL,可以逐条删除setfacl -x,也可以一起删除setfacl -b
[root@localhost acltest]# setfacl -x u:liubei /acltest/ [root@localhost acltest]# getfacl /acltest/ getfacl: Removing leading '/' from absolute path names # file: acltest/ # owner: root # group: root user::rwx group::r-x group:shuguo:rwx mask::rwx other::r-x [root@localhost acltest]# setfacl -b /acltest/ [root@localhost acltest]# getfacl /acltest/ getfacl: Removing leading '/' from absolute path names # file: acltest/ # owner: root # group: root user::rwx group::r-x other::r-x
设置未来文件的权限 ,所谓未来就是你下一个将要创建的文件的ACL权限,查看的时候会以default显示。
[root@localhost acltest]# setfacl -Rm d:g:shuguo:rwx /acltest/ [root@localhost acltest]# getfacl /acltest/ getfacl: Removing leading '/' from absolute path names # file: acltest/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:group:shuguo:rwx default:mask::rwx default:other::r-x
f.连接数:目录的连接数最少为2,本身和 . ,若还有n个子目录,则连接数为2+n,文件的连接数最少为1,如果连接数为0,则文件或者目录不存在
g.所有者:一般为文件的创建者,谁创建了该文件,就成为该文件的所有者,可以修改该权限:
[root@localhost ~]# ll /app/house total 0 drwxrwx---. 2 root root 6 Jul 21 15:17 common [root@localhost ~]# chown liubei /app/house/common [root@localhost ~]# ll /app/house total 0 drwxrwx---. 2 liubei root 6 Jul 21 15:17 common
h.用户组:当某个用户创建了一个文件后,这个文件的所在用户组就是该用户所在的组,可以修改该权限:
[guanyu@localhost ~]$ getent group shuguo shuguo:x:1021:liubei,zhangfei,guanyu [guanyu@localhost ~]$ mkdir guanyu [guanyu@localhost ~]$ ll total 0 drwxr-xr-x. 2 guanyu shuguo 6 Jul 21 16:37 guanyu
i.文件容量:单位为B
j.修改日期:创建这个文件的时间
k.文件名:文件的文件名
2.文件属性操作
a.修改文件的属主:chown
用法:chown 用户名 文件/目录名
-R 递归同时修改目录下的子文件子目录
--reference file1 file2 将file1的owner设置给file2
chown owner.group 或 owner:group 文件名 可以同时修改文件的owner和group (仅root用户)
b.修改文件的group:chgrp
用法:chgrp 组名 文件/目录名
owner可以修改文件的属于组,但owner一定要属于目标组
-R 递归同时修改目录下的子文件子目录
--reference file1 file2 将file1的owner设置给file2
3.文件权限操作
a.改变文件或目录的权限:chmod
用法:chmod 权限 文件/目录名
-R 递归同时修改目录下的子文件子目录
修改一类用户的所有权限: 如u= g= o= ug= a= u=,g= (a=ugo 或=左边省略)
修改一类用户某位或某些位权限 u+ u- g+ g- o+ o- a+ a- + (+ 加入 - 除去 + 设置)
--reference file1 file2 将file1的owner设置给file2
标签:权限 user 读取 col 创建文件 gid 灵活 一起 所有者
原文地址:http://blog.51cto.com/13805636/2148150