前言
在了解Linux权限之前,先来探讨我们使用的
shell
命令它到底是什么?
Linux
是一个操作系统,我们称其为内核(kernel
) ,正常情况下,我们一般用户操作并不是去直接使用内核,而是通过kernel
的外壳程序,也就是shell
与kernel
进行沟通。
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-
就是666
,rwxrwxrwx
就是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
无视粘滞位)。注意: 粘滞位对目录有效,对文件无效。
粘滞位的作用:
粘滞位通常用于多用户环境中的公共目录,以防止用户删除或移动其他用户的文件。设置粘滞位后,目录的其他用户权限位会显示为
t
或T
。
设置粘滞位
chmod +t 目录名 //给目录添加粘滞位
chmod -t 目录名 //给目录去掉粘滞位
当一个目录被设置为粘滞位
,则该目录下的文件只能由
- 超级管理员(
root
)删除- 该目录的所有者删除
- 该文件的所有者删
三、番外篇: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