Linux权限管理(用户+文件)
Posted 爱敲代码的三毛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux权限管理(用户+文件)相关的知识,希望对你有一定的参考价值。
文章目录
Linux权限的概念
Linux下有两种用户:
- 超级用户(#)
- 普通用户($)
- 超级用户可以在Linux系统下做任何事情,没有限制
- 普通用户:在Linux下只能做有限事情
用户切换
语法:su [用户名]
从普通用户切换到root用户直接输入 su
命令(root 可以省略),再输入密码就好了
从root用户切换到普通用户,输入命令 su 用户名
sudo命令
语法:sudo [想要提升权限的命令]
功能:如果我们单纯想提升当前命令的权限,可以给指令带上sudo
比如我们作为一个普通用户要修改另外一个普通用户的密码(肯定是修改不了的)
(1)在root用户下,打开 /etc下的 sudoers文件
(2)在文件中找到 %wheel这一行,在当前行下面添加要提升当前命令权限的用户名
(3)添加成功后保存突出,那么当前用户就可以使用 sudo命令提升当前指令权限了
测试sodo
通过dudo命令修改其它用户的密码
注意:sudo命令每隔一段时间都需要输入当前用户的密码才能执行
Linux权限管理
文件拓展名
我们都知道,Windows是依赖文件的拓展名来区分文件的,比如 “.txt是文本文件”,“.exe是可执行文件”,但Linux不是通过拓展名来区分文件类型的,Linux的拓展名只是为了更好的区分文件类型
常见的系统文件目录
/bin/
:存放系统命令,普通用户和root都可以执行(比如 ls、pwd)/boot/
:系统启动目录,保存与系统启动相关的文件,入内核文件和启动引导程序/dev
:设备文件保存位置/etc/
:配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务配置文件全部保存在此目录中,比如用户信息、服务的启动脚本、常用服务的配置文件等/home/
:存放普通用户的根目录(每个用户都有一个根目录)/lib/
:系统调用的函数库保存位置/media/
:挂载目录。系统用来挂载媒体设备,如软盘和光盘mnt
:挂载目录,早期的Linux中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如U盘、移动硬盘和其它操作系统分区misc
:挂载目录,系统建议采用来挂载NFS服务的共享目录,虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的opt
第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中,不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件/root/
:root的主目录,普通用户主目录在/home/下,root主目录直接在 “/” 下sbin
:保存系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看srv
:服务数据目录,一些系统服务启动后,可以在这个目录中保存所需要的数据/tmp
:临时目录,系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。这个目录不建议保存重要数据,最后定期清楚tmp目录的数据lost+found/
:当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录proc
:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的sys
:虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息
文件访问者的分类(人)
对对Linux的用户权限分类,可以分为三类
- 文件拥有者(就是创建文件的人)
- 文件所属组(文件属于哪个组)
- 其它人(other)(不是文件拥有者也不属于文件所属组的人)
解释:
对于一个用户,无论是root还是普通用户都能充当 拥有者和所属组或者是其它
文件所属组就是文件属于哪个组,每个文件在创建时默认都是属于创建人的那个小组。
举个列子
比如一台Linux服务器上有两个组,A组不想让B组的人看见A组的代码或文件,就可以通过文件所属组的权限来让自己小组的人能看见,让组外的其它人开不见。
这样的分组,可以灵活分配让大家的团队意识更强,如果没有所属组这个分类的话就会非常乱。
所以所属组就是为了更灵活的进行权限配置,满足团队协作
通过查看文件详细信息可以看到,文件所属组和文件拥有者
文件类型和权限
常见的文件类型主要是普通文件和目录
-
:普通文件(文本、可执行程序、库)d
:目录c
:字符文件、显示器、键盘p
:管道文件l
:链接文件(类似Windows快捷方式)s
:套接口文件b
:块设备文件(比如硬盘)
在Linux当中文件类型是和拓展名没有关系的
文件信息的前一段由10个字符组成,分别表示不同的意思
第一个字符:文件类型
后续9个三个为一组,分别表示你
文件所属者权限
文件所属组权限
其它人的权限
文件权限表示
权限属性
r
:读取w
:写入x
:可执行-
:无权限
(1)字符表示法
符号表示 | 权限 |
---|---|
r - - | 只读权限 |
- w - | 只写权限 |
- - x | 仅可执行权限 |
r w - | 可读可写权限 |
- w x | 可写可执行权限 |
r - x | 可读可执行权限 |
r w x | 可读可写可执行权限 |
(2)八进制表示法
假如把三个权限位看成三个比特位,1代表有权限0代表没有权限,那么三个比特位最大能表示的数字是7,刚好够表示所有情况。
比如:1 1 1 表示可读可写可执行,1 0 0 表示只有读权限,0 0 0 表示没有任何权限
如果用8进制表示这三个比特位就刚好表示从0到7的所有情况
符号表示 | 二进制表示 | 八进制表示 | 权限 |
---|---|---|---|
- - - | 0 0 0 | 0 | 无任何权限 |
- - x | 0 0 1 | 1 | 仅可执行权限 |
- w - | 0 1 0 | 2 | 只写权限 |
- w x | 0 1 1 | 3 | 可写可执行权限 |
r - - | 1 0 0 | 4 | 只读权限 |
r - x | 1 0 1 | 5 | 可读可执行权限 |
r w - | 1 1 0 | 6 | 可读可写权限 |
r w x | 1 1 1 | 7 | 可读可写可执行权限 |
设置文件权限
chmod命令
功能:设置文件的访问权限
语法:chmod [参数] [权限] [文件名]
注意:只有文件的拥有者和root才可以修改文件的权限
选项可以用字符也可以用3位8进制
用户表示符+、-、=
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限
用户符号
u
:文件拥有者g
:拥有者同组用户o
:其它用户a
:所有用户
字符选项示例
取消文件所属者的读取和写入权限
取消用户所属组的所有权限
给其他用户添加写权限
取消所有用户的写权限
如果要同时设置不同的用户权限可以用 逗号隔开
=
示例
可以直接用 =
给对应用户赋予对应的权限
八进制选项示例
符号表示 | 二进制表示 | 八进制表示 | 权限 |
---|---|---|---|
- - - | 0 0 0 | 0 | 无任何权限 |
- - x | 0 0 1 | 1 | 仅可执行权限 |
- w - | 0 1 0 | 2 | 只写权限 |
- w x | 0 1 1 | 3 | 可写可执行权限 |
r - - | 1 0 0 | 4 | 只读权限 |
r - x | 1 0 1 | 5 | 可读可执行权限 |
r w - | 1 1 0 | 6 | 可读可写权限 |
r w x | 1 1 1 | 7 | 可读可写可执行权限 |
-R 递归修改权限
-R递归修改文件权限
设置文件拥有者(chown)
语法:chown [参数] [用户名] [文件名]
功能:修改文件拥有者
常用选项:-R
递归修改文件拥有者
注意:修改文件拥有者需要root用户,或者用sudo命令提升权限
使用sudo命令提升权限
设置文件所属组(chgrp命令)
语法:chgrp [参数] [要修改新用户组名]
功能:修改文件所属组
常用选项:-R
递归修改文件或者目录的所属组
注意:chgrp也需要 sudo
命令提升权限
同时修改文件所属者和所属组
语法:sudo chown [用户名]:[用户名] [文件名]
umask命令
语法:umask
功能:查看或修改文件掩码
为什么创建的普通文件,或者对应都有一个默认权限,默认权限为何又是当前的样子?
- 新建的文件默认权限是 0666
- 新建的目录默认权限是 0777
这两默认的权限位只要关注后面三位即可,文件权限上面讲了使用八进制位标识
我们发现文件和目录的默认权限,和我们创建出来的文件和目录和默认权限不一样。
这是为什么呢?
其实真正的权限位是通过计算得来的
计算方法为,先将umask按位取反再按位与上默认的文件或者目录权限值
(~umask)&[文件或者目录的权限值]
如果我们将文件掩码修改成 777
那么默认的文件权限就是 不可读、不可写也不可执行
就可以理解为凡是在 umask中出现的权限位,都不应该在 最终 权限位中出现
最终权限 = 默认权限&(~umask)
目录权限
- 可执行权限:如果没有可执行权限,就无法cd到目录中
- 可读权限:如果没有可读权限,则无法用ls等其它查看命令查看目录中的文件内容
- 可写权限:如果目录没有可写权限,就无法在目录中创建文件,也无法在目录中上删除文件
那么问题来了。
文件权限只有读写和可执行,并没有删除权限,那么就是说只要某个用户只要有写目录的权限,用户就可以删除目录中的文件,而不用管这个用户是否有这个文件的写权限
我们发现hhy 用户也可以删除root用户的文件
粘滞位
注意:粘滞位一般用于公开的目录上,也就是其它用户有权,读写执行
语法:chmod +t [目录名]
只要给目录加上粘滞位,其它用户就无法删除你的文件了
注意:如果这个目录本身就是你自己的那么你想怎么删就怎么删,加粘滞位也没用
以上是关于Linux权限管理(用户+文件)的主要内容,如果未能解决你的问题,请参考以下文章