第9章:操作目录与档案权限介绍

前言

在上一章节中,我们介绍了基本使用者管理,在这一章节中,介绍档案之目录与档案系统权限。

Linux档案系统权限

不论是档案与目录都有权限,有了权限才可以控制使用者进行对应的档案与目录权限进行管理,相关的档案与目录管理权限所整理出的清单如下:

  • r(read),指的是读取的权限,当指定给档案的时候,则代表这个档案可以被读取,当指定给目录的时候,则代表可以读取目录,意思就是可以把目录底下内容被列出清单出来。
  • w(write),指的是修改的权限,当指定给档案的时候,代表档案可以被修改,当指定给目录的时候,则代表在这个目录底下,有权限可以新增与删除档案。
  • x(execute),指的是执行的权限,当指定给档案的时候,则代表这个档案可以以指令的方式执行,指定给目录的时候,则可以使用cd指令切换进目录并当成当前的工作目录,通常也会需要与read读取的权限坐搭配,以清单方式找到目录底下所有的目录与档案,

显示档案与目录权限与拥有者

使用ls指令并搭配-l指令,并指定档案则可以将此档案的权限与拥有者等资讯列出,相关的指令执行输出讯息如下:

[rockylinux@workstation ~]$ ls -l home_list.txt
-rw-rw-r--. 1 rockylinux rockylinux 81 Sep 23 00:36 home_list.txt

若要查看目录的权限与拥有者,则还需要加上-d之参数,选项可以组合起来或是分开都可以,相关的指令执行後输出的讯息如下:

[rockylinux@workstation ~]$ ls -l -d Downloads/
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Downloads/
[rockylinux@workstation ~]$ ls -ld Downloads/
drwxr-xr-x. 2 rockylinux rockylinux 6 Sep 18 00:05 Downloads/

从上面输出的讯息得知,第一个字元所表示的讯息如下:

  • -指的是一般的档案。
  • d指的是目录。
  • l指的是软连结(soft link)。
  • 其他字元,如:bc则是代表硬体装置或是特殊的目的的档案,如ps

使用符号来改变档案与目录权限

可以使用chmod命令来改变使用者的存取权限,下列提供了几种符号来做改变使用者的权限:

  • u,g,o,a:指的是使用者的意思,即:user, group, other, all
  • +,-,=:指的是新增、移除与设定
  • r,w,x:指的是读取、写入与执行

透过上述的符号并搭配chmod指令的使用,则可以得到下列的指令范例:

chmod u-w,g+x,o-w file
chmod u=rx,g=rx,o=rx file
chmod a+x file

上述第一个指令的意思是:

  • 将file这个档案的权限调整成:将使用者编辑权限移除、将群组的使用者加上执行的权限以及将其他使用者的编辑权限移除。

第二个指令的意思是:

  • 将file之user权限指定为读取与执行的权限、群组使用者指定为读取与执行以及其他使用者指定为读取与执行。

第三个指令为:

  • 把file档案设定成将所有人都有执行的权限。

使用数字方法来改变权限

数字方法以10进位来看,如下表示:

  • 一开始为0,0指的是什麽权限都没有。
  • 假设需要设定读取的权限,则加上4。
  • 如果需要有编辑的权限,则加上2。
  • 如果需要执行的权限,则加上1。

举例来说,上述的chmod u=rx,g=rx,o=rx file指令改成数字的表示方法就会变成:chmod 555 file,因为r与x之数字相加为5。chmod 644 file则可以等价成chmod u=rw,g=r,o=r file指令。

而比对权限的原则也很简单,首先可以先比使用者(user),接着再比群组(group),最後再比其他人(others)。

改变档案与目录之使用者与群组拥有者

可以使用chown指令将指定的档案或是目录的拥有者作改变,相关的指令用法如下:

chown rocky test_file

若是要将目录之拥有者改变,则需要一并将此目录底下的档案作改变的话,则需要加上-R之参数,这个参数指的是递回的意思,将指定的目录下走访此目录下所有的目录与档案,并将每个档案与目录的拥有者指定成rocky,相关指令的用法如下:

chown -R rocky test_dir

若是只要改变群组的拥有者名称,则可以使用下列的指令做到:

chown :admins test_dir

除了上述的方式更改群组的拥有者之外,也可以使用chgrp来进行群组拥有者的变更。
若是要同时改变使用者与群组的拥有,则可以使用下列的指令,而使用者与群组名称利用冒号(:)隔开:

chown visitor:guests test_dir

特殊权限介绍

档案与目录有几个特殊权限列表,相关的列表如下:

  • u+s(suid),指的是将某个指令可以以root使用者方式的权限启动,假设将cat指令指定成这个权限,则可以将只有root权限的使用者档案也可以输出内容出来,这个权限对於目录不会有影响,相关的指令执行结果如下:
[rockylinux@workstation ~]$ cat /etc/sudoers
cat: /etc/sudoers: Permission denied
[rockylinux@workstation ~]$ sudo chmod u+s /usr/bin/cat
[rockylinux@workstation ~]$ cat /etc/sudoers
## Sudoers allows particular users to run various commands as
.......
  • g+s(sgid),指的是不管是哪个使用者在这个目录下建立的档案或是目录,此档案或是目录所拥有的群组都不属於建立这个的群组,而是属於拥有g+s的目录群组。

  • 一般用在公用的目录:o+t,设定完成之後,公用目录下的各个使用者所自己建立档案,其他人无法管理,只有建立的档案的使用者自己可以管理,当然,除了root使用者之外。

  • u+s之数字代表为4,g+s则代表是2,o+t则代表是1,不设定则为:0,若指令为:chmod 2770 directory,则将此目录设定成g+s6、而使用者设定成可以读取、编辑与执行,群组设定成可以读取、编辑与执行,其他的使用者则都没有权限可以存取指定的目录。

预设档案权限

umask,指的是当使用者建立档案或是目录的时候预先会给定一个权限的设定,预设权限要怎麽知道确切的十进位数字是多少?有一个很简单的计算方式,最大的数字权限为:777,最小为:000,因此当umask设定成027时候,则算法如下:

  • 7 - 0 - 1 = 6
  • 7 - 2 - 1 = 4
  • 7 - 7 - 1 = -1,负数表示0

因此预设的十进位数字为:640,此外,也可以使用umask指令来暂时设定预设的权限,例如使用umask 027即可以改变预设的权限,若要永久的设定,则可以更改/etc/profile或是/etc/bashrc之档案,当然也可以在使用者自己底下的设定档:.bashrc或是.bash_profile档案进行覆写设定。

课後练习

  • 请开启workstation虚拟机器并利用rockylinux使用者登入到桌面环境,并开启终端机。
  • 利用touch指令建立一个叫做file.txt之档案。
  • 将上述的file.txt档案之权限改成:拥有者只可以读取与编辑,群组里的使用者只可以读取,其他人则没有权限。
  • 当利用一般的使用者执行cat指令去尝试输出/etc/shadow档案的时候,会遇到权限不足的问题,请试着使用一般使用者执行cat指令,并可以成功开启/etc/shadow档案。
  • 还原本来cat指令之权限。
  • 删除file.txt档案。

<<:  [第十二天]从0开始的UnityAR手机游戏开发-如何在辨识图卡时拨放影片01

>>:  Day 26 Socket的实际应用(二)

[Day3] 语音介面设计简易入手指南

对话设计的核心是对话的流程及其底层逻辑。 因此,在将界面重新设计为对话式时,需要从下往上开始。 适...

[day 21 ] SwiftUI Essentials - Building Lists and Navigation

这篇是我看这篇的纪录 Building Lists and Navigation,我感觉学习曲线不算...

SystemC: 哈罗,暖个身吧

环境建立 先从这里下载 SystemC 2.3.3 到目标资料夹下(或者从这里下载其他版本) 记得准...

Day028-透过Vuex-实作简易部落格-修改文章

Vue:实做部落格最後一步骤,就是修改文章!上一篇已经了解如何将id生成,如此才可以做个别文章上的操...

30天程序语言研究

今天是30天程序语言研究的第二十五天,由於最近写unix语言的东西用到很多,所以做了很多笔记,就想说...