Linux文件权限
安全性是linux的一大特点,Linux是一个多用户,多任务的环境.
在Linux中,有三种访问身份 : owner,group,others.
其中权限又有3种类别 : read,write,execute(执行)
这里引入用户和用户组的两个概念,用户简单地指单个成员.
用户组,顾名思义由多个相关性的用户组成.鸟哥解释说,比如你在同一个系统搞团队开发的时候,假设有组A,组B,每组有自己的不同成员,一般来说同组组员之间可以相互查看修改报告,而不同组的组员则不可以查看其它组的报告,如此组A,组B可称为两个用户组.
当然,继续细分的话用户和用户之间(即使处于同一个用户组)也可以设置不同的权限.
有趣的是,用户也可以属于多个用户组.
-Linux文件属性:
我们输入命令 ls -al可以查看文件信息(-al 表示列出所有文件详细权限与属性,隐藏文件则其文件名第一个字符为“.”,如.cache,.config)
其中 第一位表示文件类型:
d 指目录文件 如上图的 Desktop
- 指文件 如.bash_history
-权限:
第2-10位分别表示,文件所有者,同组用户,其他用户组 的权限.
rwx r-x rw-
则说明
用户 可以 读 写 执行
用户组 可以读 - 执行,
其他 可以读 写 -
如上图,
第一个dh 表示文件所有者帐号,
第二个是dh指所属用户组,
第五列(如Documents的 4096)表示这个文件容量大小,默认单位B.
第六列则为创建日期或者最近修改日期.
- 改变文件属性权限
chgrp: 改变文件所属用户组.首先,用户组肯定必须存在于/etc/group ,比如文件 a.log 原本属于用户组A,现在改为属于用户组B
修改命令语法为: chgrp B a.log
chown:改变文件所有者.语法同上方类似, chown User1 A.log ,另外一点就是如果更改的文件是一个目录,可以在命令间 插一个 -R ,表示递归(Recursive)持续更改,连同子目录下所有文件一起改变.
如:chown -R User1 A 表示把目录A及其包含子目录和文件所属用户都改为User1
chmod:改变文件权限.改变权限的指令相对复杂一点,一般有两种:
1.数字类型.在linux中我们约定俗成可以认为,用数字代表权限的话,r:4,w:2,x:1.
所以每个文件的权限数字都代表唯一的组合,举个例子,
rwx = 4+2+1 =7;
r-x = 4+0+1 =5;
rw- = 4+2+0 =6;
因此我们如果输入:chmod 760 .bash
表示 .bash 在用户的权限是rwx=7,用户组的权限是rw-=6,其他用户组权限是- - -=0.
2.符号类型.
用小写字母表示不同身份,u:user g:group o:others 值得注意的是还引入了一个 a:表示all,以上三种同时修改
=号表示设置,+表示添加, -表示除去
chmod u=rwx,go=rx .bash
表示user设置rwx,group,others设置为rx.其他照此类推.
chmod a+w .bash
表示all(三个身份都)加上write这个权限
符号类型的修改方法相对于数字类型安全点,因为它可以忽略那些原来未知的权限,比如某些文件你不知道它原来对不同身份的原本权限,你可以只修改你想要的身份.而数字修改需要对三个身份都指定
文件默认权限:
- umask:
当我们在linux新建一个文件或者目录的时候,它的默认权限是什么呢?
在终端输入umask 我们可以看到0002代表四个权限,第一个0指特殊权限,在此先忽略.
后三位的 0 0 2 分别指三个身份下,前面提到的权限数字要拿掉的权限.
我们先记住的是:文件666,目录777 就是umask是以文件rw- 目录rwx为前提去执行的.- 在目录中表示如下: (r-4 w-2 x-1)
- user 拿掉0 所以权限依旧是: r w x
- group拿掉0 权限依旧是: r w x
- others 拿掉2 权限是w: rwx - w(2) = r - x
- 在文件中表示如下:
- user 拿掉0 所以权限依旧是: r w -
- group拿掉0 权限依旧是: r w -
- others 拿掉2 权限是w: rw- - w(2) = r - -
因此 我们touch一个新文件和 mkdir 一个新目录,因此看到它的对应权限为:
umask的值我们是可以修改的 比如 umask 003 则表示新建时候把文件(666) ,目录(777) 三个身份对应移除 - - - - - - - w x
注意的是:我们不能直接用减法计算权限,比如如果你修改默认为umask 003,如果是减法文件本身是666 - 003 = 663 错误就出现了.移除了3 结果不可能有3
默认情况,出于安全考虑root身份的umask移除的权限比较多 为022
一般用户是002,保留了用户组的写入权限
参考:《鸟哥的Linux私房菜》 p180