Linux文件权限概念
用ls来显示文件的文件名和相关属性,-al表示列出所有文件的详细的权限和属性(包含隐藏文件):
ls -al
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
第一列表示文件类型和权限
第二列表示多少文件名链接到此结点
第三列表示这个文件的拥有者账号
第四列表示这个文件的所属用户组
第五列表示文件的容量大小,默认单位是字节Byte
第六列表示文件的创建日期或最近修改日期
最后一列是文件名
十位权限位
-rw-r--r--
第一代表这个文件是目录(d)、文件(-)或链接文件(l)等;
接下来以三个为一组,且均为rwx
的组合。r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute)。这三个权限的位置不会改变,如果没有权限就会出现-
。
第一组为文件拥有者(user)具备的权限,第二组是加入此用户组(group)的账号的权限,第三组是非本人且没有加入用户组的其他账号的权限(others)。
【例】:
假设test1、test2、test3同属于testgroup这个用户组,如果有下面两个文件,请说明两个文件的拥有者和其相关的权限是什么?
-rw-r--r--. 1 root root 238 Jun 18 19:22 test.txt
-rwxr-xr--. 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答
- test.txt的拥有者是root,所属用户组是root,权限方面只有root能读写此文件,其他人子还能读此文件
- ping_tsai的拥有者是test1,所属用户组是testgroup。test1对ping_tsai可读可写可执行。同组的test2和test3只能读和执行,不能写
- 不在testgroup的其他人只能读,不能写也不能执行
修改文件属性和权限
chgrp
使用chgrp修改文件所属用户组。但是被修改的组名必须要在/etc/group文件中存在才行。
上面的initial-setup-ks.cfg,用户组和用户都是root,现在修改一下用户组,将用户组改为users(这里假设/etc/group中有一个名为users的用户组)
//chgrp 用户组 文件/目录名
//chgrp -R 用户组 文件/目录名 使用-R会将子目录下所有文件、目录的用户组全更改
chgrp users initial-setup-ks.cfg
ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
chown
使用chown修改文件拥有者。同样,用户必须是已经存在在系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能修改。
chown可以顺便直接修改用户组名称。
//chown 账户名 文件/目录
//chown -R 账户名 文件/目录
chown bin initial-setup-ks.cfg
ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
//再将用户组和拥有者改回root
//chown 账户名:用户组名 文件/目录
//chown -R 账户名:用户组名 文件/目录
chown root:root initial-setup-ks.cfg
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
chmod
使用chmod来修改文件的权限。可以分别使用数组或者符号来修改
使用数字
使用数字来代表各个权限。
r:4
w:2
x:1
每种身份各自的三个权限数字需要累加,比如[-rwxrwx---]
数字是:
owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
这个文件的权限数字就是770,然后使用chmod来修改权限:
// chmod xyz 文件/目录
// chmod -R xyz 文件/目录
//xyz就是权限数字
ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
chmod 777 .bashrc
ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
如果要设置成-rwxr--xr--
,权限数字就是[4+2+1][4+0+1][4+0+0] = 754
,再执行chmod 754 文件名
即可。
可以用二进制理解这个做法,rwx就是三位二进制数,r–就是100,即4;-w-就是010,即2;–x就是001,即1;而rwx就是111,即7。
使用符号
九个权限分别是user、group、others这三种,我们就可以借由u、g、o来代表三种身份的权限。还有一种a代表全部的身份。
//假设设置一个文件的权限是【-rwxr-xr-x】,即u有rwx权限,g和o有rx权限
chmod u=rwx,go=rx .bashrc
ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
//给每个人均可写入的权限
chmod a+w .bashrc
ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
//去掉全部人的可执行权限
chmod a-x .bashrc
la -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
目录与文件权限意义
目录的x执行权限代表用户能否进入该目录成为工作目录的用途。如果在某目录下不具有x的权限,那就无法切换到该目录,也就无法执行该目录下的任何指令,即使有该目录的rw
权限。所以要开放目录给任何人浏览,至少也要给出rx权限。
假设我对一个目录有rwx
的权限,但在这个目录下有个文件,我对他的权限是---
,我是可以删除它的,因为我在这个目录下有rwx
权限。就好像我家里有个不能打开的文件袋,打不开,也看不到里面的东西。但是我可以把它扔进垃圾桶。