3.5 权限管理命令

3.5.1 权限介绍

1.为什么需要权限

绝大多数用户使用的是个人计算机,而使用个人计算机的用户一般都是被信任的用户(如家人、朋友等)。在这种情况下,大家都可以使用管理员身份直接登录。又因为管理员拥有最大权限,所以给我们带来了错觉,以为在计算机中不需要分配权限等级,不需要使用不同的账户。

但是在服务器上就不一样了,在服务器上运行的数据越重要(如游戏数据),价值越高(如电子商城数据、银行数据),那么对权限的设定就要越详细,用户的分级也要越明确。所以,在服务器上,绝对不是所有的用户都使用root身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级。

2.文件的所有者、所属组和其他人

用ls -l命令,可以查看文件的所有者、所属组,例如:

    [root@localhost ~]# ls -l mylog.log
-rw-r--r--. 1 LaytonWang root 34 Dec 10 21:21 mylog.log

这里的LaytonWang用户就是文件的所有者,root组就是文件的所属组。文件的所有者一般就是这个文件的建立者。

用户组就是一组用户的集合,那为什么要把用户放入一个用户组中呢?当然是为了方便管理。如果我们有100位用户,而这100位用户对同一个文件的权限是一致的,那我们是一位用户一位用户地分配权限方便,还是把100位用户加入一个用户组中,然后给这个用户组分配权限方便呢?不言而喻,一定是给一个用户组分配权限更加方便。

3.权限位的含义

ls -l命令,长格式显示的第一列就是文件的权限,例如:

    [root@localhost ~]# ls -l mylog.log
-rw-r--r--. 1 LaytonWang root 34 Dec 10 21:21 mylog.log

第一列的权限位如果不计算最后的“.”(这个点的含义我们在后面解释),则共有10位,这10位权限位的含义如下图所示。

●第1位代表文件类型。

Linux不像Windows使用扩展名表示文件类型,而是使用权限位的第1位表示文件类型。虽然Linux文件的种类不像Windows中那么多,但是分类也不少,详细情况可以使用“info ls”命令查看。这里只讲一些常见的文件类型。

“-”:普通文件。

“b”:块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1就是这种文件。

“c”:字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等。

“d”:目录文件。Linux中一切皆文件,所以目录也是文件的一种。

“l”:软链接文件。

“p”:管道符文件。这是一种非常少见的特殊设备文件。

“s”:套接字文件。这也是一种特殊设备文件,一些服务支持Socket访问,就会产生这样的文件。

●第2~4位代表文件所有者的权限。

如果有字母,则代表拥有对应的权限;如果是“-”,则代表没有对应的权限。

“r”:代表read,是读取权限。

“w”:代表write,是写权限。

“x”:代表execute,是执行权限。

●第5~7位代表文件所属组的权限,同样拥有“rwx”权限。

●第8~10位代表其他人的权限,同样拥有“rwx”权限。

以上就是文件基本权限的含义。

我们再看看权限位的这个“.”的作用。这个点是在CentOS 6以上的系统中才出现的,在以前的系统中是没有的。如果在文件的权限位中含有“.”,则表示这个文件受SE Linux的安全规则管理。

3.5.2 基本权限的命令

修改权限的命令chmod:

●命令名称:chmod。

●英文原意:change file mode bits。

●所在路径:/usr/bin/chmod。

●执行权限:所有用户。

●功能描述:修改文件的权限模式。

(1)命令格式

    [root@localhost ~]# chmod [选项] 权限模式 文件名
选项:
-R: 递归设置权限,也就是给子目录中的所有文件设定权限

(2)权限模式

chmod命令的权限模式的格式是“[ugoa][[+-=][perms]]”,也就是“[用户身份][[赋予方式][权限]]”的格式。

●用户身份。

u:代表所有者(user)。

g:代表所属组(group)。

o:代表其他人(other)。

a:代表全部身份(all)。

●赋予方式。

+:加入权限。

-:去除权限。

=:设置权限。

●权限。

r:读取权限(read)。

w:写权限(write)。

x:执行权限(execute)。

例子1用“+”加入权限

    [root@localhost ~]# touch iron_man
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 root root 0 Jan 25 07:29 iron_man
#这个文件的默认权限是“所有者:读、写权限;所属组:只读权限;其他人:只读权限”
[root@localhost ~]# chmod u+x iron_man
#给所有者加入执行权限
[root@localhost ~]# ll iron_man
-rwxr--r--. 1 root root 0 Jan 25 07:29 iron_man

例子2给多个身份同时加入权限

    [root@localhost ~]# chmod g+w, o+w iron_man
#给所属组和其他人同时加入写权限
[root@localhost ~]# ll iron_man
-rwxrw-rw-. 1 root root 0 Jan 25 07:29 iron_man

例子3用“-”减去权限

    [root@localhost ~]# chmod u-x, g-w, o-w iron_man
#给所有者减去执行权限,给所属组和其他人都减去写权限,也就是恢复默认权限
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 root root 0 Jan 25 07:29 iron_man

例子4用“=”设置权限

用“+-”赋予权限是比较麻烦的,需要先确定原始权限是什么,然后在原始权限的基础上加减权限。其实可以使用“=”来直接设定权限,例如:

    [root@localhost ~]# chmod u=rwx, g=rw, o=rw iron_man
#给所有者赋予权限“rwx”,给所属组和其他人赋予权限“rw”
[root@localhost ~]# ll iron_man
-rwxrw-rw-. 1 root root 0 Jan 25 07:29 iron_man

使用“=”赋予权限,确实不用在原始权限的基础之上进行加减了,但是依然要写很长一条命令,还可以使用数字权限的方式来赋予权限。

(3)数字权限

数字权限的含义:

文件的“读、写、执行”三种权限,占用了三个位置,可以用3位二进制来对应这个三个位置。对应位置有权限为“1”,对应位置没有权限为“0”,设置权限时用对应的八进制数设置。

●000:代表“---”权限,八进制为0。

●001:代表“--x”权限,八进制为1。

●010:代表“-w-”权限,八进制为2。

●011:代表“-wx”权限,八进制为3。

●100:代表“r--”权限,八进制为4。

●101:代表“r-x”权限,八进制为5。

●110:代表“rw-”权限,八进制为6。

●111:代表“rwx”权限,八进制为7。

例如:给文件赋予“755”权限,二进制为“111”“101”“101”,即“rwx”“r-x”“r-x”。

    [root@localhost ~]# chmod 755 iron_man
[root@localhost ~]# ll iron_man
-rwxr-xr-x. 1 root root 0 Jan 25 07:29 iron_man

我们很少会使用“457”这样的权限,因为这样的权限是不合理的,因为文件所有者的权限还没有其他人的权限大呢。除非是实验需要,否则一般情况下所有者的权限要大于所属组和其他人的权限。

3.5.3 基本权限的含义

(1)权限含义的解释

首先,读、写、执行权限对文件和目录的作用是不同的。

①权限对文件的作用。

●读(r):

对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行cat、more、less、head、tail等文件查看命令。

●写(w):

对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行vim、echo等修改文件数据的命令。

注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件,则需要对文件的上级目录拥有写权限。

●执行(x):

对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在Linux中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行,不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限。

②权限对目录的作用。

●读(r):

对目录有读(r)权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些子文件和子目录。如果把权限对应到命令上,那么一旦对目录拥有了读(r)权限,就可以在目录下执行ls命令,查看目录下的内容了。

●写(w):

对目录有写(r)权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪切子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写(w)权限,就可以在目录下执行touch、rm、cp、mv命令。对目录来说,写(w)权限是最高权限。

●执行(x):

目录是不能运行的,那么对目录拥有执行(x)权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行(x)权限,就可以对目录执行cd命令,进入目录。

3.5.4 所有者和所属组命令

(1)chown命令

chown是修改文件和目录的所有者和所属组的命令。

●命令名称:chown。

●英文原意:change file owner and group。

●所在路径:/usr/bin/chown。

●执行权限:所有用户。

●功能描述:修改文件和目录的所有者和所属组。

①命令格式

    [root@localhost ~]# chown [选项] 所有者:所属组 文件或目录
选项:
-R:递归设置权限,也就是给子目录中的所有文件设置权限

②常见用法

例子1修改文件的所有者

之所以需要修改文件的所有者,是因为赋予权限的需要。当有普通用户需要对某个文件拥有最高权限的时候,如果把这个普通用户的权限修改为最高权限,是非常不安全的做法。合理的做法是修改文件的所有者,这样既能让普通用户拥有最高权限,又不会影响其他普通用户。例如:

    [root@localhost ~]# touch iron_man
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 root root 0 Jan 25 08:39 iron_man
#文件的所有者是root,普通用户LaytonWang对这个文件仅拥有只读权限
[root@localhost ~]# chown LaytonWang iron_man
#修改文件的所有者
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 LaytonWang root 0 Jan 25 08:39 iron_man
#所有者变成了LaytonWang用户,这时LaytonWang用户对这个文件就拥有了读、写权限

例子2修改文件的所属组

修改所属组,也是为了调整文件的权限。如果可以把用户加入同一个组当中,然后直接调整所属组的权限,那当然要比一个一个用户赋予权限要简单方便。例如:

    [root@localhost ~]# chown LaytonWang: LaytonWang iron_man
#“:”之前是文件的所有者,之后是所属组。这里的“:”也可以使用“.”代替
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 LaytonWang LaytonWang 0 Jan 25 08:39 iron_man

Linux中用户组的建立与Windows中是不同的。在Windows中,新建的用户都属于users这个组,而不会建立更多的新组。但是在Linux中,每个用户建立之后,都会建立和用户名同名的用户组,作为这个用户的初始组,user用户组是自动建立的。

例子3普通用户修改权限

并不是只有root用户才可以修改文件的权限,而是root用户可以修改任何文件的权限。但是普通用户只能修改自己文件的权限。也就是说,只有普通用户是这个文件的所有者,才可以修改文件的权限。

    [root@localhost ~]# cd /home/LaytonWang/
#进入LaytonWang用户的家目录
[root@localhost LaytonWang]# touch test
#由root用户新建文件test
[root@localhost LaytonWang]# ll test
-rw-r--r--. 1 root root 0 Jan 25 08:56 test
#文件所有者和所属组都是root用户
[root@localhost LaytonWang]# su - LaytonWang
#切换为LaytonWang用户
[LaytonWang@localhost ~]$ chmod 755 test
chmod: changing permissions of ‘test’: Operation not permitted
# LaytonWang用户不能修改test文件的权限
[LaytonWang@localhost ~]$ exit
#退回到root身份
[root@localhost LaytonWang]# chown LaytonWang test
#由root用户把test文件的所有者改为LaytonWang用户
[root@localhost LaytonWang]# su - LaytonWang
#切换为LaytonWang用户
[LaytonWang @localhost ~]$ chmod 755 test
# LaytonWang用户由于是test文件的所有者,所以可以修改文件的权限
[LaytonWang @localhost ~]$ ll test
-rwxr-xr-x. 1 LaytonWang root 0 Jan 25 08:56 test

(2)chgrp命令

●命令名称:chgrp。

●英文原意:change group ownership。

●所在路径:/urs/bin/chgrp。

●执行权限:所有用户。

●功能描述:修改文件和目录的所属组。

例如:

    [root@localhost ~]# touch iron_man
[root@localhost ~]# chgrp LaytonWang iron_man
#修改iron_man文件的所属组为LaytonWang用户组
[root@localhost ~]# ll iron_man
-rw-r--r--. 1 root LaytonWang 0 Jan 25 09:10 iron_man

3.5.5 umask默认权限

(1)umask默认权限的作用

umask默认权限是Linux权限的一种,主要用于让Linux中的新建文件和目录拥有默认权限。Linux是一个比较安全的操作系统,而安全的基础就是权限,所以,在Linux中所有的文件和目录都要有基本的权限,新建的文件和目录当然也要有默认的权限。

查看系统的umask权限:

    [root@localhost ~]# umask
0022
#用八进制数值显示umask权限
[root@localhost ~]# umask -S
u=rwx, g=rx, o=rx
#用字母表示文件和目录的初始权限

查看数值的umask权限,看到的是4位数字“0022”,其中第一个数字“0”代表的是文件的特殊权限(SetUID、SetGID、Sticky BIT),后3位数字“022”才是真正的umask默认权限。

(2)umask默认权限的计算方法

先了解一下新建文件和目录的默认最大权限。

●对文件来讲,新建文件的默认最大权限是666,没有执行(x)权限。这是因为执行权限对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。

●对目录来讲,新建目录的默认最大权限是777。这是因为对目录而言,执行(x)权限仅仅代表进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。

何计算umask默认权限。按照官方的标准算法,umask默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。这种方法既不好计算,也不好理解,并不推荐。

这里还是按照权限字母来讲解umask权限的计算方法。我们就按照默认的umask值是022来分别计算一下新建文件和目录的默认权限。

●文件的默认权限最大只能是666,换算成字母就是“-rw-rw-rw-”;而umask的值是022,也换算成字母就是“-----w--w-”。把两个字母权限相减,得到的就是新建文件的默认权限:

(-rw-rw-rw-)-(-----w--w-)=(-rw-r--r--)。

●目录的默认权限最大可以是777,换算成字母就是“drwxrwxrwx”;而umask的值是022,也换算成字母就是“d----w--w-”。也把两个字母权限相减,得到的就是新建目录的默认权限:

(drwxrwxrwx)-(d----w--w-)=(drwx-r-xr-x)。

(3)umask默认权限的修改方法

umask默认权限可以直接通过命令来进行修改,例如:

    [root@localhost ~]# umask 002
[root@localhost ~]# umask 033

不过,通过命令进行的修改只能临时生效,一旦重启或重新登录就会失效。如果想让修改永久生效,则需要修改对应的环境变量配置文件/etc/profile。例如:

    [root@localhost ~]# vi /etc/profile
…省略部分内容…
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
#如果UID大于199(普通用户),则使用此umask值
else
umask 022
#如果UID小于199(超级用户),则使用此umask值
fi
…省略部分内容…

小结:

文件权限位共10位(如:-rw-r--r--),第1位是文件类型,第2~4、5~7、8~10位分别是文件所有者、所属组、其他人的权限;chmod命令用来修改权限;chown命令用来修改文件和目录的所有者和所属组;chgrp命令用来修改文件和目录的所属组;umask用来查看和临时设置文件和目录的默认初始权限。

Linux笔记03: Linux常用命令_3.5权限管理命令的更多相关文章

  1. Linux常用命令(第二版) --权限管理命令

    权限管理命令 1.chmod[change the permissions mode of a file] : /bin/chmod 语法: chmod [{ugo}{+-=}{rwx}] [文件或目 ...

  2. Linux常用命令之链接命令和权限管理命令

    目录 1.链接命令 一.生成链接文件命令:ln 2.权限管理命令3.总结 一.更改文件或目录权限命令:chmod 二.改变文件或目录所有者命令:chown 三.改变文件或目录所属组命令:chgrp 四 ...

  3. Linux系列教程(五)——Linux常用命令之链接命令和权限管理命令

    前一篇博客我们讲解了Linux文件和目录处理命令,还是老生常淡,对于新手而言,我们不需要完全记住命令的详细语法,记住该命令能完成什么功能,然后需要的时候去查就好了,用的多了我们就自然记住了.这篇博客我 ...

  4. Linux系列教程(五)——Linux链接命令和权限管理命令

    前一篇博客我们讲解了Linux文件和目录处理命令,还是老生常淡,对于新手而言,我们不需要完全记住命令的详细语法,记住该命令能完成什么功能,然后需要的时候去查就好了,用的多了我们就自然记住了.这篇博客我 ...

  5. linux笔记:linux常用命令-权限管理命令

    一个文件的权限只有root和所有者可以更改. 权限管理命令:chmod(改变文件或目录的权限) 权限的数字表示: 用权限加减的方式改变权限(u代表所有者,g代表所属组,o代表其他人,a代表所有人): ...

  6. Linux学习之常用权限管理命令(二)

    (一)常用权限管理命令 (1)chmod命令 (2)chown (3)chgrp (4)umask (一)常用权限管理命令 (1)chmod命令 命令名称:chmod命令英文原意:change the ...

  7. Linux常用命令之用户权限管理chmod、chown、chgrp、umask命令讲解

    这节课我们重点来学习权限管理命令,说到权限大家可能第一时间能想到的就是读.写.执行 rwx 三种权限,在正式讲解权限命令之前,先简单的介绍一下rwx权限对于文件和目录的不同含义. 权限字符 权限 对文 ...

  8. 第3章 Linux常用命令(2)_权限管理命令

    2. 权限管理命令 2.1 改变文件或目录权限:chmod (1)chmod命令 命令名称 chmod(change the permission mode of a file) 命令所在路径 /bi ...

  9. Linux常用命令2 权限管理命令

    1.权限管理命令:chmod 上面图片中的ugoa与rwx并不是一个命令,而是不同选项 u 所有者  g 所属组 o 其他人 a 所有人 r 读取权限 w写入权限  x 执行权限 chmod u+x ...

  10. Linux学习笔记(八)权限管理命令

    权限管理命令 权限位含义 chmod chown chgrp umask默认权限 权限位含义 第1位代表文件类型 "-":普通文件 "b":块设备文件 &quo ...

随机推荐

  1. 手把手教你使用人工智能生成游戏 3D 素材

    引言 生成式 AI 已成为游戏开发中艺术工作流的重要组成部分.然而,正如我在 之前的文章 中描述的,从文本到 3D 的实用性仍落后于 2D.不过,这种情况正在改变.本文我们将重新审视 3D 素材生成的 ...

  2. Linux 内核音频数据传递主要流程 (上)

    Linux 用户空间应用程序通过声卡驱动程序(一般牵涉到多个设备驱动程序)和 Linux 内核 ALSA 框架导出的 PCM 设备文件,如 /dev/snd/pcmC0D0c 和 /dev/snd/p ...

  3. 《SQL与数据库基础》10. 存储引擎

    目录 存储引擎 MySQL体系结构 存储引擎简介 三种经典存储引擎 InnoDB 逻辑存储结构 MyISAM Memory 区别及特点 存储引擎选择 本文以 MySQL 为例 存储引擎 MySQL体系 ...

  4. mysql 大表如何ddl 👑

    大家好,我是蓝胖子,mysql对大表(千万级数据)的ddl语句,在生产上执行时一定要千万小心,一不小心就有可能造成业务阻塞,数据库io和cpu飙高的情况.今天我们就来看看如何针对大表执行ddl语句. ...

  5. Remix-Ethereum IDE连接本地详解

    Remix-Ethereum IDE连接本地 ​ 由于在学习和做项目的过程中,很多人用的都是网页版的Remix,而在网页中的代码是存储在缓存中的,在使用过程中容易丢失,所以将Remix与本地文件连接起 ...

  6. Spring Boot中自动装配机制的原理

    SpringBoot中自动装配机制的原理 1.自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC容器里面,不需要开发人员再去写Bean的装配配置, 2.在Spring Boot ...

  7. 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理

    在我们窗口新增.编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时 ...

  8. C++算法之旅、08 基础篇 | 质数、约数

    质数 在>1的整数中,如果只包含1和本身这两个约数,就被称为质数(素数) 866 试除法判定 866. 试除法判定质数 - AcWing题库 \(O(n)\) bool isprime(int ...

  9. MySQL快速导入千万条数据(2)

    目录 一.导入前1000万条数据 二.导入前2000万条数据 三.导入后面的1000万条数据 四.建索引 五.总结 接上文,继续测试3000万条记录快速导入数据库. 一.导入前1000万条数据 清库. ...

  10. 高可用mongodb集群(分片+副本):用户权限配置

    目录 ■ 创建副本集认证的key文件 ■ 修改配置文件指定keyfile ■ 重新启动节点 ■ 创建帐号和认证 ■ 用管理员帐号可查看整体的分片情况 ■ 用普通帐号访问数据 ■ 客户端连接多个mong ...