Linux 权限

一、Linux 下的用户分类

  • 超级管理员:root,只有一个,不受约束,命令行提示符是 #
  • 普通用户:可以有多个,受权限约束,命令提示符是 $

su [用户名]
功能:切换用户

su (省略 root),在同一个 bash 下切换身份为 root
su - ,目录也会切换为 /root,让 root 进行重新登录

普通用户户切换为其他普通用户或者 root,需要其密码
root 切换为其他用户,不需要密码(root 不受约束)

需要将用户加入信任列表,才可以使用 sudo 命令,对单条指令进行提权
sudo 命令
功能:以 root 身份执行该命令

二、Linux 文件权限

1. 文件的三种权限

  • r: 可以用 cat、more、less等指令读取文件的内容
  • w:可以用 echo 和 重定向、nano等指令向文件写入内容
  • x:可以执行文件

2. 文件访问者的分类

  • 文件拥有者:创建该文件的用户
  • 文件所属组:和文件拥有者属于同一个组
  • 文件的 other:不是创建该文件的用户

3. Linux 文件类型

通过 ls -l 命令,可以查看当前目录下的子目录和文件的详细信息

-bash-4.2$ ls -l
drwxrwxr-x 4 al al 4096 Jan  3 22:25 dir
-rw-rw-r-- 1 al al  136 Jan  3 19:30 my.txt

在 Linux 系统中,是通过文件详细信息第一列的第一个字符来区分文件类型
有如下文件类型
-:普通文件(代码源文件,文本文件,HTML文件等)
d:文件夹
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如键盘、屏幕等串口设备)
s:网络套接口文件

在 Linux 系统中,不会通过文件后缀来区分文件类型
例如:将 C语言代码编译后生成的 a.out 文件,改名还是可以运行的

-bash-4.2$ touch test.c
-bash-4.2$ ls
test.c
-bash-4.2$ nano test.c
-bash-4.2$ cat test.c
#include <stdio.h>

int main()
{
	printf("hello Linux\n");
	return 0;
}
-bash-4.2$ gcc test.c
-bash-4.2$ ls
a.out  test.c
-bash-4.2$ ./a.out
hello Linux
-bash-4.2$ mv a.out a.txt
-bash-4.2$ ls
a.txt  test.c
-bash-4.2$ ./a.txt
hello Linux

但是 Linux 上的一些软件是通过文件后缀来区分文件类型的
例如:将C语言代码的文件后缀改为 txt,gcc 编译便会报错

-bash-4.2$ ls -l
total 4
-rw-rw-r-- 1 al al 72 Jan  7 14:50 test.c
-bash-4.2$ gcc test.c
-bash-4.2$ ls -l
total 16
-rwxrwxr-x 1 al al 8440 Jan  7 14:53 a.out
-rw-rw-r-- 1 al al   72 Jan  7 14:50 test.c
-bash-4.2$ rm a.out
-bash-4.2$ ls -l
total 4
-rw-rw-r-- 1 al al 72 Jan  7 14:50 test.c
-bash-4.2$ mv test.c test.txt
-bash-4.2$ ls -l
total 4
-rw-rw-r-- 1 al al 72 Jan  7 14:50 test.txt
-bash-4.2$ gcc test.txt 
test.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

4. 文件属性

在这里插入图片描述
为什么文件的详细信息中没有 other 属性?
不是拥有者,不是所属组的人就是 other,因为 other 人太多了,所以 Linux 不记录文件的 other 属性

三、修改文件权限

只有文件的拥有者和 root 才可以修改文件的访问权限

chmod [参数] 文件
功能:更改文件的访问权限

  • + 向权限范围增加权限代号所表示的权限
  • - 向权限范围取消权限代号所表示的权限
  • = 向权限范围赋予权限代号所表示的权限

用户符号:

  • u:拥有者
  • g:所属组
  • o:其它
  • a:所有人

chmod 可以修改一个或多个人的一个或多个权限

-bash-4.2$ ls -l
total 4
---------- 1 al al 72 Jan  7 14:50 test.txt
-bash-4.2$ chmod u+rw,g+r,o+r test.txt 
-bash-4.2$ ls -l
total 4
-rw-r--r-- 1 al al 72 Jan  7 14:50 test.txt

也可以用三位的 8 进制数表示权限,三个字母为一组,并且每一组中的每一位只有两种情况,可以理解为有权限代表 1,没有权限代表 0,因此可以将每一位看做二进制位,三位作为一个 8 进制位

chmod xxx 文件

-bash-4.2$ chmod 000 test.txt 
-bash-4.2$ ls -l
total 4
---------- 1 al al 72 Jan  7 14:50 test.txt
-bash-4.2$ chmod 664 test.txt 
-bash-4.2$ ls -l
total 4
-rw-rw-r-- 1 al al 72 Jan  7 14:50 test.txt

在更改文件的拥有者和所属组时,需要得到别人的同意,但是客观条件下不可能得到别人的允许,所以只能强制给别人,因此只有 root 可以改变文件的拥有者和所属组

chown 用户名 文件
功能:修改文件的拥有者

chown 用户名:用户名 文件
功能:修改文件的拥有者和所属组

chgrp 用户名 文件
功能:修改文件的所属组

file 文件或目录
功能:辨识文件类型
可以根据文件内容来辨识文件类型
列如:我在 file.txt 中写了c代码

-bash-4.2$ file file.txt 
file.txt: C source, ASCII text
-bash-4.2$ cat file.txt 
#include <stdio.h>

int main()
{
    printf("hello\n");

    return 0;
}

四、目录权限

  • r:必须同时拥有 x 权限,才能正常显示目录下的子目录和文件信息,否则只能显示文件名
  • w:必须同时拥有 x 权限,才能在目录下新建或删除文件,或者修改文件属性
  • x:可以在目录下执行命令,如 cd 进入目录

五、默认权限

为什么创建的普通文件(不包括可执行文件)的默认权限是 664,而创建的目录的默认权限是 775(不同的操作系统默认权限可能不一样)

-bash-4.2$ touch my.txt
-bash-4.2$ mkdir my
-bash-4.2$ ls -l
total 4
drwxrwxr-x 2 al al 4096 Jan  7 15:04 my
-rw-rw-r-- 1 al al    0 Jan  7 15:03 my.txt

因为系统用权限掩码 umask 屏蔽了起始权限

起始在 Linux 系统中,普通文件的起始权限被设置为 666,目录的起始权限被设置为 777
但是系统为了更好的控制文件权限,会通过权限掩码(umask),对起始权限做处理

掩码:在 1010 1011 中提取后四位,可以这样做 1010 1011 & 0000 1111,0000 1111 就被称作 掩码

权限掩码:在起始权限中,去掉在 umask 中出现的权限,并且不能影响其他任何权限
因此 默认权限 = 起始权限 & (~umask)

umask
功能:查看umask

umask 0005 第一位不管
功能:修改 umask

六、粘滞位

背景:在使用 Linux 时,未来可能会让 root 创建一些共享目录,用来保存普通用户产生的临时数据,普通用户可以选择不放开文件的权限,也可以选择放开文件的权限,让其他普通用户可以对该文件进行操作,因此共享目录的 other 权限(r:让普通用户可以查看共享目录下有哪些文件,w:让普通用户可以在共享目录下新建或删除文件,或者修改文件的属性(文件名,权限等),x:让普通用户可以进入该共享目录)必须是放开的,即使在共享目录下,普通用户之间也会受到权限的约束,那么会存在这种情况,张三在共享目录下创建了一个文件,突然有一天,张三不想给其他普通用户(李四)提供权限时,李四就无法操作该文件,但是由于目录的 w 和 x 权限一定是放开的,那么李四就可以把张三的文件给删了(你不给我权限,那我就把你的文件删了),这很不合理,于是为了让普通用户之间可以共享文件,并且还要防止其他普通用户删我的文件,就有了粘滞位的概念

只能给目录添加粘滞位:因为问题产生的原因是目录

chmod +t 目录
功能:给指定目录添加粘滞位

加了粘滞位的目录,只有该目录的 other 权限的 x 权限会变成 t

具有粘滞位的目录,只有 root,文件拥有者,目录拥有者、所属组(一般都是 root)才可以删除该文件

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
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 系统中,文件和目录的权限管理非常重要,可以保护文件和目录的安全性,防止未经授权的访问和操作。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值