Linux基础学习笔记(三)——文件的基本权限

文章目录

  • 前言
  • 用户和用户组概述
  • 文件属性和权限
    • 文件的属性
    • 修改文件权限和属性的命令
      • chown
      • chgrp
      • chmod
  • 目录的权限
  • 小结

前言

前几篇博客总结了linux中不痛不痒的基础操作,这篇博客开始总结Linux中的文件和目录,涉及Linux中的用户权限相关内容。对应《鸟哥的Linux私房菜》第五章

用户和用户组概述

关于用户和用户组的概念,实在不想絮叨,《鸟哥的Linux私房菜》一书中的一个图其实解释的非常不错
Linux基础学习笔记(三)——文件的基本权限_第1张图片

以王二毛为例,文件的而所有者是王二毛,王二毛属于王大毛家这个用户组,而张小猪相对于王二毛,只是系统的其他人而已。对于所有的文件,还存在一个用户root,这个就对应图中的天神。关于用户的账号权限设置,这个我们后续会单独总结,这里只是先抛出这个概念,然后在这些概念的基础上梳理文件的相关权限知识。

默认情况下,所有用户的账号都是记录在/etc/passwd这个文件内,所有用户的密码都是记录在/etc/shadow这个文件下,此外Linux的所有组名,都是记录在/etc/group这个文件内,针对这三个文件的作用,我们后面会介绍。

文件属性和权限

文件的属性

通过ll命令,查看根目录文件夹下的所有文件信息
Linux基础学习笔记(三)——文件的基本权限_第2张图片

可以看到具体的文件信息,这些详情信息书中也有介绍
Linux基础学习笔记(三)——文件的基本权限_第3张图片
从左到右,依次表示文件类型权限,文件连接数,文件所有者,文件所属组群,文件大小,文件最后修改时间,文件名。

第一个字符代表文件类型,常用的文件类型如下

字符 类型
d 表示是文件夹
- 表示是文件
l 表示是链接(link)
b 表示块设备
c 表示字符设备

后续的三个字符为一组,且均为[rwx]的三个参数组合。r表示可读,w代表可写,x代表可执行。这三个权限的位置不会改变,如果没有该权限,则用减号[-]代替。这个分为三组,第一组为文件拥有者可具备的权限,第二组为加入此群组账号的权限,第三组为除文件所有者和本群组之外的其他用户的所有权限。

后面的一个数字表示当前文件的硬链接数。

之后的两列,分别表示当前文件的所有者和所属组群。最后三列分别表示文件大小、文件最后修改时间和文件名。

权限对于文件而言至关重要,在修改Linux文件和目录的属性之前,一定要搞清楚,什么数据是可变的,什么是不可变的。

修改文件权限和属性的命令

这里重点介绍三个命令,chgrp,chown,chmod三个命令。在此之前,还是需要知道如何由普通用户切换成root用户以及如何新增用户。

sudo命令,暂时以root身份运行命令

sudo su 命令,可以在当前会话内一直成为root用户

su 和 su - ,sudo -i 能达到同样的效果

[coderman@linux-start ~]$ sudo su
[root@linux-start coderman]#
[coderman@linux-start ~]$ su
Password: 
[root@linux-start coderman]# exit
exit
[coderman@linux-start ~]$ su -
Password: 
Last login: Wed Feb 23 19:52:39 CST 2022 on pts/0
[root@linux-start ~]# exit
logout
[coderman@linux-start ~]$ sudo -i

useradd命令可以新增用户,前提是用root权限操作该用户

[root@localhost ~]# useradd thomas
[root@localhost ~]# ls /home
coderman  thomas
[root@localhost ~]# passwd thomas
Changing password for user thomas.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# ls -l /home
total 4
drwx------. 16 coderman coderman 4096 Apr 30 10:16 coderman
drwx------.  3 thomas   thomas     78 Apr 30 10:30 thomas

用户新增完之后,会默认增加一个同名称的组群。

chown

chown命令是修改文件的所有者,用法很简单,后接新的所有者的用户名,再接新文件名。如果连目录下的所有次目录文件需要同时变更所有者的话,则需要加上-R选项

##在root用户的home目录下切换到thomas用户
[root@localhost ~]# su thomas
##由于thomas用户没有权限,/root目录访问被拒
[thomas@localhost root]$ ls
ls: cannot open directory .: Permission denied
##进入到当前用户(thomas)用户的home目录
[thomas@localhost root]$ cd
##创建thomas文件
[thomas@localhost ~]$ touch thomas.txt
[thomas@localhost ~]# ls -al
total 12
drwx------. 5 thomas thomas 125 Apr 30 10:36 .
drwxr-xr-x. 4 root   root    36 Apr 30 10:30 ..
-rw-r--r--. 1 thomas thomas  18 Apr  1  2020 .bash_logout
-rw-r--r--. 1 thomas thomas 193 Apr  1  2020 .bash_profile
-rw-r--r--. 1 thomas thomas 231 Apr  1  2020 .bashrc
drwxrwxr-x. 3 thomas thomas  18 Apr 30 10:35 .cache
drwxrwxr-x. 3 thomas thomas  18 Apr 30 10:35 .config
drwxr-xr-x. 4 thomas thomas  39 Apr 29 19:29 .mozilla
-rw-rw-r--. 1 thomas thomas   0 Apr 30 10:35 thomas.txt ##这里可以看到,这个文件所属的组默认是thomas的同名用户组
## 切换到root用户用chown改变用户所有者,如果不是root用户组的用户,chown命令会被拒绝
[thomas@localhost ~]$ chown coderman thomas.txt
chown: changing ownership of ‘thomas.txt’: Operation not permitted
[thomas@localhost ~]$ su root
Password:
[root@localhost thomas]# chown coderman thomas.txt
[root@localhost thomas]# ls -al
total 12
drwx------. 5 thomas   thomas 125 Apr 30 10:36 .
drwxr-xr-x. 4 root     root    36 Apr 30 10:30 ..
-rw-r--r--. 1 thomas   thomas  18 Apr  1  2020 .bash_logout
-rw-r--r--. 1 thomas   thomas 193 Apr  1  2020 .bash_profile
-rw-r--r--. 1 thomas   thomas 231 Apr  1  2020 .bashrc
drwxrwxr-x. 3 thomas   thomas  18 Apr 30 10:35 .cache
drwxrwxr-x. 3 thomas   thomas  18 Apr 30 10:35 .config
drwxr-xr-x. 4 thomas   thomas  39 Apr 29 19:29 .mozilla
-rw-rw-r--. 1 coderman thomas   0 Apr 30 10:35 thomas.txt ##文件所有者已经变更。

ps:上述操作是直接在thomas用户的home目录下操作的,目前即使通过root用户将指定文件的所有者变更为coderman用户了,但是coderman用户依旧无法访问到该文件,因为coderman用户依旧没有访问thomas用户home目录的权限。

chgrp

##切换到root用户
[thomas@localhost ~]$ su root
Password: 
[root@localhost thomas]# ls
thomas.txt
##将thomas用户目录下的thomas文件移动到coderman用户目录下,并重命名为coderman.txt
[root@localhost thomas]# mv thomas.txt ../coderman/coderman.txt
[root@localhost thomas]# cd ../coderman/
[root@localhost coderman]# ll coderman.txt 
-rw-rw-r--. 1 thomas thomas 25 Apr 30 10:46 coderman.txt
## 然后切换到coderman用户
[root@localhost coderman]# su coderman
## 访问用户,发现还是thomas的用户,并且用户组还是thomas的
[coderman@localhost ~]$ ll coderman.txt 
-rw-rw-r--. 1 thomas thomas 25 Apr 30 10:46 coderman.txt
## 切换到root,修改用户组,修改文件所有者
[root@localhost coderman]# chgrp coderman coderman.txt 
[root@localhost coderman]# chown coderman coderman.txt
[root@localhost coderman]# ll
total 8
-rw-rw-r--. 1 coderman coderman   27 Apr 30 10:57 coderman.txt

其实chown命令也是可以修改文件的用户群组的

[root@localhost coderman]# chown thomas:thomas coderman.txt
[root@localhost coderman]# ll
total 8
-rw-rw-r--. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt

chmod

改变文件的读写权限,就是通过这个chmod命令。设置权限的方式有两种,可以通过数字也可以通过符号来进行权限的变更。Linux文件的基本权限有9个,分别是/owner/group/others三种身份各有自己的/read/write/execute权限。

1、通过数字类型改变文件权限

每种身份各自的三个权限数值是累加的,比如当前权限为[rwxrwx—],则

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others = — = 0+0+0 = 0

## 切换到root用户
[coderman@localhost ~]$ su root
Password: 
[root@localhost coderman]# chmod 770 coderman.txt 
[root@localhost coderman]# ll
total 8
-rwxrwx---. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt

如果要将权限变成[rwxr-xr-x],则通过chmod 754 即可。

2、通过符号改变文件权限

可以籍由u,g,o来代表三种身份的权限,此外a代表all即全部的身份
Linux基础学习笔记(三)——文件的基本权限_第4张图片

[root@localhost coderman]# ll
total 8
-rwxrwx---. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt
## 通过u-x,删除文件所有者的执行权限
[root@localhost coderman]# chmod u-x coderman.txt 
[root@localhost coderman]# ll
total 8
-rw-rwx---. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt
## 通过g-x,删除所有者
[root@localhost coderman]# chmod g-x coderman.txt 
[root@localhost coderman]# ll
total 8
-rw-rw----. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt

除此之外,还有多种写法

chmod go-r file ## 文件file的群组和其他用户组均移除读权限
chmod +x file ## 文件file的所有用户增加运行权限
chmod u=rwx,g=r,o=- file ## 文件file的所有者分配rwx权限,文件组其他用户分配读权限,其他用户不分配任何权限。

以上三个命令中,除了chmod命令之外,其他两个命令都需要切换到root用户运行。

目录的权限

文件权限对于一般文件与文件目录还是有所差异的。

对于文件而言:r(read)权限可以读取文件的实际内容,但不能修改。w(write)权限可以编辑、新增或者修改文件内容(但不能删除该文件)。x(execute)该文件可以被系统执行。但是针对目录而言,这三个权限又有所不同。

对文件夹而言:

r权限——标示具有读取目录结构列表的权限,这个时候目录下的文件名和数据可以通过ls等命令列出来

w权限——这个可以说是文件夹的最高权限,可以在文件夹下建立新的文件和目录,也可以删除已经存在的文件和目录,修改目录下的文件名,移除该目录内的文件等。

x权限——具有x权限的用户表示用户可以进入到该目录。可以通过cd命令,进入到目录中

没有x权限,无法进入到指定目录文件中,如果在某个目录下不具有x权限,那么就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或者w权限。因此对于目录而言,如果要让其他用户能浏览指定文件夹下的文件,至少也要基于其他用户该目录的r和x权限

## coderman用户创建test文件夹
[coderman@localhost ~]$ mkdir test
[coderman@localhost ~]$ ls
coderman.txt  Documents  Music     Public  Templates  Videos
Desktop       Downloads  Pictures  share   test
## 修改用户权限,取消test文件的x权限
[coderman@localhost ~]$ chmod u-x test/
##直接访问test文件夹被拒,都无法进入到test文件夹 这个时候虽然有r权限,但都进不去,r相当于是无用的
[coderman@localhost ~]$ cd test
bash: cd: test: Permission denied

没有w权限,无法修改目录列表下的文件

## 取消w权限
[coderman@localhost ~]$ chmod 575 test/
[coderman@localhost ~]$ ll
total 8
-rw-rw----. 1 thomas   thomas     27 Apr 30 10:57 coderman.txt
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Desktop
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Documents
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Downloads
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Music
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Pictures
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Public
drwxrwx---. 1 root     vboxsf   4096 Mar 18 20:08 share
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Templates
dr-xrwxr-x. 2 coderman coderman   22 Apr 30 16:52 test
drwxr-xr-x. 2 coderman coderman    6 Apr 29 19:39 Videos
## 成功进入test目录
[coderman@localhost ~]$ cd test/
## 梳理读取相关文件列表
[coderman@localhost test]$ ls
test.txt
## 但是由于没有w权限,故而不能移动文件
[coderman@localhost test]$ mv test.txt test-new.txt
mv: cannot move ‘test.txt’ to ‘test-new.txt’: Permission denied
## 删除,也不行
[coderman@localhost test]$ rm -f test.txt 
rm: cannot remove ‘test.txt’: Permission denied
##新建,也不允许
[coderman@localhost test]$ touch new.txt
touch: cannot touch ‘new.txt’: Permission denied

没有r权限,无法通过ls读取test中的文件列表

[coderman@localhost ~]$ chmod 371 test/
##能顺利进入到test文件夹
[coderman@localhost ~]$ cd test/
[coderman@localhost test]$ ls
ls: cannot open directory .: Permission denied

《鸟哥的Linux私房菜》一书中,针对这三个权限有一个很好的实例来解释:一个目录好比一个抽屉。目录的X权限表示这个抽屉的钥匙,目录的r权限表示这个抽屉中会有个灯,方便用户查找文件。目录的w权限表示可以对这个抽屉中的文件进行拿取或者放入。

小结

简单梳理了一下文件和目录的权限,下一小节梳理一下用户组的相关内容

你可能感兴趣的:(Linux,linux)