1. Linux权限的概念
什么是权限?就是通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
例一:
例二:
2. Linux权限管理
Linux下,不以文件后缀来区分文件类型。
(并不代表不可以使用,在系统层面没意义,但是可以给自己看)
2.1 文件访问者的分类
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
所有者 (User/Owner)
- 定义:文件的所有者通常是创建文件的用户,或者是通过某些命令(如 chown)被指定为文件所有者的用户。
- 目的:所有者对文件有最大的控制权,通常能够设置文件的权限和修改文件的内容。这样设计是为了确保文件的创建者或者指定的用户能够完全控制自己的文件资源。
所属用户组 (Group)
- 定义:每个文件还关联有一个用户组,这通常是由创建文件时用户的默认组决定的,但也可能通过 chgrp 或 chown :groupname 命令被更改。
- 目的:所属用户组的权限允许一组用户共享对文件的访问控制,而无需将所有用户都设置为文件的所有者。这在团队协作中尤其有用,因为团队成员可以被添加到同一个组中,从而共享对某些文件的访问权限。
其他用户 (Others)
- 定义:除了文件所有者和所属用户组的成员之外的任何用户。
- 目的:其他用户权限的存在确保了系统中非直接相关用户对文件的访问控制,防止未经授权的访问。这有助于保护数据的安全性和完整性,防止未授权用户读取、修改或执行敏感文件。
为什么需要这样的设计?
- 安全性:通过限制对文件的访问,可以防止未经授权的用户访问敏感数据或进行潜在破坏性的操作。
- 协作性:用户组的概念使得团队成员可以方便地共享文件,而不需要将文件的所有权转移给每一个需要访问文件的用户。
- 灵活性:不同的用户和用户组可以有不同的权限,这使得管理员可以根据具体需求灵活地调整访问控制策略。
2.2 文件类型和访问权限
- 第一列(drwxr-xr-x):表示文件或目录的权限模式。以字母和符号的形式表示了所有者、所属组和其他用户的权限。第一个字符表示文件类型,其中"d"表示目录。接下来的三个字符(rwx)表示所有者的权限,再接下来的三个字符(r-x)表示所属组的权限,最后的三个字符(r-x)表示其他用户的权限。
- 第二列(3):表示链接到该文件或目录的硬链接数。对于目录来说,这个数字表示该目录下的子目录和文件的数量。
- 第三列(root):表示文件或目录的所有者。
- 第四列(root):表示文件或目录的所属组。
- 第五列(4096):表示文件或目录的大小(以字节为单位)。对于目录来说,这个值通常是固定的。
- 第六列(Jan 23 10:32):表示文件或目录的最后修改时间。
- 第七列(lesson1):表示文件或目录的名称。
总计(total 8):表示当前目录下的文件和目录的总数。
2.2.1 文件类型
Windows中通过后缀名区分文件类型
Linux中不通过后缀名区分文件类型,通过第一个属性列来区分
Linux不区分文件类型,但是Linux上的工具可能会区分
2.2.2 基本权限
- 读(r/4 - 100):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写(w/2 - 010):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
- 执行(x/1 - 001):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
- “—”表示不具有该项权限。
**2.3 **文件权限值的表示方法
文件的权限一般分为三种:
- r:读
- w:写
- x:可执行权限
字符表示方法
8进制数值表示方法
2.4 文件访问权限的相关设置方法
2.4.1 chmod
chmod 是 Linux 和类 Unix 系统中一个非常重要的命令,用于更改文件或目录的权限。chmod 的全称是 "change mode",它允许你修改文件或目录的访问模式,包括读(r)、写(w)和执行(x)权限。通过精确控制文件的权限,chmod 命令增强了系统的安全性和可管理性。
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式
① 用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
实例:
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
修改拥有者权限
修改所属组权限
修改其他用户权限
修改多个权限
修改所有人权限
三位8进制数字
实例:
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt
2.4.2 chown
chown 命令在 Linux 和 Unix 类似系统中用于改变文件或目录的所有者(owner)和所属用户组(group)。它的名字来源于英文 "change owner" 的缩写。这个命令通常由 root 用户或文件的当前所有者使用,因为它涉及到对文件权限的更改,而这通常需要较高的权限。
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:
# chown user1 f1
# chown -R user1 filegroup1
然而我们限制拥有者不能读写,登录普通用户后就不能读写了,而root是不受权限限制的
普通用户是不能修改拥有者的,而root可以强制修改
如果要同时修改所属组和拥有者也是可以的
注意事项
- 使用
chown
修改文件权限时要小心,特别是当递归更改目录时,因为这可能会影响到许多文件,导致意外的结果。- 通常情况下,只有 root 用户或者文件的当前所有者才有权限使用
chown
命令来更改文件的所有者。普通用户只能更改自己拥有的文件的所属组。
2.4.3 chgrp
chgrp 命令在 Linux 和类 Unix 系统中用于更改文件或目录的所属用户组(group)。这个命令的全称是 "change group",它允许你将一个文件或目录的所属组更改为系统中已存在的任何组。chgrp 命令通常由文件的所有者或具有 root 权限的用户使用,因为改变文件的组归属通常需要相应的权限。
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例:
# chgrp users /abc/f2
注意事项
- 当你使用
chgrp
更改文件的所属组时,你需要确保新组在系统中是存在的。如果尝试使用一个不存在的组名,chgrp
命令会失败并显示错误信息。- 只有文件的所有者或具有 root 权限的用户才能使用
chgrp
来更改文件的所属组。
2.4.4 umask
umask
命令用于设置或报告当前进程的文件权限掩码。文件权限掩码决定了新创建的文件和目录的默认权限,它是通过从默认权限中去除某些权限位来实现的。
- 查看或修改文件掩码
- 新建文件夹默认权限=0666
- 新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
实例:
# umask 755
# umask //查看
# umask 044//设置
3. file指令
file
命令在 Linux 和类 Unix 系统中是一个非常有用的工具,用于确定文件的类型。它可以识别各种文件格式,包括文本文件、二进制文件、脚本、图片、音频、视频等多种类型,并且能够提供关于文件的详细信息,如编码格式、压缩类型、MIME类型等。
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:
- -b:仅输出文件类型,不显示文件名。
- -i:输出 MIME 类型和编码。
- -L:如果遇到符号链接,显示链接指向的文件类型,而不是链接本身。
- -m:使用指定的魔法数据库文件,而不是默认的。
- -q 或 --quiet:静默模式,仅输出文件类型,不显示额外信息。
- -v:详细模式,显示更多关于文件的信息。
- -z:处理压缩文件时,自动解压并检测原始文件类型。
示例
- 查看文件
example.txt
的类型:file example.txt
- 获取多个文件的 MIME 类型和编码:
file -i image.jpg audio.mp3
- 静默模式下查看文件类型,适用于脚本中:
file -qb document.pdf
输出示例
假设我们运行
file
命令检查一个文本文件:
$ file sample.txt
sample.txt: ASCII text
在这个例子中,
file
命令告诉我们
sample.txt
是一个ASCII文本文件。
使用场景
file
命令在多种场景下都非常有用,包括但不限于:
- 确认文件是否符合预期的格式,比如在上传文件前检查。
- 在脚本中自动识别文件类型,以便进一步处理。
- 故障排除时,帮助诊断文件损坏或格式错误的问题。
- 安全审计时,确认文件的实际内容与声明的内容是否一致。
使用 sudo分配权限
用户未添加到信任列表并使用sudo指令时 如下图
(1)修改/etc/sudoers 文件分配文件
# vim /etc/sudoer
格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
vim /etc/sudoers
:这个命令是使用vim编辑器打开
/etc/sudoers
文件。
/etc/sudoers
是一个特殊的系统文件,用于配置sudo的权限规则。通过编辑这个文件,可以为特定的用户或用户组分配sudo权限。
(2)使用 sudo 调用授权的命令
$ sudo –u 用户名 命令
实例:
$ sudo -u root /usr/sbin/useradd u2
4. Linux目录权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
- 可读权限: 如果目录没有可读权限,** 则无法用ls等命令**查看目录中的文件内容.
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
在Linux中,目录也是文件,是文件就有属性,就有权限
在Linux中,我们可以通过cd命令进入目录
只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。
那么我们要进入一个目录,需要有什么权限呢?目录和普通文件一样,也是有权限的。
4.1 测试证明
我们将dir目录的所属组和拥有者都改为zhb,在zhb用户登录下测试
4.2 修改读权限
我们修改拥有者的r权限,我们发现修改r权限,依旧能进入dir目录,但是在目录中我们不能查看该目录的文件,但是可以创建
4.3 修改写权限
修改目录的写权限,还是不会影响我们进入目录,而且这时我们查看目录文件不受影响,但是不能创建文件了
4.4 修改可执行权限
我们修改目录的可执行权限,这时就进入不了目录了
4.5 总结目录权限
根据测试,我们得出以下结论:
在Linux中
- 目录的r权限:用户能否查看指定目录内的文件信息
- 目录的w权限:用户能否在指定的目录内新建、修改、删除文件
- 目录的x权限:用户能否进入目录
5. Linux权限掩码umask
5.1 起始权限
我们在创建文件或目录的时候,通常都会有起始的权限,比如目录在创建的时候就有x权限,而且所有同类型文件的起始权限都是相同的
5.2 umask
功能:
- 查看或修改文件掩码
- 新建文件夹默认权限=0666
- 新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask&~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002
在创建文件的时候,要从起始权限中,过滤掉(不是简单的减法)在umask中出现的权限
最终权限 = 起始权限 & (~umask)
**&:**只有对应的两个二进位都为1时,结果位才为1
- 创建的普通文件,起始权限是0666,去掉x的
- 创建的目录文件,起始权限是0777,包含x的
5.3 在root用户下
5.4 在普通用户下
5.5 修改umask
可以通过umask 权限值来修改,修改之后创建文件的起始权限也会不一样
6. 粘滞位
- 粘滞位(Sticky Bit)是一种文件系统权限的特殊标志,用于控制对目录中文件的删除权限。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能删除或重命名该目录中的文件;其它用户可以创建文件,但是只能删除自己的文件,不可以删除别人的文件。
- 在UNIX和类UNIX系统中,粘滞位可以通过文件系统的权限模式来设置。当一个目录的粘滞位被设置时,该目录的权限模式会以一个加号(+)和粘滞位标志(t)结尾。例如,一个具有粘滞位的目录权限模式可能是drwxrwxrwt。
- 要设置粘滞位,可以使用chmod命令,并在权限模式中添加一个加号(+)和粘滞位标志(t)。
例如,要将粘滞位设置在目录上,可以运行以下命令:
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
只有目录的所有者或超级用户才能设置或取消粘滞位。粘滞位对于确保公共目录中的文件安全性非常有用,防止意外删除或修改他人的文件。
总结:
粘滞位只能给目录设置,一般是谁设置,谁才能取消。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
版权归原作者 青旋. 所有, 如有侵权,请联系我们删除。