Linux基础权限管理
一、linux系统权限介绍
#权限管理介绍Linux操作系统是一个多用户操作系统,这样就存在资源共享与隔离的问题。也就是说用户A的资源不愿意让用户B访问,用户C的资源与用户D的资源可以共享;同时,又存在超级用户访问所有用户资源的可能性。因此在Linux操作系统下就需要一套权限管理的功能。Linux原生的权限管理机制是基于用户角色的管理机制,也就是UGO+RWX/ACL权限控制。其中UGO是User、Group和Other的简称;RWX则是Read、Write和eXecute的简称;ACL是Access Control List的简称。Linux原生的访问控制称为自主访问控制。在Linux服务器中,权限等级有着严格的划分。若用户权限过高,一旦发生误操作,将会极大地增加服务器面临的风险。因此,深入了解Linux系统中的各类权限,并为用户、服务等合理分配权限,对于保障系统安全稳定运行意义重大。#权限管理的两种机制自主访问控制(Discretionary Access Control,DAC),是指对象(诸如程序、文件、进程等)的拥有者能够随意修改或授予该对象相应权限,这里的拥有者即具体的用户。然而,这种控制方式存在明显弊端,一旦黑客入侵并获取到用户角色,便能够执行该角色被允许的任何操作。另一种访问控制策略是基于标签的访问控制。具体而言,为程序及其访问的资源添加标签,程序仅能访问带有对应标签的资源,对于无标签资源则无法访问。这种模式并非基于用户,而是基于许可进行控制。该策略被称为强制访问控制(Mandatory Access Control,简称 MAC),其中 SELinux 便是强制访问控制的典型代表。
二、linux文件权限9列
ls-l 列出当前目录可见文件详细信息(文件以长格式列出)#第一个字符表示'类型列',表示该文件的类型,d表示这是目录文件,-表示这是普通文件。[root@centos79-68-145 ~]# ll /etc/ssh/total 604-rw-r--r--. 1 root root581843 Aug92019 moduli-rw-r--r--. 1 root root2276 Aug92019 ssh_config-rw-------1 root root3870 Mar 16 15:32 sshd_config-rw-r-----1 root ssh_keys227 Mar 16 15:32 ssh_host_ecdsa_key-rw-r--r--1 root root162 Mar 16 15:32 ssh_host_ecdsa_key.pub-rw-r-----1 root ssh_keys387 Mar 16 15:32 ssh_host_ed25519_key-rw-r--r--1 root root82 Mar 16 15:32 ssh_host_ed25519_key.pub-rw-r-----1 root ssh_keys1675 Mar 16 15:32 ssh_host_rsa_key-rw-r--r--1 root root382 Mar 16 15:32 ssh_host_rsa_key.pub#文件类型后面的9列内容,叫做权限9列[root@centos79-68-145 ~]# ll /etc/hosts-rw-r--r--. 1 root root 247 Mar 16 15:32 /etc/hosts1.权限9列的前三列字符是文件的拥有者owner的权限,中间三列是文件的所有组group的权限,后三列字符是对其他人others访问文件的权限。2.不考虑特殊权限的情况下,权限9列的第1列,第4列,第7列只能是-或者r,分别代表拥有人,所属组,其他人是否具有读权限3.不考虑特殊权限的情况下,权限9列的第2列,第5列,第8列只能是-或者w,分别代表拥有人,所属组,其他人是否具有写权限4.不考虑特殊权限的情况下,权限9列的第3列,第6列,第9列只能是-或者x,分别代表拥有人,所属组,其他人是否具有执行权限rwxrw-r--表示拥有人有读写执行权限,所属组拥有读写权限,其他人有读权限rw-r-----表示拥有人有读写权限,所属组有读权限,其他人没有权限r--------表示拥有人有读权限,所属组没有权限,其他人没有权限---------表示拥有人,所属组,其他人没有权限
三、普通文件rwx权限
在 Linux 系统里,普通文件的 rwx 权限是基础且关键的概念,它分别代表读(r)、写(w)、执行(x)权限。1.读权限(r)读权限允许用户查看文件的内容。若用户对某个文件有读权限,就能使用文本查看工具(如 cat、more、less 等)来读取文件中的信息。假定有一个名为 example.txt 的文件,当用户具备读权限时,可使用 cat example.txt 命令查看文件内容。若用户没有读权限,尝试查看文件内容时会收到“权限不足”的错误提示。2.写权限(w)写权限允许用户对文件内容进行修改、添加或者删除操作。拥有写权限的用户能够使用文本编辑器(如 vim、nano 等)来修改文件内容,也可以使用重定向操作符(如 >、>>)来覆盖或追加文件内容。若用户对 example.txt 文件有写权限,可使用 vim 编辑器修改文件内容。此外,还可以使用重定向操作符向文件中追加内容。若用户没有写权限,尝试修改文件内容时会收到“权限不足”的错误提示。3.执行权限(x)执行权限允许用户将文件作为程序来执行。通常,可执行文件包括脚本文件(如 .sh 文件)和编译后的二进制文件。若有一个名为 script.sh 的脚本文件,并且用户对该文件有执行权限,就可以直接执行该脚本。./script.sh这里的 ./ 表示当前目录,因为默认情况下,系统不会在当前目录中查找可执行文件。若用户没有执行权限,尝试执行文件时会收到“权限不足”的错误提示。为什么要通过这样的方式执行脚本呢?原因要从执行命令方法说起,我们的命令是存放在/bin和/sbin中的,正常来说想要执行命令需要满足两个条件,第一个条件是命令需要具备执行权限,也就是说需要具备x权限,第二个条件是通过绝对路径或者相对路径来指向你想执行的命令来执行具体的命令,比如/bin/ls或者/sbin/useradd,但是为什么我们不需要加路径,直接输入ls或者useradd就可以执行呢?是因为Linux为了方便帮助我们简化命令执行增加了一个环境变量PATH,你可以使用PATH环境变量来记录存放命令的目录,这样当你直接输入ls后,Linux就会按照顺序逐个搜索PATH环境变量指定的目录,如果在目录中找到了ls命令,则会执行,否则会告诉你无法找到该命令。我们自定义的脚本和命令一样需要执行,所以同样要满足2个条件,第一就是要增加执行权限,第二就是要以绝对路径或者相对路径来指定。如果你想像执行ls命令那样不需要输入路径,那么你可以将你的脚本放在PATH环境变量中的任意一个目录。你可以通过echo$PATH查看当前PATH变量的值。你可以通过`exportPATH="/Directory1:$PATH"`命令在PATH变量目录的最前面增加一个/Directory1目录。这种设置方法是临时的,如果你想让这个变量永远生效,你可以将这条命令写到环境变量配置文件中。/etc/bashrc和/etc/profile是全局环境变量配置文件,~/.bashrc和~/.bash_profile是用户自定义的环境变量配置文件。4.权限组合普通文件的rwx这三种权限可以相互组合,从而为用户提供不同的操作能力。例如,rw- 表示用户有读和写权限,但没有执行权限;r-x 表示用户有读和执行权限,但没有写权限;rwx 表示用户拥有读、写和执行的全部权限。#无意义的权限组合注意,有些权限组合是无意义的,比如:--x:只有执行权限,没有读和写权限,这种权限组合对于普通文件而言,缺乏实际用途。因为在不知道文件内容且无法修改的情况下,执行该文件可能会产生不可预测的结果。-w-:只有写权限,没有读权限。通常情况下,若无法读取文件内容,仅具有写权限会使操作变得很受限,因为用户无法知晓文件原有内容,难以进行有意义的写入操作。-wx:有写和执行权限,但没有读权限。与上面类似,没有读权限,用户难以明确文件的具体情况,执行操作可能会带有盲目性,而写操作也会因缺乏对文件内容的了解而受到限制。#有意义的权限组合---:表示用户对文件没有任何权限。具有这种权限的文件,用户无法读取文件内容、无法修改文件,也不能执行文件。这在一些需要严格限制访问的场景中会用到,比如某些涉及敏感信息的文件,不希望任何非特定授权的用户进行任何操作,就可以将其权限设置为“---”,以最大程度地保证文件的安全性和保密性。r--:用户具有读取文件内容的权限。适用于那些只需要被查看的文件,如系统日志文件、帮助文档、纯文本的说明文件等。用户可以查看文件的内容以获取信息,但不能对文件进行修改或执行相关操作,保证了文件内容的完整性和稳定性。r-x:用户不仅能够读取文件内容,还可以执行该文件。通常用于可执行程序、脚本文件等。例如,系统中的一些命令行工具、用户自定义的脚本等。用户需要读取文件中的指令来了解程序的功能和使用方法,同时也需要执行该文件来运行程序,实现特定的功能。rw-:用户拥有读取和写入文件的权限。用户可以随时读取文件内容进行查看,也可以根据需要对文件进行修改、编辑,以更新文件中的信息。rwx:用户具备对文件的所有操作权限,包括读取、写入和执行。一般用于所有者对自己的文件有完全控制需求的情况,或者是一些特殊的可执行文件,不仅需要被执行,还可能在执行过程中需要动态地修改自身内容或相关配置文件。例如,某些具有自我更新功能的程序,或者需要根据运行时的情况实时调整配置的脚本。但这种权限组合相对来说比较开放,在设置时需要谨慎考虑文件的安全性,避免因权限过高而导致安全风险。
四、目录文件rwx权限
1.读权限(r)赋予用户列出目录内容的能力,可查看目录下包含的文件及子目录名称。拥有读权限的用户,能使用ls命令查看目录中的文件和子目录列表。例如,对于/home/user/Documents目录,用户可执行ls /home/user/Documents。若用户无读权限,执行ls命令时将收到“权限不足”错误提示。此权限用于共享文档目录,其他用户只需查看目录下有哪些文件和子目录,无需进行修改等操作。2.写权限(w)含义:允许用户在目录中创建新文件和子目录,以及删除或重命名目录内的文件和子目录(即便用户对要操作的文件本身没有相应权限,只要对目录有写权限即可)。操作示例:用户对/tmp目录有写权限时,可在其中创建新文件,如touch /tmp/newfile.txt;也能删除目录中的文件,如rm /tmp/existingfile.txt(前提是目录允许执行删除操作)。若用户无写权限,创建、删除或重命名操作将失败并提示“权限不足”。应用场景:在团队协作项目目录中,成员需要有写权限,以便添加新的项目文件、创建子目录用于分类等。3.执行权限(x)含义:使用户能够访问目录下的文件和子目录,即可以通过cd命令进入该目录,以及访问目录内文件的元数据(如查看文件大小、修改时间等)。仅有读权限而无执行权限时,用户无法使用cd进入目录,也无法获取目录内文件的详细信息。操作示例:对/var/log目录有执行权限的用户,可执行cd /var/log进入该目录,查看日志文件相关信息。若用户无执行权限,执行cd命令会提示“权限不足”。应用场景:对于系统服务日志目录,运维人员需要执行权限来进入目录查看日志,进行故障排查等工作。4.权限组合#有意义权限组合---:含义:用户对目录没有任何权限,无法查看目录内容、无法在目录内进行创建删除等操作,也不能进入目录。应用场景:用于存放敏感信息且不希望任何非特定授权用户访问的目录,如某些安全相关的配置文件目录,防止未授权访问和修改。r-x含义:用户可列出目录内容并进入该目录,适用于共享目录,用户只需查看目录结构及进入特定子目录获取信息,无需创建或修改文件。应用场景:公司内部共享资料目录,员工可浏览查看,但不允许私自添加或修改内容。rwx含义:用户对目录拥有完全控制权,可进行读、写、执行的所有操作,包括列出内容、创建/删除/重命名文件和子目录、进入目录及访问目录内文件。应用场景:用户个人主目录,用户需要完全掌控目录内的所有操作;或者某些开发项目目录,开发人员需要频繁进行各种操作。#无意义权限组合r--含义:只有读权限,用户可以查看目录中有哪些文件,但是无法查看文件的属性,而且无法进入目录。这种情况下除了可以看到一个目录有什么文件之外,无法进行任何有意义的操作,由于不知道目录中文件的权限等元数据信息,也无法对某些文件进行有效的操作。-w-含义:只有写权限,用户既不能查看目录内容,也无法进入目录。在这种情况下,用户无法知晓目录内已有内容,进行写入操作具有很大盲目性,难以进行有意义的文件创建等操作。--x含义:仅有执行权限,用户无法列出目录内容,却能进入目录(但因无读权限,进入后也无法查看目录内文件列表)。在大多数实际应用中,这种权限组合很难满足有效操作需求。-wx含义:有写和执行权限,但无读权限。用户能进入目录,也可在目录内创建、删除和重命名文件,但由于无法查看目录内容,操作缺乏针对性,容易造成混乱。rw-含义:用户可在目录中创建、删除和重命名文件及子目录,同时能查看目录内容,但无法进入目录(即不能访问目录内文件)。这种情况相对少见,不过在一些特定场景下,如只允许用户上传文件,而不希望他们查看或进入目录操作文件时可能会用到。
五、修改文件的拥有人和所属组
#chown命令更改文件或目录的所有者和所属组1.功能概述chown 是“change owner”的缩写,其主要功能是更改文件或目录的所有者,同时也可以更改其所属组。在 Linux 系统中,文件和目录的所有者在权限管理和操作控制方面起着关键作用,而 chown 命令为管理员和用户提供了灵活调整这些属性的手段。2.语法格式chown[选项][所有者][:[组]] 文件或目录所有者:指定新的文件所有者,可以是用户名或用户 ID。组:可选参数,指定新的文件所属组,可以是组名或组 ID。如果省略 :和组名,则只更改所有者;如果只写 :后面跟组名,则只更改所属组;如果都指定,则同时更改所有者和所属组。3.常用选项-R:递归地更改指定目录及其所有子目录和文件的所有者和所属组。4.示例# 仅更改文件 example.txt 的所有者为 user1chown user1 example.txt# 仅更改文件 example.txt 的所属组为 group1chown :group1 example.txt# 同时更改文件 example.txt 的所有者为 user1,所属组为 group1chown user1:group1 example.txt# 递归地更改目录 mydir 及其所有子目录和文件的所有者为 user1,所属组为 group1chown-R user1:group1 mydir5.注意事项(1)只有超级用户(root)可以使用 chown 更改任意文件的所有者和所属组。(2)普通用户不能更改文件的拥有人,普通用户可以更改文件的所属组,但是所属组必须是自己的附加组。(3)在更改目录及其子目录和文件时,使用-R 选项要谨慎,因为这可能会影响大量文件的权限设置。#chgrp命令更改文件或目录的所属组1.功能概述chgrp 是“change group”的缩写,专门用于更改文件或目录的所属组。在 Linux 多用户环境中,不同的用户组可能具有不同的权限和访问需求,通过 chgrp 命令可以方便地将文件或目录分配到不同的用户组,以实现更精细的权限管理。2.语法格式chgrp[选项] 组 文件或目录组:指定新的文件所属组,可以是组名或组 ID。3.常用选项-R:递归地更改指定目录及其所有子目录和文件的所属组。4.示例# 更改文件 example.txt 的所属组为 group1chgrp group1 example.txt# 递归地更改目录 mydir 及其所有子目录和文件的所属组为 group1chgrp-R group1 mydir5.注意事项确保指定的组名是系统中已经存在的组,否则命令会执行失败。
六、使用chmod命令修改文件权限
1、使用加、减、等于方法设置拥有权限
在 Linux 系统里,你能够运用 chmod 命令结合 +、-、= 这些符号来设定文件或目录的权限。下面为你详细介绍这三种符号的使用方法以及具体示例。1.为谁设置权限u:表示所有者身份owner(user)g:表示给所属组设置(group)o:表示others,给其他用户设置权限a:表示all,给所有人(包含ugo部分)设置权限如果在设置权限的时候不指定给谁设置,则默认给所有用户设置2.权限字符r:读w:写x:表示执行-:表示没有权限3.权限分配方式+:表示给具体的用户新增权限(相对当前)-:表示删除用户的权限(相对当前)=:表示将权限设置成具体的值(注重结果)【赋值】#使用 + 添加权限1.给文件所有者添加执行权限:chmod u+x file.txt2.给用户组添加读和写权限:chmod g+rw file.txt3.给所有用户添加读权限:chmod a+r file.txt#使用 - 移除权限1.移除文件所有者的写权限:chmod u-w file.txt2.移除用户组的执行权限:chmod g-x file.txt3.移除其他用户的读和写权限:chmod o-rw file.txt#使用 = 设置权限1.将文件所有者的权限设置为读、写和执行:chmod u=rwx file.txt2.将用户组的权限设置为只读:chmod g=r file.txt3.将所有用户的权限设置为无:chmod a= file.txt#多角色设置权限chmod u=rwx,g=rx,o=r test_file#针对目录的权限设置上述命令同样适用于目录,只需把文件名替换成目录名即可。例如,给目录 mydir 的所有用户添加读和执行权限chmod a+rx mydir
2、使用二进制方法设置权限
在 Linux 系统中,可使用二进制方法结合 `chmod` 命令来设置文件或目录的权限。每个权限(读 r、写 w、执行 x)对应一个二进制位,通过组合这些二进制位来表示不同的权限组合,再将其转换为十进制数用于 `chmod` 命令。#普通文件权限与二进制位的对应关系二进制000等于十进制的0代表---表示没有任何权限(有意义权限)二进制001等于十进制的1代表--x表示有执行权限二进制010等于十进制的2代表-w-表示有写权限二进制011等于十进制的3代表-wx表示有写和执行权限二进制100等于十进制的4代表r--表示有读权限(有意义权限)二进制101等于十进制的5代表r-x表示有读和执行权限(有意义权限)二进制110等于十进制的6代表rw-表示有读和写权限(有意义权限)二进制111等于十进制的7代表rwx表示有读写执行权限(有意义权限)chmod 764 file1.txtchmod u=rwx,g=rw,o=r file1.txtchmod 命令后面接一个三位的十进制数,分别代表用户(u)、用户组(g)和其他用户(o)的权限。1.设置用户有读、写、执行权限,用户组有读、执行权限,其他用户有读权限:chmod 754 example.txt这里的 7 代表用户的权限 rwx(4 + 2 + 1),5 代表用户组的权限 r-x(4 + 1),4 代表其他用户的 r--(4)。2.设置用户和用户组有读、写权限,其他用户没有任何权限:chmod 660 example.txt其中 6 代表读和写权限(4 + 2),0 代表无权限。#目录文件权限与二进制位的对应关系二进制000等于十进制的0代表---表示没有任何权限(有意义权限)二进制001等于十进制的1代表--x表示有执行权限二进制010等于十进制的2代表-w-表示有写权限二进制011等于十进制的3代表-wx表示有写和执行权限二进制100等于十进制的4代表r--表示有读权限二进制101等于十进制的5代表r-x表示有读和执行权限(有意义权限)二进制110等于十进制的6代表rw-表示有读和写权限二进制111等于十进制的7代表rwx表示有读写执行权限(有意义权限)同样的方法也适用于目录。例如,将目录 test_dir 的权限设置为用户有读、写、执行权限,用户组有读、执行权限,其他用户没有权限:chmod 750 test_dir

chmod命令的参数:1.-R参数相当于递归修改,你可以参考chown和chgrp的-R参数用法,当使用-R参数指定一个目录进行权限修改,将会对该目录以及该目录下面的子目录中的所有文件进行统一的权限修改2.-v参数能在修改权限的过程中,列出你权限的变化情况