热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux文件权限于目录配置

用户与用户组我們以王三毛為例,王三毛這個『檔案』的擁有者為王三毛,他屬於王大毛這個群組,而張小豬相對於王三毛,則只是一個『其

用户与用户组

https://img.php1.cn/3cd4a/1eebe/cd5/7494af3c1cda418d.webp

我們以王三毛為例,王三毛這個『檔案』的擁有者為王三毛,他屬於王大毛這個群組, 而張小豬相對於王三毛,則只是一個『其他人(others)』而已。

不過,這裡有個特殊的人物要來介紹的,那就是『萬能的天神』!這個天神具有無限的神力, 所以他可以到達任何他想要去的地方,呵呵!那個人在Linux系統中的身份代號是『 root 』啦!所以要小心喔!那個root可是『萬能的天神』喔!

無論如何,『使用者身份』,與該使用者所支援的『群組』概念,在Linux的世界裡面是相當的重要的, 他可以幫助你讓你的多工Linux環境變的更容易管理!更詳細的 『身份與群組』 設定,我們將在第十四章、帳號管理再進行解說。 底下我們將針對檔案系統與檔案權限來進行說明。

Linux用户身份与用户组记录文件

/etc/passwd :所有系统上的账号与一般身份用户

/etc/shadow:个人密码

/etc/group:所有组名

Linux 文件权限概念

ls是『list』的意思,重点在显示文件的文件名与相关属性。而选项『-al』则表示列出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件)。如上所示,在你第一次以root身份登入Linux时, 如果你输入上述指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:

文件属性的示意图

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

这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:(图2.1.1及图2.1.2内的权限并无关系)

文件的类型与权限之内容
图2.1.2、文件的类型与权限之内容

 

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

    • 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    • 当为[ - ]则是文件,例如上表档名为『install.log』那一行;
    • 若是[ l ]则表示为连结档(link file);
    • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
  • 接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

    • 第一组为『文件拥有者的权限』,以『install.log』那个文件为例, 该文件的拥有者可以读写,但不可执行;
    • 第二组为『同群组的权限』;
    • 第三组为『其他非本群组的权限』。

 

例题:
若有一个文件的类型与权限数据为『-rwxr-xr--』,请说明其意义为何?
答:
先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:
[-][rwx][r-x][r--]
 1  234  567  890
 1 为:代表这个文件名为目录或文件,本例中为文件(-);
234为:拥有者的权限,本例中为可读、可写、可执行(rwx);
567为:同群组用户权力,本例中为可读可执行(rx);
890为:其他用户权力,本例中为可读(r)


同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。

 

另外,目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。 由于目录与文件的权限意义非常的重要,所以鸟哥将他独立到2.3节目录与文件之权限意义中再来谈。

 

  • Linux文件权限的重要性:

与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』上面的。

  • 系统保护的功能:
    举个简单的例子,在你的系统中,关于系统服务的文件通常只有root才能读写或者是执行,例如/etc/shadow这一个账号管理的文件,由于该文件记录了你系统中所有账号的数据, 因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取啊),只有root才能够来读取啰!所以该文件的权限就会成为[ -rw------- ]啰!

  • 团队开发软件或数据共享的功能:
    此外,如果你有一个软件开发团队,在你的团队中,你希望每个人都可以使用某一些目录下的文件, 而非你的团队的其他人则不予以开放呢?以上面的例子来说,testgroup的团队共有三个人,分别是test1, test2, test3,那么我就可以将团队所需的文件权限订为[ -rwxrwx--- ]来提供给testgroup的工作团队使用啰!

  • 未将权限设定妥当的危害:
    再举个例子来说,如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞啰! 例如本来只有root才能做的开关机、ADSL的拨接程序、新增或删除用户等等的指令,若被你改成任何人都可以执行的话, 那么如果使用者不小心给你重新启动啦!重新拨接啦!等等的!那么你的系统不就会常常莫名其妙的挂掉啰! 而且万一你的用户的密码被其他不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些root的工作!

可怕吧!因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的!千万注意啰!接下来我们来处理一下文件属性与权限的变更吧!

 

如何改变文件属性与权限

我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性, 那么如何修改一个文件的属性与权限呢?又!有多少文件的权限我们可以修改呢? 其实一个文件的属性与权限有很多!我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:

    • chgrp :改变文件所属群组
    • chown :改变文件拥有者
    • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

 

改变所属群组, chgrp

改变一个文件的群组真是很简单的,直接以chgrp来改变即可,咦!这个指令就是change group的缩写嘛!这样就很好记了吧! ^_^。不过,请记得,要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误!

假设你是以root的身份登入Linux系统的,那么在你的家目录内有一个install.log的文件, 如何将该文件的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?

[root@www ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:

[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log
[root@www ~]# chgrp testing install.log
chgrp: invalid group name &#96;testing&#39; <&#61;&#61; 发生错误讯息啰&#xff5e;找不到这个群组名&#xff5e;

发现了吗&#xff1f;文件的群组被改成users了&#xff0c;但是要改成testing的时候&#xff0c; 就会发生错误&#xff5e;注意喔&#xff01;发生错误讯息还是要努力的查一查错误讯息的内容才好&#xff01; 将他英文翻译成为中文&#xff0c;就知道问题出在哪里了。

 

改变文件拥有者, chown

如何改变一个文件的拥有者呢&#xff1f;很简单呀&#xff01;既然改变群组是change group&#xff0c;那么改变拥有者就是change owner啰&#xff01;BINGO&#xff01;那就是chown这个指令的用途&#xff0c;要注意的是&#xff0c; 用户必须是已经存在系统中的账号&#xff0c;也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。

chown的用途还满多的&#xff0c;他还可以顺便直接修改群组的名称呢&#xff01;此外&#xff0c;如果要连目录下的所有次目录或文件同时更改文件拥有者的话&#xff0c;直接加上 -R 的选项即可&#xff01;我们来看看语法与范例&#xff1a;

[root&#64;www ~]# chown [-R] 账号名称 文件或目录
[root&#64;www ~]# chown [-R] 账号名称:组名 文件或目录
选项与参数&#xff1a;
-R : 进行递归(recursive)的持续变更&#xff0c;亦即连同次目录下的所有文件都变更
范例&#xff1a;将install.log的拥有者改为bin这个账号&#xff1a;
[root&#64;www ~]# chown bin install.log
[root&#64;www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log范例&#xff1a;将install.log的拥有者与群组改回为root&#xff1a;
[root&#64;www ~]# chown root:root install.log
[root&#64;www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

Tips:
事实上&#xff0c;chown也可以使用『chown user.group file』&#xff0c;亦即在拥有者与群组间加上小数点『.』也行&#xff01; 不过很多朋友设定账号时&#xff0c;喜欢在账号当中加入小数点(例如vbird.tsai这样的账号格式)&#xff0c;这就会造成系统的误判了&#xff01; 所以我们比较建议使用冒号『:』来隔开拥有者与群组啦&#xff01;此外&#xff0c;chown也能单纯的修改所属群组呢&#xff01; 例如『chown .sshd install.log』就是修改群组&#xff5e;看到了吗&#xff1f;就是那个小数点的用途&#xff01;
鸟哥的图示

知道如何改变文件的群组与拥有者了&#xff0c;那么什么时候要使用chown或chgrp呢&#xff1f;或许你会觉得奇怪吧&#xff1f; 是的&#xff0c;确实有时候需要变更文件的拥有者的&#xff0c;最常见的例子就是在复制文件给你之外的其他人时&#xff0c; 我们使用最简单的cp指令来说明好了&#xff1a;

[root&#64;www ~]# cp 来源文件 目标文件

假设你今天要将.bashrc这个文件拷贝成为.bashrc_test档名&#xff0c;且是要给bin这个人&#xff0c;你可以这样做&#xff1a;

[root&#64;www ~]# cp .bashrc .bashrc_test
[root&#64;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:31 .bashrc_test <&#61;&#61;新文件的属性没变

由于复制行为(cp)会复制执行者的属性与权限&#xff0c;所以&#xff01;怎么办&#xff1f;.bashrc_test还是属于root所拥有&#xff0c; 如此一来&#xff0c;即使你将文件拿给bin这个使用者了&#xff0c;那他仍然无法修改的(看属性/权限就知道了吧)&#xff0c; 所以你就必须要将这个文件的拥有者与群组修改一下啰&#xff01;知道如何修改了吧&#xff1f;

 

改变权限, chmod

文件权限的改变使用的是chmod这个指令&#xff0c;但是&#xff0c;权限的设定方法有两种&#xff0c; 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈&#xff1a;

  • 数字类型改变文件权限

    Linux文件的基本权限就有九个&#xff0c;分别是owner/group/others三种身份各有自己的read/write/execute权限&#xff0c; 先复习一下刚刚上面提到的数据&#xff1a;文件的权限字符为&#xff1a;『-rwxrwxrwx』&#xff0c; 这九个权限是三个三个一组的&#xff01;其中&#xff0c;我们可以使用数字来代表各个权限&#xff0c;各权限的分数对照表如下&#xff1a;
    r:4
    w:2
    x:1
    每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的&#xff0c;例如当权限为&#xff1a; [-rwxrwx---] 分数则是&#xff1a;
    owner &#61; rwx &#61; 4&#43;2&#43;1 &#61; 7
    group &#61; rwx &#61; 4&#43;2&#43;1 &#61; 7
    others&#61; --- &#61; 0&#43;0&#43;0 &#61; 0
    所以等一下我们设定权限的变更时&#xff0c;该文件的权限数字就是770啦&#xff01;变更权限的指令chmod的语法是这样的&#xff1a;

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

    举例来说&#xff0c;如果要将.bashrc这个文件所有的权限都设定启用&#xff0c;那么就下达&#xff1a;

    [root&#64;www ~]# ls -al .bashrc
    -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc
    [root&#64;www ~]# chmod 777 .bashrc
    [root&#64;www ~]# ls -al .bashrc
    -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

    那如果要将权限变成『 -rwxr-xr-- 』呢&#xff1f;那么权限的分数就成为 [4&#43;2&#43;1][4&#43;0&#43;1][4&#43;0&#43;0]&#61;754 啰&#xff01;所以你需要下达『 chmod 754 filename』。 另外&#xff0c;在实际的系统运作中最常发生的一个问题就是&#xff0c;常常我们以vim编辑一个shell的文字批处理文件后&#xff0c;他的权限通常是 -rw-rw-r-- 也就是664&#xff0c; 如果要将该文件变成可执行文件&#xff0c;并且不要让其他人修改此一文件的话&#xff0c; 那么就需要-rwxr-xr-x这样的权限&#xff0c;此时就得要下达&#xff1a;『 chmod 755 test.sh 』的指令啰&#xff01;

    另外&#xff0c;如果有些文件你不希望被其他人看到&#xff0c;那么应该将文件的权限设定为例如&#xff1a;『-rwxr-----』&#xff0c;那就下达『 chmod 740 filename 』吧&#xff01;

    例题&#xff1a;
    将刚刚你的.bashrc这个文件的权限修改回-rw-r--r--的情况吧&#xff01;
    答&#xff1a;
    -rw-r--r--的分数是644&#xff0c;所以指令为&#xff1a;
    chmod 644 .bashrc

  • 符号类型改变文件权限

    还有一个改变权限的方法呦&#xff01;从之前的介绍中我们可以发现&#xff0c;基本上就九个权限分别是(1)user (2)group (3)others三种身份啦&#xff01;那么我们就可以藉由u, g, o来代表三种身份的权限&#xff01;此外&#xff0c; a 则代表 all 亦即全部的身份&#xff01;那么读写的权限就可以写成r, w, x&#xff01;也就是可以使用底下的方式来看&#xff1a;

    chmodu
    g
    o
    a
    &#43;(加入)
    -(除去)
    &#61;(设定)
    r
    w
    x
    文件或目录

    来实作一下吧&#xff01;假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时&#xff0c;基本上就是&#xff1a;

    • user (u)&#xff1a;具有可读、可写、可执行的权限&#xff1b;
    • group 与 others (g/o)&#xff1a;具有可读与执行的权限。

    所以就是&#xff1a;

    [root&#64;www ~]# chmod u&#61;rwx,go&#61;rx .bashrc
    # 注意喔&#xff01;那个 u&#61;rwx,go&#61;rx 是连在一起的&#xff0c;中间并没有任何空格&#xff01;
    [root&#64;www ~]# ls -al .bashrc
    -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc

    那么假如是『 -rwxr-xr-- 』这样的权限呢&#xff1f;可以使用『 chmod u&#61;rwx,g&#61;rx,o&#61;r filename 』来设定。此外&#xff0c;如果我不知道原先的文件属性&#xff0c;而我只想要增加.bashrc这个文件的每个人均可写入的权限&#xff0c; 那么我就可以使用&#xff1a;

    [root&#64;www ~]# ls -al .bashrc
    -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
    [root&#64;www ~]# chmod a&#43;w .bashrc
    [root&#64;www ~]# ls -al .bashrc
    -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

    而如果是要将权限去掉而不更动其他已存在的权限呢&#xff1f;例如要拿掉全部人的可执行权限&#xff0c;则&#xff1a;

    [root&#64;www ~]# chmod a-x .bashrc
    [root&#64;www ~]# ls -al .bashrc
    -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc

    知道 &#43;, -, &#61; 的不同点了吗&#xff1f;对啦&#xff01; &#43; 与 – 的状态下&#xff0c;只要是没有指定到的项目&#xff0c;则该权限『不会被变动』&#xff0c; 例如上面的例子中&#xff0c;由于仅以 – 拿掉 x 则其他两个保持当时的值不变&#xff01;多多实作一下&#xff0c;你就会知道如何改变权限啰&#xff01; 这在某些情况底下很好用的&#xff5e;举例来说&#xff0c;你想要教一个朋友如何让一个程序可以拥有执行的权限&#xff0c; 但你又不知道该文件原本的权限为何&#xff0c;此时&#xff0c;利用『chmod a&#43;x filename』 &#xff0c;就可以让该程序拥有执行的权限了。是否很方便&#xff1f;

结尾已经对目录以及权限有了最初的了解 下一章节 文件与目录管理..

转:https://www.cnblogs.com/521football/p/3644761.html



推荐阅读
author-avatar
七彩咩_131
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有