网站建设技术支持,有没有哪种网站推荐一下,百度关键词优化和百度推广,商业展示空间设计案例及赏析#x1f47b;内容专栏#xff1a; Linux操作系统基础 #x1f428;本文概括#xff1a; 用户之间的切换、sudo提权、Linux权限管理、文件访问权限的相关方法、目录权限、粘滞位等 #x1f43c;本文作者#xff1a; 阿四啊 #x1f438;发布时间#xff1a;2023.9.11 … 内容专栏 Linux操作系统基础 本文概括 用户之间的切换、sudo提权、Linux权限管理、文件访问权限的相关方法、目录权限、粘滞位等 本文作者 阿四啊 发布时间2023.9.11 Linux权限
概念
Linux权限是一种关键的安全概念用于控制用户对文件和目录的访问和操作。理解和管理权限对于确保系统的安全性和数据的保护至关重要。 Linux下有两种用户超级用户root、普通用户。
超级用户可以再linux系统下做任何事情不受限制普通用户在linux下做有限的事情。超级用户的命令提示符是“#”普通用户的命令提示符是“$”
用户切换命令
普通用户切换到root用户
su root切换到root用户但不改变环境。
使用 su root 命令将切换到root用户的身份但不会改变当前环境设置。这意味着将继续使用原始用户的环境变量、路径设置等。 例如如果使用 su root 切换到root用户将继续使用原始用户的工作目录和shell配置。
[Asilocalhost ~]$ su root
Password:
[rootlocalhost Asi]# exit
[Asilocalhost ~]$ su - root切换到root用户同时改变环境。
使用 su - root 命令将切换到root用户的身份并且会改变当前环境设置包括工作目录、环境变量和shell配置。这样子会话更像是以root用户的身份登录系统一样。 例如如果使用 su - root 切换到root用户将获得root用户的工作目录和与root用户相关的环境设置。
[Asilocalhost ~]$ su - root
Password:
Last login: Sun Sep 10 19:00:11 CST 2023 on pts/0
[rootlocalhost ~]# logout
[Asilocalhost ~]$ 说明普通账号更为root账号 su单纯的账号切换。su -让root账号重新登录。需要输入root用户的密码。 普通用户之间的切换
su和su -命令切换到普通用户和root是一样的所以你需要切换到另一个用户前提还是需要知道Ta的密码啦~
[Asilocalhost ~]$ whoami
Asi
[Asilocalhost ~]$ su cyn
Password:
[Asilocalhost ~]$ su - cyn
Password:
[Asilocalhost ~]$ sudo提权
普通用户可以使用 sudo 执行需要root用户权限的命令例如安装软件、修改系统配置文件或执行系统维护任务。
[Asilocalhost ~]$ sudo ls
[sudo] password for Asi:
Asi is not in the sudoers file. This incident will be reported.若显示xx is not in the sudoers file. This incident will be reported.说明该普通用户没有sudo权限因为新建的普通用户默认不支持sudo权限。 需要编辑sudoers文件。步骤如下
首先切换到root用户输入以下命令(或使用 vim /etc/sudoers)
[rootlocalhost ~]# sudo visudo在文件中查找下面的行可以在底行模式输入/Allow搜索即可
## Allow root to run ang commands anywhere在上述行的下面添加一行以允许普通用户使用sudo。例如如果要允许用户Asi使用sudo可以添加以下行 然后我们创建一个test.txt文件是以普通用户Asi创建的然后我们再用sudo命令创建一个test2.txt的文件并没有要求我输入密码是因为以方便普通用户在几分钟或者十几分钟之内可能仍需要强权执行任务。
[Asilocalhost ~]$ sudo ls
[sudo] password for Asi:
[Asilocalhost ~]$ touch test.txt
[Asilocalhost ~]$ ll
total 0
-rw-rw-r-- 1 Asi Asi 0 Sep 10 19:52 test.txt
[Asilocalhost ~]$ sudo touch test2.txt
[Asilocalhost ~]$ ll
total 0
-rw-r--r-- 1 root root 0 Sep 10 19:53 test2.txt
-rw-rw-r-- 1 Asi Asi 0 Sep 10 19:52 test.txtLinux权限管理
在linux操作系统当中大多数的操作都涉及对于文件的操作。所以说权限通常与文件、目录关联在一起。
文件访问者的分类(人)
拥有者文件和文件目录的所有者u—User中国平民 法律问题所属组文件和文件目录的所有者所在的组的用户g—Groupother其它用户o—Others 外国人
说明那么上面的root用户和普通用户与这里的用户有冲突吗并不是超级用户与普通用户是指具体的人而这里的文件访问者可以看作一种角色而具体的人可以承担各种各样的角色。
文件类型和访问权限(事物属性)
[Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt文件类型
⚠️注意在Linux当中Linux系统本身区分文件类型与后缀无关是与该文件是否具有可执行权限有关后缀是给人看的
那么Linux文件类型如何分类呢用第一列的第一个字符来区分文件类型。
d[directory]文件夹-普通文件l[link]软链接类似Windows的快捷方式b[block]块设备文件例如硬盘、光驱等p[pipe]管道文件c[char]字符设备文件例如屏幕等串口设备s[socket]套接口文件
基本权限
读r/4Read对文件而言具有读取文件内容的权限对目录来说具有浏览该目录信息的权限。写w/2Write对文件而言具有修改文件内容的权限对目录来说具有删除移动目录内文件的权限。执行x/1execute对文件而言具有执行文件的权限对目录来说具有进入目录的权限。“-” 表示不具有该项权限。
文件权限值的表示方法
字符表示方法
Linux表示说明Linux表示说明r - -只读- w -仅可写- - x仅可执行r w -可读可写- w x可写可执行r - x可读可执行r w x可读可写可执行- - -无权限
八进制数值表示方法
权限符号八进制二进制r4100w2010x1001r w6110r x5101w x3011r w x7111- - -0000
文件访问权限的相关设置方法
1. chmod命令 功能设置文件的访问权限 格式chmod [参数] 权限 文件名 常用选项 R-递归修改目录文件的权限说明只有文件的拥有者和root才可以修改文件的权限 chmod命令权限值的格式 ①用户标识符、-、权限字符 权限符号 :向权限范围增加权限代号所表示的权限 -:向权限范围取消权限代号所表示的权限 :向权限范围赋予权限代号所表示的权限 用户标识符 u拥有者 g拥有者同组用 o其它用户 a所有用户 示例 [Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod ux abc.txt
[Asilocalhost ~]$ ll
total 4
-rwxrw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod gx,ow abc.txt
[Asilocalhost ~]$ ll
total 4
-rwxrwxrw- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod ax test.txt
[Asilocalhost ~]$ ll
total 4
-rwxrwxrw- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rwxrwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod urw test.txt
[Asilocalhost ~]$ ll
total 4
-rwxrwxrw- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt②三位八进制数字 示例 [Asilocalhost ~]$ ll
total 4
-rwxrwxrw- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod 664 abc.txt
[Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
[Asilocalhost ~]$ chmod 640 test.txt
[Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-r----- 1 Asi Asi 103 Sep 11 10:31 test.txt2. chown命令
功能修改文件的拥有者格式chown [参数] 用户名 文件名示例[Asilocalhost ~]$ chown user1 test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted
[Asilocalhost ~]$ sudo chown user1 test.txt
[Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-r----- 1 user1 Asi 103 Sep 11 10:31 test.txt3. chgrp命令 功能修改文件或目录的所属组 格式chgrp [参数] 用户组名 文件名 常用选项-R 递归修改文件或目录的所属组 示例 [Asilocalhost ~]$ sudo chgrp user1 test.txt
[sudo] password for Asi:
[Asilocalhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 0 Sep 11 11:35 abc.txt
-rw-r----- 1 user1 user1 103 Sep 11 10:31 test.txt4. umask命令 前提我们先研究一下默认权限 通过观察我们可以看到创建普通文件的默认权限用八进制数字表示是664 创建目录文件的默认权限用八进制数字表示是775 [Asilocalhost ~]$ touch test1.txt
[Asilocalhost ~]$ mkdir dir1
[Asilocalhost ~]$ ll
total 8
drwxrwxr-x 2 Asi Asi 4096 Sep 11 13:16 dir1
-rw-rw-r-- 1 Asi Asi 0 Sep 11 13:16 test1.txt功能查看或修改文件权限掩码 新建文件起始权限为666新建目录起始权限为777所以实际上你所创建的文件和目录看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到权限掩码umask的影响。 格式umask [权限值] 我们可以输入umask查看Linux的默认权限掩码为0002是需要看后三位第一位告诉我们为八进制数字不需要管第一位。那么我们使用umask 0004修改权限掩码之后再次创建test2.txt文件发现这个文件的权限变为了662咦那么最终的权限是怎么推算的呢 [Asilocalhost ~]$ umask
0002
[Asilocalhost ~]$ umask 0004
[Asilocalhost ~]$ touch test2.txt
[Asilocalhost ~]$ ll
total 8
drwxrwxr-x 2 Asi Asi 4096 Sep 11 13:16 dir1
-rw-rw-r-- 1 Asi Asi 0 Sep 11 13:16 test1.txt
-rw-rw--w- 1 Asi Asi 0 Sep 11 13:27 test2.txt规则最终权限 起始权限 (~umask) .凡是在权限掩码中出现的权限最终都要在起始权限中去掉。 那么最终的权限就是单纯的起始权限减去umask所得到的结果吗? 验证 如果对于一个普通文件起始权限为666将权限掩码设为003那么最终普通文件权限会是我们计算的rw-rw--wx权限吗 我们执行umask 0003创建一个test3.txt文件然后执行ll命令发现此普通文件的权限为rw-rw-r-- .结果是怎么回事呢 [Asilocalhost ~]$ umask 0003
[Asilocalhost ~]$ touch test3.txt
[Asilocalhost ~]$ ll
total 8
-rw-rw-r-- 1 Asi Asi 0 Sep 11 14:03 test3.txt让我们具体分析一下 所以我们的计算并不是相减那么简单当然也并不复杂这里就需要用到按位与运算符来计算。我们知道1 1 1 1 0 0 0 1 0 0 0 0所以我们可以先对umask按位取反再按位与上起始权限所得到的就是最终权限了。
5. file 命令
功能说明辨识文件类型语法 file [选项] 文件或目录常用选项 -c 详细显示指令执行过程便于排错或分析程序执行的情形。-z 尝试去解读压缩文件的内容
目录的权限
可执行权限 如果目录没有可执行权限, 则无法cd到目录中。
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。进入一个目录需要什么权限呢 我们对拥有者的r、w、x权限进行了验证最后没有x权限的情况下系统提示:-bash: cd: dir: Permission denied所以进入一个目录需要执行权限。 [Asilocalhost study]$ mkdir dir
[Asilocalhost study]$ ll dir
total 0
[Asilocalhost study]$ ll
total 4
drwxrwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
[Asilocalhost study]$ chmod u-r dir
[Asilocalhost study]$ cd dir
[Asilocalhost dir]$ cd ..
[Asilocalhost study]$ chmod ur,u-w dir
[Asilocalhost study]$ cd dir
[Asilocalhost dir]$ cd ..
[Asilocalhost study]$ chmod uw,u-x dir
[Asilocalhost study]$ ll
total 4
drw-rwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
[Asilocalhost study]$ cd dir
-bash: cd: dir: Permission denied那么对于一个目录的r权限将有什么限制呢 通过下面验证我们可以知道是否允许一个指定用户查看目录的文件列表需要r权限。 [Asilocalhost study]$ ll
total 4
d-wxrwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
[Asilocalhost study]$ cd dir
[Asilocalhost dir]$ ls
ls: cannot open directory .: Permission denied
[Asilocalhost dir]$ touch test.txt
[Asilocalhost dir]$ ll
ls: cannot open directory .: Permission denied那么对于一个目录的w权限将有什么限制呢 我们删去了dir目录的w权限发现可以进入该目录可以查看该目录的文件列表但是不可以在该目录下创建文件。 [Asilocalhost study]$ chmod ur,u-w dir
[Asilocalhost study]$ ll
total 4
dr-xrwxr-x 2 Asi Asi 4096 Sep 11 15:03 dir
[Asilocalhost study]$ cd dir
[Asilocalhost dir]$ pwd
/home/Asi/study/dir
[Asilocalhost dir]$ ll
total 0
-rw-rw-r-- 1 Asi Asi 0 Sep 11 15:03 test.txt
[Asilocalhost dir]$ touch test1.txt
touch: cannot touch ‘test1.txt’: Permission denied于是, 问题来了~~ 换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限. 这好像不太对啊 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下。
[rootlocalhost ~]# chmod 0777 /home/
[rootlocalhost ~]# ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[rootlocalhost ~]# touch /home/root.c
[rootlocalhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 lisi lisi 4096 9月 19 15:53 lisi
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[rootlocalhost ~]# su - lisi
[lisilocalhost ~]$ rm /home/root.c #lisi可以删除root创建的文件
rm是否删除有写保护的普通空文件 /home/root.cy
[lisilocalhost ~]$ exit
logout一般而言不同的账号是不会在同一目录下的。
因为默认新建的用户只有拥有者也就是root才具有权限。[rootlocalhost home]# ll
total 24
drwx------ 3 admin admin 4096 Aug 31 11:14 admin
drwx------ 4 Asi Asi 4096 Sep 11 14:52 Asi
drwx------ 2 zhangsan zhangsan 4096 Sep 11 12:56 user1
drwx------ 2 zhangsan zhangsan 4096 Sep 11 15:25 zhangsan那么假如有特殊情况应任务需要在一个团队中多个账号协同共享一些数据呢这样就不会在某一个人的主工作目录之下而是在root用户的根目录下创建一个名为shared的目录要求团队用户都在这个share路径下工作那么此时对于root的角度来说other的rwx权限也需要同时放开那么为了避免他人删除该目录下的一些共享数据(假如两人闹掰了张三想要删除李四在shared目录里写的文件)此时w权限是不是应该取消呢? 如果取消那么团队里的成员该如何往shared里面写数据呢 这样的问题是不是很棘手下面针对这个问题我们引入粘滞位的概念。
粘滞位
[rootlocalhost ~]# chmod t /home/ # 加上粘滞位
[rootlocalhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[rootlocalhost ~]# su - litao
[litaolocalhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm是否删除有写保护的普通空文件 /home/abc.cy
rm: 无法删除/home/abc.c: 不允许的操作当一个目录被设置为粘滞位(用chmod t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除