Linux 的档案权限与目录配置
Linux文件属性:
先来介绍一个指令ls是『list』的意思,重点在显示档案的文件名与相关属性。而选项-al则表示列出所有的档案详细的权限与属性 (包括隐藏文件,就是文件名第一个字符为 . 的档案)如果你输入上述指令后,应该有上列的几个东西,先解释一下面七个字段的意义:
1.第一栏代表这个档案的类型与权限(permission):
这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:
第一个属性表示文件的类型,比如“目录、文件或连接文件等”
[d]则是目录。
[-]是文件。
[l]是连接文件。
[b]为设备文件中可供存储的接口设备。
[c]为设备文件中的串行端口设备,如素表键盘。
接下来的属性中,3个为一组,且都是rwx三个参数的组合,其中[r]表示可读(read),[w]表示可写(write),[x]表示可执行(excute)。
第一组为“拥有者的权限”
第二组为“同用户组的权限”
第三种为“其他非本用户组的权限”
没有该权限就变成了减号(-)
还要特别注意的是x权限,如果文件名是一个目录时,例如.ssh目录:
drwx------ 3 root root 4096 Jun 25 08:36 .ssh
可以看出这是一个目录,而且只有root可以读写和执行。若为下面的样式时,看一看非root得其他人是否可以进入这个目录?
drwx---r-- 3 root root 4096 Jun 25 08:36 .ssh
貌似可以,因为存在可读权限[r]。但是,正确的答案是:非root账户的其他用户均不可以进入.ssh目录。因为x与目录的关系相当重要,如果在该目录下不能执行任何命令的话,那么自然也就无法进入了。因此,要特别注意,如果想对他人开放某个目录的话,一定要记住开放该目录的x属性。
2 第二列表示连接占用的节点:这与连接文件有关。如果是目录的话,那么就与该目录下还有多少目录有关。
3 第三列表示这个文件(目录)的“拥有者”
4 第四列表示拥有者的用户组:在Linux中,ID即是您的身份,还可以附属在一个或多个用户组之下。
5 第五列为这个文件的大小
6 第六列为这个文件的创建日期或者是最近修改的日期
7 第七列为这个文件的文件名:如果前面有“.”,表示这个文件为隐藏文件。不过如果在ls 的时候输入参数 –al可以把隐藏文件一起列出来。
Linux文件属性的重要性:Linux中每一个文件都多加了很多的属性,尤其是用户组的概念,最大的用途是“安全性”。在修改Linux文件与目录的属性之前一定要弄清楚,什么可以改变,什么是不可以改变的。
如何改变文件属性与权限
已经知道了文件权限对于一个系统的重要性了,也知道文件权限与用户和用户组的关系了,那么如何更改文件的权限呢。
chgrp:改变文件所属用户组
chown:改变文件拥有者
chmod:改变文件的属性、SUID,SGID, SBIT 等特性。
注意这几个命令都是需要用root身份来使用的
1 更改所属用户组,chgrp 是(change group的缩写):
[root@www ~]#chgrp [-R] dirname/filename …
选项与参数:
-R:进行递归的持续变更,也就似乎连同此目录下的所有档案、目录都变更成这个用户组。常常用在更改某一个目录的情况。
假如你是以root的身份登入Linux系统的,在你的家目录内有一个install.log的档案, 如何将该档案的群组改变一下呢?假如你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了
例子:[root@www ~]#chgrp users install.log
[root@www ~]#ls –l
-rw-r--r—1 root users 684985 Jun 25 08:59 install.log
[root@www ~]#chagrp testing install.log
Chgrp:invalid group name ‘testing’<<发生错误,找不到这个群组的名字
2 更改文件拥有者 chown (change owner的缩写)
直接用这个命令即可,和更改用户组的命令类似,所要变更的用户必须已经存在于系统中。也就是说必要要在/etc/passwd中有记录才行。Chown的用途很多,还可以直接修改用户组的名称。如果要将目录下的所有子目录或者文件同时更改文件拥有者的话,直接加上-R参数就可以了。
[root@www ~]#chown [-R] 账号名字 文件目录名字
[root@www ~]#chown [-R] 账号名字:用户组名称、文件或目录
参数:-R:进行递归的持续更改,即将同子目录下的所有文件、目录都更新为这个用户组。常常用在更改某一个目录的情况。
例子:[root@www ~]#chown bin install.log
[root@www ~]#ls -l
-rw-r--r—1 bin users 684985 Jun 25 08:59 install.log
[root@www ~]#chown root:root install.log
[root@www ~]#ls –l
-rw-r--r—1 root root 684985 Jun 25 08:59 install.log
知道了如何改变文件的用户组与拥有者了,那么什么时候使用chown或chgrp呢?有的时候确实是需要更改文件的拥有者,常见的例子就是将文件复制给其他人。用简单的cp命令来进行说明:
[root@www ~]#cp 源文件 目的文件
例子:把.bashrc复制成.bashrc_test,并给bin这个人,可以这样:
[root@www ~]#cp .bashrc .bashrc_test
[root@www ~]#ls –al .bashrc*
-rw-r—r-- 1 root root 395 Jul 4 11:45 .bashrc
-rw-r—r-- 1 root root 395 Jul 13 11:45 .bashrc_test
可以上面可以看到.bashrc_test还是属于root所有,即使将文件给另外bin用户,他仍然无法修改(看看属性就知道了),这个时候就必须要修改文件的拥有者和用户组。
3 更改权限,chmod
有两种设置权限的方法,分别是数字和符号
3.1用数字修改文件权限
Linux文件的基本属性有9个,分别是owner/group/others组的read/write/execute属性;
可以用数字来表示各个属性,各个属性的对照表如下:
r:4
w:2
x:1
将同一个组的3个属性相加,例如当属性为[-rwxrwx---]则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
当设置属性时,该属性的数字就是770。更改属性的命令chmod可以这样:
[root@www ~]#chmod [-R] xyz文件或目录
参数:
xyz:就是刚提到的类型的权限属性,为rwx属性值的和。
-R:进行递归的持续更该,连同子目录下的所有文件、目录都更新为这个用户组。
如果要将.bashrc文件的所有属性都打开,执行下面的命令即可:
[root@www ~]# chmod 777 .bashrc
[root@www ~]#ls –al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
我们用vi编辑文字文件后,其属性通常是666(-rw-rw-r--),如果我们要将它变成可执行文件,并且不能让其他人修改此文件,那么就要将它改为755(-rwxr-xr-x)的属性,此时就得要下达:chmod 755 test.sh 的指令!
3.2符号类型改变文字
从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x啰!也就是可以使用底下的方式来看:
来实作一下吧!假如我们要设定一个档案的权限成为-rwxr-xr-x时,基本上就是:
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读与执行的权限。
[root@www ~]# chmod u=rwx,go=rx .bashrc
注意u=rwx,go=rx这一段文件之间并没有空格。
如果是不知道原文的文件属性,但是想增加每个人都可以写入的权限就用 a+w
[root@www ~]# chmod a+w .bashrc
[root@www ~]#ls –al .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
如果想要去掉某个属性,而不更改其他属性,例如要去掉所有人的x属性 就用a-x,
+与-的状态下,只要是没有指定到的项目,该属性“不会变动”
目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是cd (change directory)!