Linux下文件的权限
一、Linux下查看文件属性
命令为:
[root@localhost ~]# ls -al结果:
ls是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件)。
total 224 dr-xr-x---. 27 root root 4096 Dec 16 20:31 . dr-xr-xr-x. 22 root root 4096 Dec 16 20:30 .. -rw-------. 1 root root 2688 Dec 15 12:23 anaconda-ks.cfg -rw-------. 1 root root 1678 Dec 16 20:29 .bash_history -rw-r--r--. 1 root root 18 May 20 2009 .bash_logout -rw-r--r--. 1 root root 176 May 20 2009 .bash_profile -rw-r--r--. 1 root root 176 Sep 22 2004 .bashrc drwxr-xr-x. 4 root root 4096 Dec 16 01:01 .cache drwxr-xr-x. 6 root root 4096 Dec 16 20:31 .config -rw-r--r--. 1 root root 100 Sep 22 2004 .cshrc drwx------. 3 root root 4096 Dec 15 20:55 .dbus -rw-------. 1 root root 16 Dec 15 20:55 .esd_auth drwx------. 4 root root 4096 Dec 16 20:31 .gconf drwx------. 2 root root 4096 Dec 16 22:32 .gconfd drwx------. 8 root root 4096 Dec 16 04:16 .gnome2 drwx------. 2 root root 4096 Dec 16 00:51 .gnome2_private drwxr-xr-x. 3 root root 4096 Dec 16 01:03 .gnote drwx------. 2 root root 4096 Dec 16 20:31 .gnupg drwxr-xr-x. 2 root root 4096 Dec 16 01:02 .gstreamer-0.10 -rw-r--r--. 1 root root 160 Dec 16 20:31 .gtk-bookmarks dr-x------. 2 root root 0 Dec 16 20:31 .gvfs -rw-------. 1 root root 2480 Dec 16 20:31 .ICEauthority -rw-r--r--. 1 root root 642 Dec 16 20:31 .imsettings.log -rw-r--r--. 1 root root 41364 Dec 15 12:23 install.log -rw-r--r--. 1 root root 9154 Dec 15 12:21 install.log.syslog -rw-------. 1 root root 35 Dec 16 02:07 .lesshst drwxr-xr-x. 3 root root 4096 Dec 15 20:55 .local drwxr-xr-x. 4 root root 4096 Dec 16 00:51 .mozilla drwxr-xr-x. 2 root root 4096 Dec 15 20:55 .nautilus drwx------. 2 root root 4096 Dec 15 20:55 .pulse -rw-------. 1 root root 256 Dec 15 20:55 .pulse-cookie -rw-------. 1 root root 6166 Dec 16 04:49 .recently-used.xbel drwx------. 2 root root 4096 Dec 15 21:00 .ssh -rw-r--r--. 1 root root 129 Dec 3 2004 .tcshrc drwx------. 3 root root 4096 Dec 16 04:34 .thumbnails lrwxrwxrwx. 1 root root 33 Dec 16 01:01 .xinputrc -> /etc/X11/xinit/xinput.d/ibus.conf drwxr-xr-x. 2 root root 4096 Dec 16 00:53 涓杞? drwxr-xr-x. 2 root root 4096 Dec 16 20:31 ? drwxr-xr-x. 2 root root 4096 Dec 16 20:31 彗 drwxr-xr-x. 2 root root 4096 Dec 16 20:31 骀。 drwxr-xr-x. 2 root root 4096 Dec 16 20:31 妗? drwxr-xr-x. 2 root root 4096 Dec 16 20:31 妯℃ drwxr-xr-x. 2 root root 4096 Dec 16 20:31 瑙棰 drwxr-xr-x. 2 root root 4096 Dec 16 20:31 槌涔[0m可以看到文件属性从左往右分为7列来显示:
比如:
drwxr-xr-x.【1】 4【2】 root【3】 root【4】 4096【5】 Dec 16 00:51【6】 .mozilla【7】上述7列分别代表的意思如下:
① 第一列代表这个文件的类型与权限(permission):
仔细看会发现这一列有10个字符:
比如:上述示例文件中的:
drwxr-xr-xI、第一个字符代表的是文件类型(目录或文件等),取值有如下几种:
- 当为[ d ]则是目录;
- 当为[ - ]则是文件;
- 若是[ l ]则表示为连结档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
- 第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行;
- 第二组为『同群组的权限』;
- 第三组为『其他非本群组的权限』。
答:
[-] [rwx] [r-x] [r--]1 为:代表这个文件名为目录或文件,本例中为文件(-);
1 234 567 890
234为:拥有者的权限,本例中为可读、可写、可执行(rwx);
567为:同群组用户权力,本例中为可读可执行(rx);
890为:其他用户权力,本例中为可读(r)
同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。
② 第二列表示有多少文件或文件夹连结到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个i-node!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码。
③ 第三列表示这个文件(或目录)的『拥有者账号』
④ 第四列表示这个文件的所属群组
⑤ 第五列为这个文件的容量大小,默认单位为bytes。
⑥ 第六列为这个文件的建档日期或者是最近的修改日期。
⑦ 第七列为这个文件的文件名
比较特殊的是:如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』。
例题:
假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
答:
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
|
二、 Linux下文件权限的重要性:
与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』上面的。
- 系统保护的功能:
举个简单的例子,在你的系统中,关于系统服务的文件通常只有root才能读写或者是执行,例如/etc/shadow这一个账号管理的文件,由于该文件记录了你系统中所有账号的数据, 因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取啊),只有root才能够来读取啰!所以该文件的权限就会成为[ -rw------- ]啰!
- 团队开发软件或数据共享的功能:
此外,如果你有一个软件开发团队,在你的团队中,你希望每个人都可以使用某一些目录下的文件, 而非你的团队的其他人则不予以开放呢?以上面的例子来说,testgroup的团队共有三个人,分别是test1, test2, test3,那么我就可以将团队所需的文件权限订为[ -rwxrwx--- ]来提供给testgroup的工作团队使用啰!
- 未将权限设定妥当的危害:
再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞啰! 例如本来只有root才能做的开关机、ADSL的拨接程序、新增或删除用户等等的指令,若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新启动啦!重新拨接啦!等等的!那么你的系统不就会常常莫名其妙的挂掉啰! 而且万一你的用户的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些root的工作!
可怕吧!因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的!千万注意啰!接下来我们来处理一下文件属性与权限的变更吧!
三、Linux下文件属性与权限的修改
我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性, 那么如何修改一个文件的属性与权限呢?又!有多少文件的权限我们可以修改呢? 其实一个文件的属性与权限有很多!我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:
- chgrp :改变文件所属群组
- chown :改变文件拥有者
- chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
改变一个文件的群组,使用 chgrp 命令 (即change group的缩写),不过要注意一点,要被改变的组名必须要在 /etc/group 文件内存在才可以,否则会显示错误。
例:
[root@localhost softwore]# ls -al total 134856 drwxr-xr-x. 2 root root 4096 Dec 16 20:16 . drwxr-xr-x. 16 root root 4096 Dec 16 20:41 .. -rw-r--r--. 1 root root 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm [root@localhost softwore]# chgrp elgin jdk-7u79-linux-x64.rpm [root@localhost softwore]# ls -al total 134856 drwxr-xr-x. 2 root root 4096 Dec 16 20:16 . drwxr-xr-x. 16 root root 4096 Dec 16 20:41 .. -rw-r--r--. 1 root elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm
对于 softwore文件夹下的 jdk-7u79-linux-x64.rpm 文件
开始他的文件属性中,群组为 root ,使用chgrp 命令之后 ,群组变为了 elgin
② 改变文件拥有者: chown 命令
使用此命令,需要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有记录的用户名称才能改变。
例:[root@localhost softwore]# chown elgin jdk-7u79-linux-x64.rpm [root@localhost softwore]# ls -al total 134856 drwxr-xr-x. 2 root root 4096 Dec 16 20:16 . drwxr-xr-x. 16 root root 4096 Dec 16 20:41 .. -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm使用此命令后,上述文件的拥有者 变为了 elgin
注意:如果要改变整个目录的群组或者拥有者,可以在change命令后面加上 -R 作为参数(表示进行递归的变更) ,如: chgrp -R elgin softwore
③ 改变文件权限: chmod命令
文件权限的改变使用的是chmod这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。下面分别进行说明:
A 、数字类型改变文件权限
- Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
w:2
x:1owner = rwx = 4+2+1 = 7
所以等一下我们设定权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:chmod 770 filename;
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
[root@localhost softwore]# ls -al *.rpm -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm [root@localhost softwore]# chmod 777 *.rpm [root@localhost softwore]# ls -al *.rpm -rwxrwxrwx. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm [root@localhost softwore]# chmod 644 *.rpm [root@localhost softwore]# ls -al *.rpm -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm<span style="color:#ff0000;"> </span>将jdk的文件权限修改为 777 ,即 -rwxrwxrwx 再修改回原来的权限644 ,即 -rw-r--r--
B、符号类型改变文件权限
- 还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外,
a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!也就是可以使用底下的方式来看:
chmod u
g
o
a+(加入)
-(除去)
=(设定)r
w
x文件或目录
[root@localhost softwore]# chmod ugo=rwx *.rpm [root@localhost softwore]# ls -al total 134856 drwxr-xr-x. 2 root elgin 4096 Dec 16 20:16 . drwxr-xr-x. 16 root root 4096 Dec 16 20:41 .. -rwxrwxrwx. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm [root@localhost softwore]# chmod u=rw-,g=r--,o=r-- *.rpm [root@localhost softwore]# ls -al total 134856 drwxr-xr-x. 2 root elgin 4096 Dec 16 20:16 . drwxr-xr-x. 16 root root 4096 Dec 16 20:41 .. -rw-r--r--. 1 elgin elgin 138082565 Dec 16 20:08 jdk-7u79-linux-x64.rpm同样,将jdk文件的权限修改为 -rwxrwxrwx ,再修改回原来的权限 -rw-r--r--
四、权限对于文件和目录的意义:
① 权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
- r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
- x (execute):该文件具有可以被系统执行的权限。
那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!
至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限,
但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系喔!因为文件记录的是实际的数据嘛!
② 权限对目录的重要性
文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
- r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
- w (modify contents of directory):
这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
- 建立新的文件与目录;
- 删除已经存在的文件与目录(不论该文件的权限为何!)
- 将已存在的文件或目录进行更名;
- 搬移该目录内的文件、目录位置。
总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!
- x (access directory):
目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)啰!