Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux的文件权限 #30

Open
dwqs opened this issue Aug 5, 2016 · 3 comments
Open

Linux的文件权限 #30

dwqs opened this issue Aug 5, 2016 · 3 comments

Comments

@dwqs
Copy link
Owner

dwqs commented Aug 5, 2016

Linux一般将文件可存取访问的身份分为3个类别:owner、group、others,且3种身份各有read、write、execute等权限。

一、用户和用户组

1、文件所有者

由于Linux是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。

例如某个MM给你发了一封Email情书,你将情书转为文件之后存档在自己的主文件夹中。为了不让别人看到情书的内容,你就能利用所有者的身份去设置文件的适当权限,这样,即使你的情敌想偷看你的情书内容也是做不到的。

2、用户组

用户组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。例如主机上有A、B两个团体,A中有a1,a2,a3三个成员,B中有b1,b2两个成员,这两个团体要共同完成一份报告F。由于设置了适当的权限,A、B团体中的成员都能互相修改对方的数据,但是团体C的成员则不能修改F的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其它成员也读取不了文件数据。在Linux中,每个账户支持多个用户组。如用户ab1即可属于A用户组,也能属于B用户组。

3、其他人

这个是个相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明,那么,大明一家就是一个用户组,这个组有大明、二明、小明三个成员;另外有个人交张三,和他们三没有关系,那么这个张三就是其他人了。

同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。

4、超级用户

在Linux中,还有一个神一样存在的用户,就是root。之所以称为超级用户,因为在所有用户中它拥有最大的权限 ,也管理着普通用户。

5、相关文件

在Linux系统中,默认的系统账户和普通账户信息记录在/etc/passwd文件中,个人密码在/etc/shadow文件下,用户组名称记录在/etc/group,所以,这三个文件是不能随便删的。

二、Linux文件权限的概念

要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在Linux中,ls命令常用来查看文件的属性,ls是list的缩写,用于显示文件的文件名和相关属性。

[root@www ~]# ls -al
total 45
drwxr-x--- 4 root root 4096 Sep 8 14:06
-rw-r--r-- 1 root root 43043 Sep 4 18:34 test.txt

含义如下:
image

第一个字符[d]代表该文件是一个目录,[-]代表该文件是一个普通文件,test.txt是文件名,[l]是连接文件,[b]是设备文件等。

如前文所说,Linux中存在用户、用户组和其他人概念,各自有不同的权限,对于一个文件来说,其权限具体分配如下:
image

权限分配中,均是rwx的三个参数组合,且位置顺序不会变化。没有对应权限就用 – 代替。

三、改变文件属性和权限

Linux中有几个常用于用户组、所有者和各种身份的权限的修改的命令:

chgrp:改变文件所属用户组
chown:改变文件所有者
chmod:改变文件权限

1、改变所属用户组

直接用chgrp就行,它是change group是缩写。不过,要被改变的组名必须在/etc/group文件内存在才行,否则出错。

[root@www ~]# chgrp [-R] 文件名/目录名
—R:进行递归,可修改子目录下的文件

2、改变文件所有者

change owner 的缩写是chown,用于改变所有者。不过,用户名必须存在于/etc/passwd文件内。

[root@www ~]# chown [-R] 账号名称 文件名/目录名
[root@www ~]# chown [-R] 账号名称:组名 文件名/目录名
—R:进行递归,可修改子目录下的文件

3、改变权限

文件权限的改变一般是用chmod命令,权限的设置方法有两种:

3.1 数字类型改变文件权限

Linux的基本权限有9个,即owner、group、others三种身份各有自己的r/w/x权限,三个为一组。各权限对应的数字是:r—>4,w—>2,x—>1.

每种身份(owner、group、others)的三个权限(r/w/x)分数是累加的,如-rw-r–r–转换数字是:

owner=rw-=4+2+0=6   group=r–=4+0+0=4  others=r–=4+0+0=4

所以该文件的权限数字是644

[root@www ~]# chmod [-R] xyz 文件名/目录名

xyz:数字类型的权限属性,为rwx属性数值的相加
—R:进行递归,可修改子目录下的文件

##修改test.txt的权限为777
[root@www ~]# chmod 777 test.txt
3.2 符号类型改变文件权限

这种方式就是用u,g,o来代表三种身份的权限,此外a代表all,即全部身份(owner、group、others)

##修改test.txt的权限为rwxr-xr-x
[root@www ~]# chmod u=rwx,go=rx test.txt
##去掉test.txt所有身份的x权限
[root@www ~]# chmod a-x test.txt
##再添加test.txt所有身份的x权限
[root@www ~]# chmod a+x test.txt

四、目录和文件的权限意义

1、权限对文件的重要性

  • r(read):读取文件内容,如读取文本的文字内容等
  • w(write):可以编辑、新增、修改文件的内容(但不含删除该文件)
  • x(execute):具有被系统执行的权限。注意:在Linux中,文件是否能否被执行是由文件是否具有x权限决定的,与文件名的扩展名无关。

2、权限对目录的重要性

  • r(read contents in directory):具有读取目录结构列表的权限,与用户能否进入该目录无关。
  • w(modify contents of directory):具有更改该目录结构列表的权限,包括新建文件或目录、删除文件和目录(不论该文件权限如何)、对文件或目录进行重命名、转移文件或目录位置。
  • x(execute directory):具有进入该目录的权限,使该目录成为工作目录,即目前所在的目录。如果没有x权限,即使有r权限,也无法切换到该目录执行该目录下的命令。
@Jzhuonan
Copy link

赞一个

@YaEvan
Copy link

YaEvan commented Apr 19, 2017

简单清楚!!!

@KobeAndLebron
Copy link

问个问题: 对于目录来说, 单纯的x或者w是没有多大作用的? 因为不能读取目录结构列表.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants