美文网首页
Linux 文件权限管理

Linux 文件权限管理

作者: 闻花吟 | 来源:发表于2021-08-01 10:45 被阅读0次

    概览

     

    文件权限管理是Linux/Unix中很基础也很重要的概念,而网上大多充斥着粗制滥造的迷之操作误人子弟让人不忍直视,索性在此记录并与大家分享。

    本文提及的Linux命令适用于绝大多数Linux/Unix发行版,如Ubuntu,CentOS, Fedora,Arch,苹果MacOS,Raspberry

    Pi,或者其他bash环境,如Git bash等等。

     

    环境

    Windows 10 21H1 + Linux子系统Ubuntu 20 LTS + Windows Terminal,本文提及的所有操作都再此环境下运行,如果您使用的是MacOS或者任何Linux发行版,直接运行操作系统中的terminal亦可。

    打开Windows Terminal,运行命令wsl进入Linux子系统:

    * PS - PowerShell

    * C:\Users\neo - 当前所在Windows目录

    * WSL - Windows Subsystem for Linux

    * neo - Linux主机当前登录用户

    * @ - At,在

    * workstation - Linux主机名

    * :/mnt/c/Users/neo - Linux当前目录

    * $ - 当前用户是一个普通用户,root用户会显示为#

    neo@workstation:/mnt/c/Users/neo$ 这个完整的解释是:普通用户neo在workstation主机中的/mnt/c/Users/neo目录下

    运行cd ~进入home目录,开始我们的探索之旅

    *~ - home目录

    *pwd - print working directory,打印工作目录(当前所在目录)

    */home/neo – 用户neo的home目录

    准备些素材

    使用命令mkdir新建一个目录’folder’,使用命令touch新建文件’file’,使用命令ln

    -s建立一个软连接’link’并指向目录’folder’,最后使用命令ls -l或者ll命令确认

    * mkdir – make directory 建立目录

    * ln – link,-s symbolic,建立符号链接(软链接)

    * ls – list,-l list,以列表的方式列出文件和目录,同ll命令(list list)

    简单说明一下这个列表,独占一行的‘total’是当前目录内所有文件所占磁盘空间的总和(KB),它下面的列表我们分成七列来看:

    第一列:就是本文所述的重点,文件属性(模式)列表

    第二列:文件的硬链接数量,1代表此文件有1个硬链接,就是文件本身,可使用ln新建一个硬链接指向文件file,再次通过ls -l命令查看,两个文件在此的数值都变为了2;根据发行版的不同会有差异,当前文件如果是目录的话会显示其包含子目录的个数

    第三列:owner,文件所有者的用户名

    第四列:group,文件所在组的组名

    第五列:文件大小(以字节为单位,byte,b)

    第六列:文件修改时间,格式为‘月,日,时:分’

    第七列:文件名,颜色显示依据不同终端主题和样式会有差别

    文件属性

     

    第一列的文件属性列表,我们可以继续拆分成四列来看:

    首列标识了文件的类型,分别解释如下:

    ‘-‘: 此文件是一个普通文件

    ‘d’: directory, 此文件是一个目录,目录也是一个特殊的文件,它存放着其他文件或目录

    ‘l’:link,此文件是一个软链接文件

    除了以上常见的三种文件标识,还有诸如c,b,p等特殊文件标识,日常工作中很少用到,这里就不细说了,感兴趣的小伙伴可以另行查阅。

    在首列文件类型列之后,密密麻麻的有9个字母或横线组成了一串字符,我们把这9个字符拆分为3组,每组3个字符:

    从左至右分别为:

    第一组:user,用户,即owner,文件所属的用户,对此文件的权限都有哪些

    第二组:group,组,文件所属的组内所包含的用户,对此文件的权限都有哪些

    第三组:other,其他用户,除了此文件所有者和此文件所属组内用户的其他用户,对此文件的权限都有哪些。

    每组对应的文件权限又分配有三个属性,r,w,x,并且三个属性的位置是固定不变的,即r永远在最左侧,w永远在最中间,x永远在最右侧。如果某个属性被禁用,则以横杠‘-’代替。三个属性分别为:

    r:read,可读

    w:write,可写

    x:execute,可执行

    -:none,没有

    回到我们刚才查看的文件列表,可以很清楚3个文件的权限配置:

    文件’file’:

    -rw-r--r-- 1  neo  neo 0  Jul  31 19:31  file

    这是一个普通文件,允许它的所有者用户neo读和写,但不允许执行;对名为neo的组内所有用户成员,允许他们可读,但不允许修改和执行;对既不是它的拥有者neo也不是neo组内成员的其他用户,允许读取,但不允许修改和执行。

    文件’folder’:

    drwxr-xr-x 1  neo  neo 512  Jul  31 19:31  folder

    这是一个文件夹,为它的所有者用户neo开放所有权限; 对名为neo的组内所有用户成员和其他用户,允许他们读取和执行,但不允许修改。

    文件’folder’:

    lrwxrwxrwx 1  neo  neo 6  Jul  31 19:31  link -> folder

    这是一个链接,允许所有用户读取,修改和执行。

    chown修改文件所有者

    文件的持有者可以通过命令chown改变,比如更改文件file的持有者从neo到smith,此命令如果是普通用户执行的话需要在命令前面加sudo:

    sudo chown smith file

    chown:change owner,更改持有者

    sudo:SuperUser DO,超级用户做,指的是root用户

    chown命令也可以同时修改用户和组,以‘用户名:组名’的形式:

    sudo chown neo:neo file

    chgrp修改文件所在组

    文件的所在组可以通过命令chgrp改变,比如更改文件file的组从neo到matrix,此命令如果是普通用户执行的话需要在命令前面加sudo:

    sudo chgrp matrix file

    chgrp:change group,更改用户组

    chmod修改文件权限

    我们使用命令chmod修改文件权限。官方给出的文档用法是这样的:

    Each MODE is of the form'[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

    下面的用法是我自己整理的,用着比较简便:

    chmod [ugoa][+-=][rwx] [-R]path/filename

    *chmod - change file mode bits 修改文件模式位

    [ugoa]

    u:user,用户,为文件所有者修改权限

    例:为文件所有者添加可读权限chmod u+r file

    g:group,组,为文件所在组修改权限

    例:为文件所在组添加可读权限chmod g+r file

    o:other,其他用户

    例:为其他用户添加可读权限chmod o+r file

    a:all, 全部,等同于ugo,为文件所有者,组和其他用户全部修改权限

    例:为所有用户添加可读权限chmod a+r file

    ugoa也可以随意组合,比如为用户组和其他用户移除可写权限chmod go-w file

    [+-=]

    +:添加权限

    -:移除权限

    =:使权限相同,为文件所有者,组或者其他用户,按照指定的所有者,组或者其他用户,或者指定的rwx权限,分配相同的文件权限

    例:修改组权限为文件所有者相同的权限,修改前的组权限为r--, 修改后为rwx,见下图:

    [rwx]

    r:read,可读

    w:write,可写(修改)

    x:execute,可执行

    rwx也可随意组合,例如,设置允许其他用户可读并且可写 chmod o+rw file, 再例如设置移除组和其他用户的可写和执行权限chmodgo-wx file

    [-R]

    递归的生效于目标目录下的所有子目录和文件

    修改文件’file’的权限,为其所有者neo增加执行权限:

    执行命令:chmod u+x file,再次执行命令ls -l确认修改结果

    我们发现相比之前该文件的权限,经过更改后在用户组中多出了一个x,变为了rwx;其他两组没变,依然是r--

    更快捷的方法

    如果打开chmod --help,这个命令的man手册有一条用法:

    chmod [OPTION]... OCTAL-MODE FILE...

    Octal-mode:八进制模式,此模式分别为r, w, x分配了权重数值,即:

    r: 4

    w: 2

    x: 1

    回到我们最初新建的3个文件,用八进制标识权限分别为644,755,777:

    所以chmod命令可作用于更加快捷的权限分配。例如修改file文件,使得它的持有者可读可写(4+2+0=6),组只可读可写(4+2+0=6),其他用户只可读(4+0+0=4):

    chmod 664 file

    一个文件的最高权限是777,即文件所有者,组和其他用户都有读,写和执行的权限,相当于ugo+rwx。

    好多文件权限问题是文件持有者和组的问题,而不要上来就粗暴的给777,当作是玩水果机呢,即使你的环境非常安全,但也是一个很不好的习惯。

    相关文章

      网友评论

          本文标题:Linux 文件权限管理

          本文链接:https://www.haomeiwen.com/subject/vgqkvltx.html