鸟哥的 Linux 私房菜——第五章 Linux 的文件权限与目录配置

一、使用者与群组

  1. 文件拥有者
    由于Linux是个多用户多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生。如果把该文件设置成“只有文件拥有者,就是我,才能看与修改这个文件的内容”, 那么即使其他人知道你有这个文件,不过由于你有设置适当的权限, 所以其他人自然也就无法知道该文件的内容。
  2. 群组内含有若干个 使用者,群组内使用者可共享文件,也可设置私密文件,不同群组间不可看到对方的文件。同时,每个帐号都可以有多个群组的支持。
  3. 其他人
    在Linux里面,任何一个文件都具有“User, Group及Others”三种身份的个别权限

二、Linux 文件权限概念

  1. Linux文件属性
    ls是一个查看文件的指令
[dmtsai@study ~]$ su - # 先来切换一下身份看看
Password:
Last login: Tue Jun 2 19:32:31 CST 2015 on tty2
[root@study ~]# ls -al
total 48
dr-xr-x---. 5 root root 4096 May 29 16:08 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 927 Jun 2 11:27 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 3 root root 17 May 6 00:14 .config <=范例说明处
drwx------. 3 root root 24 May 4 17:59 .dbus
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg <=范例说明处
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 权限 ][链接][拥有者][群组][文件大小][ 修改日期 ] [ 文件名 ]

ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为“ . ”的文件)。

  • 第一栏代表这个文件的类型与权限(permission):

  • 第一个字符代表这个文件是“目录、文件或链接文件等等”:

  • 当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
    当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
    若是[ l ]则表示为链接文件(link file);
    若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
    若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设
    备)。

  • 接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个
    权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
    【如果other的权限中有r ,但是没有x的权限,那么others的使用者并不能进入此目录!】
    第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件
    的拥有者可以读写,但不可执行;
    第二组为“加入此群组之帐号的权限”;
    第三组为“非本人且没有加入本群组之其他帐号的权限”。

  • 第二栏表示有多少文件名链接到此节点(i-node):

  • 每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。 关于i-node的相关数据我们会在第七章谈到文件系统时再加强介绍的。

  • 第三栏表示这个文件(或目录)的“拥有者帐号”

  • 第四栏表示这个文件的所属群组

  • 在Linux系统下,你的帐号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1,class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如图5.2.2所示(-rwxrwx—), 则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。 但如果是不属于projecta的其他帐号,对于此文件就不具有任何权限了

  • 第五栏为这个文件的容量大小,默认单位为Bytes;

  • 第六栏为这个文件的创建日期或者是最近的修改日期

  • 第七栏为这个文件的文件名

  • 如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件

2.如何改变文件属性与权限

  • chgrp :改变文件所属群组
    注:要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!
[root@study ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录
都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing' <== 发生错误讯息啰~找不到这个群组名~
  • chown :改变文件拥有者
    使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。
[root@study ~]# chown [-R] 帐号名称 文件或目录
[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
范例:将 initial-setup-ks.cfg 的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将 initial-setup-ks.cfg 的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
  • chmod :改变文件的权限, SUID, SGID,SBIT等等的特性

权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
①数字类型改变文件权限
文件的权限字符为:“-
rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权
限,各权限的分数对照表如下:
r:4 > w:2 > x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权
限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= — = 0+0+0 = 0

[root@study ~]# chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

举例来说,如果要将.bashrc这个文件所有的权限都设置启用,那么就下达:

[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

②符号类型改变文件权限
基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以借由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x啰!也就是可以使用下面的方式来

| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |

来实作一下吧!假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读与执行的权限。 所以就是:

[root@study ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空白字符!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:

[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权
限,则:s

[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来喔!

+ 与 – 的状态下,只要是没有指定到的项目,则该权限“不会被变动”

你可能感兴趣的:(Linux私房菜)