【linux】权限

Alt

🔥个人主页Quitecoder

🔥专栏linux笔记仓

Alt

Linux权限管理

01. 文件访问者的分类

在Linux系统中,用户(User)按照不同的角色和权限分为几个主要类型:

  1. 超级用户(root):

    • 'root’用户可以被看作是系统管理员,拥有对系统的完全控制权。
    • 'root’用户能够执行所有命令并访问系统上的所有文件。由于这个权限级别的强大(和潜在的危险),不建议常规使用。
  2. 系统用户(System Users):

    • 系统用户是出于系统服务和管理任务需要创建的用户。这些用户通常不是为人而设的,而是为了让特定的服务(如web服务器进程、数据库服务等)运行在特定的权限下。
    • 系统用户通常没有登录shell,也就是说,不能通过常规方法(如密码登录)启动交互式会话。
    • 例子包括daemonsysbin等用户。
  3. 普通用户(Regular Users):

    • 普通用户是为实际的人创建的账户。它们有自己的用户名和密码。
    • 普通用户对系统资源的访问受到限制。他们通常只能在自己的主目录中更改文件,除非被授予特定位置的额外权限。
    • 手动创建的任何新用户通常都是这种类型的用户。
  4. 虚拟用户(Virtual Users):

    • 虚拟用户并非Linux系统本身使用或创建的用户账户,而是由一些具体应用程序(如FTP服务)为了特定需求而创建的用户。
    • 这些用户可能没有系统上的一个真正的主目录,它们的用户信息可能存储在应用程序特定的数据库中。
  5. 用户组(Groups):

    • Linux中还有一个“用户组”的概念,这是将用户分类的一种方式。一个用户可以属于一个或多个用户组。
    • 用户组允许你为一组用户设定特定的权限。这样,你可以授予特定组对特定文件或目录的访问权限,而无需逐一为每个用户设置。

默认用户和用户组的信息存储在几个重要的文件中,如:

  • /etc/passwd : 存储用户基本信息,包括用户名、用户ID(UID)、组ID(GID)、主目录、登录shell等。
  • /etc/shadow : 存储加密过的用户密码及相关的账户安全信息。
  • /etc/group : 存储用户组的信息。
  • /etc/gshadow : 存储加密过的用户组密码。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令

02.文件类型和访问权限

Linux权限是Linux操作系统用来控制对文件和目录访问的一个关键特性。在Linux中,每个文件和目录都有与之关联的访问权限,这些权限决定了用户和进程可以如何与这些文件和目录进行交互。

Linux权限主要分为三类:

  1. 读取权限(Read):表示用户或进程能够读取文件内容或者列举目录中的内容。

    • 对于文件来说,读取权限允许用户查看文件内容。
    • 对于目录来说,读取权限允许用户列举目录中的文件和子目录。
  2. 写入权限(Write):表示用户或进程能够修改文件内容或者改变目录内容。

    • 对于文件来说,写入权限允许用户修改和删除文件内容。
    • 对于目录来说,写入权限允许用户在目录中创建或删除文件或子目录。
  3. 执行权限(Execute):表示用户或进程能够执行一个文件或者访问目录。

    • 对于文件来说,执行权限允许用户运行一个脚本或程序。
    • 对于目录来说,执行权限允许用户进入目录,及执行搜索操作,即进入到目录中的路径(例如 cd 命令)。

权限的分配是基于三类不同的用户身份:

  1. 文件拥有者(Owner):创建文件或目录的用户,拥有对该文件或目录的默认权限。
  2. 用户组(Group):文件拥有者所在的用户组。在Linux中,一个用户可以属于多个用户组,但是每个文件有一个主要的用户组。
  3. 其他用户(Others):除了拥有者和用户组以外的所有用户。

ls -l 命令可以查看一个文件或目录的详细权限信息,例如:

-rwxr-xr-- 1 user group 12345 Jan 1 12:34 example.txt

这里的权限分段如下:

  • -rwxr-xr--:这代表了example.txt文件的权限。

    • 第一个字符标识文件类型(- 表示普通文件,d 表示目录,l 表示链接等)。
    • 接下来的三个字符 rwx 代表文件拥有者的权限:读(r)、写(w)、执行(x)。
    • 紧接着的三个字符 r-x 代表用户组的权限:读(r)、不可写(-)、执行(x)。
    • 最后的三个字符 r-- 代表其他用户的权限:读(r)、不可写(-)、不可执行(-)。
  • 1:表示硬链接的数量。

  • user:文件拥有者的用户名。

  • group:文件所属用户组的名称。

  • 12345:文件的大小。

  • Jan 1 12:34:文件最后修改时间。

  • example.txt:文件名。

文件类型:
d:文件夹
-:普通文件(文本文件,可执行程序,库等都叫普通文件)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

linux不通过后缀来区分文件类型,但是linux上面的工具(如gcc)可能会区分!
在这里插入图片描述
在这里插入图片描述

03.文件访问权限的相关设置方法

chmodchown 是两种用于管理Linux文件和目录权限的命令。它们用途分明,以下是每个命令的基本使用方法:

1. chmod(改变文件或目录的模式)

chmod 命令用于改变文件或目录的权限。它有两种基本的使用方式:符号模式(symbolic mode)和数字模式(numeric mode)。

使用符号模式:

在符号模式下,您可以为特定的用户(u:用户,g:组,o:其他,a:所有)指定要添加(+)、删除(-)或设置(=)的权限(r:读,w:写,x:执行)。

chmod [ugoa][+-=][rwx] file_or_directory

示例:

  • 给文件拥有者添加执行权限:
    chmod u+x filename
    
  • 删除组的写权限:
    chmod g-w filename
    
  • 给其他用户设置只读权限:
    chmod o=r filename
    ```bash
    
  • 给所有用户添加执行权限:
    chmod a+x filename
    
使用数字模式:

在数字模式中,权限由数字表示:4 stands for “读”(r),2 for “写”(w),1 for “执行”(x)。要为一个文件或目录设置权限,您需要为用户、组和其他用户选择它们的权限值。

chmod [mode] file_or_directory

其中,mode 是三位数,每位数是其对应用户的权限之和。

示例:

  • 给文件拥有者全部权限,组和其他用户只读权限:
    chmod 744 filename
    
  • 给文件拥有者和组读写执行权限,其他用户只读权限:
    chmod 775 filename
    
  • 移除所有用户的所有权限:
    chmod 000 filename
    

在这里插入图片描述
root账号不受权限的约束
在这里插入图片描述
在这里插入图片描述
所以对于普通用户,自身要受到对应权限的约束,即便这个文件是自己的!

2. chown(改变文件或目录的所有者)

chown 命令用于改变文件或目录的所有者和/或所属组。

改变所有者:
chown [新所有者] file_or_directory

示例:

  • 更改文件的所有者:
    chown newowner filename
    
同时改变所有者和组别:
chown [新所有者]:[新组] file_or_directory

示例:

  • 更改文件的所有者和组别:
    chown newowner:newgroup filename
    
只改变组别:
chown :[新组] file_or_directory

或者使用 chgrp 命令:

chgrp [新组] file_or_directory

示例:

  • 只更改文件的组别:
    chown :newgroup filename
    
  • 使用 chgrp 更改文件的组别:
    chgrp newgroup filename
    

使用 chmodchown 命令通常需要管理员权限,因此在使用它们时一般需要在命令前添加 sudo,这取决于您是否有足够的权限来对文件或目录进行更改。这里可以用su把自己变为root再修改

记得在执行这些命令之前,仔细检查所要赋予或更改的权限,错误的权限设置可能会导致系统安全问题或削弱文件的功能性。

例如:

  • chmod u+x example.txt: 给文件拥有者添加执行权限。
  • chmod g=r example.txt: 设置用户组的权限仅为读取。
  • chmod o-w example.txt: 移除其他用户的写入权限。
  • chmod 755 example.txt: 设定所有者权限为读写执行(7=4读+2写+1执行),组权限为读执行(5=4读+1执行),其他用户权限也为读执行(5=4读+1执行)。
    在这里插入图片描述

相应地,你可以使用 chown 命令改变文件的拥有者,以及 chgrp 命令改变文件的用户组。

在Linux和其他类Unix系统中,“可执行权限”(execute permission),表示为 x,是用于控制用户或用户组是否有权限执行某个文件的一种文件权限。理解可执行权限需要考虑两种情况:对文件的可执行权限和对目录的可执行权限。

对文件的可执行权限(x)

当一个文件具有可执行权限时,这意味着用户(或用户组)可以告诉操作系统启动并运行这个文件。一般来说,可执行文件包括二进制可执行文件或者脚本文件,如shell脚本、Python脚本等。

例如,如果您有一个名为 script.sh 的shell脚本,且设置了可执行权限,那么您就可以直接运行该脚本,而不必调用shell程序作为解释器来运行它:

./script.sh

如果该文件没有可执行权限,您尝试执行它时会遇到 “Permission denied” 的错误。

对目录的可执行权限(x)

目录的可执行权限与文件略有不同。对于目录,可执行权限表示用户(或用户组)能够"进入"该目录,即允许用户遍历目录的内容。具体来说,这包括使用如 cd 这样的命令切换到目录,以及允许对目录内容列表的访问权限(当和读权限(r) 结合时)

如果一个目录没有可执行权限,即使用户有该目录的读(r)权限,也无法列出目录内容。此外,即使知道文件的完整路径,也无法直接访问目录中的文件,因为遍历该目录需要可执行权限

例如,如果您的用户没有家目录(比如 /home/username)的可执行权限,即使您知道家目录中有一个文件叫做 important.txt,您也无法读取或编辑它,因为您无法进入家目录。

在这里插入图片描述
在这里插入图片描述
创建的目录文件,起始权限是包含x的,普通文件,起始权限是去掉x的

04.umask

umask(用户文件创建掩码)是一个Linux和其他类Unix系统中的命令,也是一个环境设置,用来确定新创建文件和目录的默认权限。umask 定义了当文件或目录被创建时,哪些权限应被设置。

在Linux系统中,文件通常默认具有666(-rw-rw-rw-)的权限,而目录通常默认具有777(drwxrwxrwx)的权限。这些权限是在没有umask值作用时的默认权限。umask值用来从这些默认权限中减去特定的权限,以提供不同的默认设置。

umask 值

umask 值通常以八进制数表示,默认值通常是022(只有所有者享有写权限),但这可以根据用户或系统的安全策略进行更改。当从默认权限中减去umask值时,结果是新文件或目录最终的权限。

例如,如果umask值设置为022

  • 新文件将有 644666-022)的权限,即 -rw-r--r--(所有者读写,组和其他只读)
  • 新目录将有 755777-022)的权限,即 drwxr-xr-x(所有者读写执行,组和其他只读执行)

设置 umask 值

可以通过在终端中输入umask命令 followed followed 以所需的权限掩码来设置umask值。例如:

umask 027

这将设置一个umask值,其中所有者不受影响,而组没有写权限,其他用户既没有写权限也没有执行权限。

查看当前 umask 值

要查看当前的umask值,只需输入umask命令而不带任何参数:

umask

系统将输出当前umask的值,通常是一个三位数的八进制数。

在配置文件中设置 umask

umask值可以在各种shell的启动脚本中设置,比如:

  • 全局范围(对所有用户生效):/etc/profile/etc/bash.bashrc(对于Bash shell)
  • 用户范围(仅对特定用户生效):~/.profile~/.bashrc~/.bash_profile(根据用户所使用的Shell和操作系统而定)

在这些文件中添加umask命令,可以改变登录时的默认umask值。

umask的设置对系统安全非常重要。太宽松的umask(例如 ‘000’)可能会导致新创建的文件和目录过于开放,任何用户都可以读写执行,这是一个严重的安全风险。因此,通常推荐具有合理限制的umask设置,例如022027,以确保系统不会无意中暴露敏感文件

05.粘滞位

粘滞位(Sticky Bit)是Unix和类Unix操作系统中特殊的文件权限设置之一。它最初是用来指明哪些可执行文件(主要是二进制文件)应该保持在交换区(swap)中,以便快速重新加载执行,不过这种用途在现代操作系统中已经不再使用。

现在,粘滞位的主要用途是用于目录。当粘滞位设置在目录上时,它影响该目录中文件的删除。粘滞位可以确保只有文件的所有者或根用户(root)可以删除或重命名目录内的文件。这一特点特别对公共目录很有用,如/tmp

/tmp等临时文件目录中,许多用户都有写入权限,系统利用粘滞位可以防止用户删除或重命名不属于他们的文件。即便用户有目录的写权限,没有粘滞位他们也不能删除他人的文件

查看粘滞位

当你使用 ls -l 命令列出一个设置了粘滞位的目录时,目录权限列表的最后一位不是 x 而是 tT,表明粘滞位被设置。

  • 如果可执行位也被设置(任何其他用户都有执行权限),显示 t
  • 如果可执行位没有被设置,显示为 T

如,以下命令输出了/tmp目录的权限:

ls -ld /tmp

输出可能如下所示:

drwxrwxrwt 10 root root 4096 Jan 31 12:00 /tmp

在上面的权限中,drwxrwxrwt 中的最后一个 t 表示粘滞位被设置。

设置粘滞位

你可以使用 chmod 命令来设置或取消设置目录的粘滞位:

  • 设置粘滞位:chmod +t directory_name
  • 取消设置粘滞位:chmod -t directory_name

例如,要设置一个名为 shared_dir 的目录的粘滞位:

chmod +t shared_dir

要取消设置该目录的粘滞位:

chmod -t shared_dir

在设置粘滞位时,通常也会为该目录设置所有用户的可写权限,以达到创建公共目录的目的。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

  • 一、超级管理员删除
  • 二、该目录的所有者删除
  • 三、该文件的所有者删除

权限设置表示法

使用八进制数字设置粘滞位时,前面会增加一个 1

  • 1777:代表所有用户都有读写执行权限,并且设置了粘滞位。
  • 1755:代表所有者有读写执行权限,组和其他用户有读执行权限,并且设置了粘滞位。

综上所述,尽管粘滞位的原始目的在现代已经不再使用,但在多用户环境中控制目录中文件的删除仍然非常有用。

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Linux 操作系统中,文件和目录都有权限属性,用于控制对它们的访问权限。这些权限属性包括读、写、执行权限,以及文件所有者、所属组等信息。以下是一些常用的 Linux 权限相关的命令和操作: 1. 查看文件和目录权限 使用 `ls -l` 命令可以查看文件和目录的权限信息: ``` ls -l file_name ls -l directory_name ``` 其中,`file_name` 是要查看权限的文件名称,`directory_name` 是要查看权限的目录名称。 2. 修改文件和目录权限 使用 `chmod` 命令可以修改文件和目录的权限: ``` chmod permissions file_name chmod permissions directory_name ``` 其中,`permissions` 是要设置的权限,可以使用数字或符号两种方式设置。数字方式的权限设置方式为三位数,每一位分别代表所有者、所属组和其他用户的权限。符号方式的权限设置方式为 `u`(所有者)、`g`(所属组)、`o`(其他用户)和 `a`(所有用户),以及 `+`(添加权限)、`-`(删除权限)和 `=`(设置权限)等符号。 例如,要将文件 `file.txt` 的所有者权限设置为可读写,所属组权限设置为只读,其他用户权限设置为不可访问,可以使用以下命令: ``` chmod 640 file.txt ``` 3. 修改文件所有者和所属组 使用 `chown` 命令可以修改文件所有者和所属组: ``` chown owner_name file_name chown owner_name:group_name file_name ``` 其中,`owner_name` 是要设置为文件所有者的用户名,`group_name` 是要设置为文件所属组的组名。 例如,要将文件 `file.txt` 的所有者设置为 `user1`,所属组设置为 `group1`,可以使用以下命令: ``` chown user1:group1 file.txt ``` 以上是一些常用的 Linux 权限相关的命令和操作。在 Linux 系统中,文件和目录的权限管理非常重要,可以保护文件和目录的安全性,防止未经授权的访问和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QuiteCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值