了解Linux —— 理解其中的权限

前言

在了解Linux权限之前,先来探讨我们使用的shell 命令它到底是什么?

Linux 是一个操作系统,我们称其为内核(kernel) ,正常情况下,我们一般用户操作并不是去直接使用内核,而是通过kernel 的外壳程序,也就是shellkernel 进行沟通。

Shell的简单定义:命令行解释器:

  • 将使用者的命令翻译给和内核处理。
  • 将核心的处理结果翻译给使用者。

​ 对于Windows ,我们使用图形化界面,这并不是直接操作Windows内核,而是通过图形接口,点击,然后完成我们的操作。

​ 而Shell对于Linux 有相同的作用,Shell主要对我们的指令进行解析,解析指令传给Linux内核,再根据内核运行出结果,解析给用户。

这里打个比方:

​ 你是一名比较内向的学生,你暗恋这同班的一名女同学,你不好意思向她表达爱意,然后你就通过她的闺蜜(或者朋友)向她含蓄的表达自己对她的喜欢,她闺蜜就将你的意思传达给她;然后她闺蜜再将她的意思传达给你。

这里你就是一名普通用户,你暗恋的女同学就好比操作系统内核,而她的闺蜜就相当于Shell

一、什么是权限

什么是权限,这个就字面意思,哈哈。

Linux下,有两种用户:一是超级用户(root)、二是普通用户。

超级用户(root): 可以再Linux系统下做任何事情,不受限制

普通用户:Linux下受到权限的限制,只能做部分事情

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

root用户下创建普通用户

root 就是Linux 下的超级用户,它可以创建和删除普通用户,修改普通用户密码等等。

创建用户:

复制代码
useradd 用户名

​ 也可能显示如下图所示,(原因是家目录中已经有用户lian的目录)。

修改用户密码:

复制代码
passwd 用户名

删除用户:

复制代码
userdel 用户名

用户的切换

知道了如何创建用户,现在来看用户之间的切换。

复制代码
su 用户名

二、Linux权限管理

1. 文件访问者的分类(人/用户)

  • 文件/目录的拥有者:u --- User
  • 文件/目录的所属组:g --- Group
  • 其他用户:o --- Other

知道了文件访问者分为三种,那有什么用呢?接着来看。

2. 文件类型和访问权限

文件属性:

我们知道,ll 是可以查看文件属性,现在来看一下:

一眼看去,烟花缭乱的;文件属性有很多,首先文件大小、文件最新修改时间和文件名这些就不用多说了,(连接数后面再讲解)

现在来看文件类型、文件权限和文件拥有者和所属组这写内容。

文件类型:

首先,文件类型对应文件属性中的开头,(例如:以d 开头的文件是目录/文件夹;以-开头的文件就是普通文件)

d:文件夹/目录

-:普通文件

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

文件权限:

​ 文件权限就三种,分别是r(可读) 、 w(可写) 和 x (可执行)。

r:对于文件来说,具有读取文件内容的权限;对于目录,具有浏览目录信息的权限。

w:对于文件来说,具有修改文件内容的权限;对于目录,具有创建、删除和移动目录中文件的权限。

x:对于文件来说,具有可执行文件的权限;对于目录来说,具有进入目录的权限。

-:表示不具有该部分权限。

再回头看,文件权限,它对应的是9个字符啊;这就涉及到文件权限中文件拥有者、文件所属组和其他用户这部分概念了。

以这个为例,看以权限:

首先,以d 开头表明这是一个目录;

其次的三个字符rwx : 这是文件拥有者的三个权限

再后面三个字符rwx : 这是文件所属组的三个权限

最后的三个字符r-x: 这是其他用户的三个权限

权限的表示方法:

Linux表示 权限说明
--- 没有任何权限
r-- 只读
-w- 只写
--x 仅可执行
rw- 可读可写
r-x 可读可执行
-wx 可写可执行
rwx 可读可写可执行

除了上图所示表示方式,还有一种表示方式(8进制表示)

​ 我们将每一个访问者的三个权限看作一个二进制数(其中-表示0,其余表示1);这样我们就得到了一个<=7并且>=0的二进制数(比如rwx 就是111 对应的数是7,---就是000对应的数是0)。

这样我们就能将权限(9个字符)转化成一个8进制数(比如:rw-rw-rw- 就是666rwxrwxrwx就是777)。

权限符号 8进制 2进制
r-- 4 100
-w- 2 010
--x 1 001
rw- 6 110
r-x 5 101
-wx 3 011
rwx 7 111
--- 0 000

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

​ 说了这么多,那我们能不能自己设置这些权限?当然可以,接着往下看

chmod修改文件权限

首先,我们应该明白一点,只有文件所有者和root可以修改权限

使用格式

复制代码
chmod [参数] 权限 文件名

​ 现在来看一下,修改权限有没有成功

chmod 权限命令值的格式

+: 向权限范围内加权限

-: 向权限范围内减(去掉)权限

=: 向权限范围内赋予代号所表示的权限

用户符号

  • u: 拥有者
  • g: 所属组
  • o: 其他用户
  • a: 所有用户

选项

-R: 递归修改文件权限

复制代码
chmod o+w code.c
chmod o-w code.c

设置权限还可以直接使用8进制数来设置

复制代码
chmod 777 code.c
chmod 666 code.c

chown

现在,我是文件的所有者,但是我不想要了,我想把文件所有者设置成别人;

chown 就是用来修改文件所有者的(有个前提,需要root权限)

​ 选项:

-R: 递归修改文件所有者

复制代码
chown [参数] 用户名 文件名

chgrp修改文件所属组

现在我们指定如何修改文件所有者了,那如何修改文件所属组呢?

chgrp用来修改文件所属组(这个前提也是,需要root权限)

复制代码
chgrp [参数] 用户组名 文件名

umask 查看修改文件掩码

现在我们新建的文件,默认权限是664(rw-rw-r--);新建的目录,默认权限是775(rwxrwxr-x);这个能不能修改呢?

usmak用来查看和修改文件掩码

​ 在看这个之前,先来看文件权限又什么影响的:

文件权限 = 默认权限 &(~umask)

默认权限

  • 新建文件夹默认权限=0666
  • 新建目录默认权限=0777

umask 权限掩码

可以直接用umask 查询和修改

复制代码
umask //查看
umask 044 //修改权限掩码

举例:

​ 我们也可以设置权限掩码:

3、粘滞位

​ 在Linux系统中,粘滞位 是一种特殊权限位,主要用于控制对特定目录中文件的删除操作。设置粘滞位后,只有文件的所有者或 root 用户才能删除或移动该文件,而其他用户即使有写权限也不能删除或移动这些文件

简单来说就是,有了粘滞位限制,普通用户只能删除和移动自己的文件(root无视粘滞位)。

注意: 粘滞位对目录有效,对文件无效。

粘滞位的作用:

粘滞位通常用于多用户环境中的公共目录,以防止用户删除或移动其他用户的文件。设置粘滞位后,目录的其他用户权限位会显示为 tT

设置粘滞位

复制代码
chmod +t 目录名 //给目录添加粘滞位
chmod -t 目录名 //给目录去掉粘滞位

当一个目录被设置为粘滞位,则该目录下的文件只能由

  1. 超级管理员(root)删除
  2. 该目录的所有者删除
  3. 该文件的所有者删

三、番外篇:sudo提权

这里来了解一下sudo提权,它可以让执行的只有拥有root权限。

但是,我们现在使用sudo提权显示失败:

​ 这里提示大概意思就是,用户lxb不在sudoers这个文件里,(sudoers文件就好似系统里的白名单)。

sudoers这个文件在 /etc/sudoers路径下,我们只需要去这个文件里进行修改即可;

我们需要在这个文件中添加这样一行内容:

复制代码
[用户名]  ALL=(ALL:ALL) ALL

在文件中大致在100行作用CentOs下),(ubantu大致在20行)

创建完成之后我们就能够让普通用户进sudo提权了。

有了sudo提权以后,我们就可以使用普通用户,必要时使用sudo提权,而不需要切换账号了。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

相关推荐
用户97183563346615 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪17 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
不会C语言的男孩1 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈1 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
程序猿阿伟1 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome