最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

每日焦点!Linux笔记03: Linux常用命令_3.5权限管理命令

来源:博客园

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用来查看和临时设置文件和目录的默认初始权限。

关键词: 修改文件 新建文件