@TOC
目录
对于初学者来说,Linux系统为啥需要设定不同的权限,所有人都直接使用管理员root不是特别省事?
由于绝大多数用户使用的是个人计算机,使用者一般都是被信任的人(如家人、朋友等)。在这种情况下,大家都可以使用管理员身份直接登录。但在服务器上就不是这种情况了,往往运行的数据越重要(如游戏数据),价值越高(如电子商城数据、银行数据),则服务器中对权限的设定就要越详细,用户的分级也要越明确。
假如我有一个软件开发的团队,那么我想让团队的每一个人都可以使用某些目录下的文件,而非团队的其他人则不予以开放,我们可以将团队里的所有人拉到一个群组中, 并赋予这个群组读写目录的权限,这样就可以实现要求。同时我作为团队的核心,我掌控着这台服务器,为了确保这台服务器的正常运行,root用户的密码只能掌握在我的手里,其他人的权限或大或小都应该受到限制,不然有可能会被别人对服务器造成无法挽回的影响。
因此,在服务器上 ,绝对不是所有的用户都使用root身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级
Linux权限的概念
Linux下有两大用户:超级用户(root)和普通用户。
超级用户:可以在linux系统中做任何事情,不受限制。
普通用户:在linux下只能做有限的事情
(超级用户的命令提示符是 # ,普通用户的命令提示符为 $ )
命令:su [用户名]
功能:切换用户
例如:假如有个普通用户zhangsan,要从root用户切换到普通用户zhangsan,则使用 su zhangsan。要从普通用户zhangsan切换到root用户则使用su root(root可以省略 或者 su - ),此时系统会提醒root用户的命令。
文件访问者的分类
文件和文件目录的所有者 | u----user |
文件和文件目录的所有者所在的组的用户 | g----group |
其他用户 | o---Others |
Linux修改文件和目录的所属组(chgrp命令)
chgrp命令用于修改文件(或目录)的所属组。
注:便于记忆可以理解为“change group”的缩写
chgrp命令的用法很简单,基本格式是:
chgrp [-R] 所属组 文件名(目录名)
-R(注意是大写)选项常作用于更改目录的所属组,表示更改连同子目录中所有文件的所属组信息
使用这个命令需要注意的是,要被改变的群组名必须真实存在的,否则命令就无法正确执行,会提醒:invalid group: ‘群组名’
这行命令是创建一个叫sslx的群组
可以看到,在具有 sslx群组的前提下,我们成功修改了 test.cpp 文件的所属组,但我们再次试图将所属组修改为 sadfs 时,命令执行失败,就是因为系统的 /etc/group 文件中,没有 sadfs 群组。
修改文件和目录的所有者和所属组(chown命令)
chown命令,可以认为是“ change owner”的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。
chown的基本格式是:
chown [-R] 所有者 文件或目录
-R(注意大写)选项表示连同子目录中的所有文件都更改所有者。
如果需要同时更改所有者和所属组,chown命令的基本格式是:
chown [-R] 所有者:所属组 文件或目录
注意,在 chown 命令中,所有者和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如 zhangsan.test),就会造成系统误判。因此,建议使用冒号连接所有者和所属组。
当然chown命令也支持单纯修改文件或者目录的所属组,例如:chown :sslx test.cpp,就表示修改test.cpp文件的所属组,但修改所属组通常使用chgrp命令,因此不需要使用chown单纯修改文件或者目录的所属组。
将test.cpp的所有者改为pmb,所属组改为root
注:Linux 系统中,用户等级权限的划分是非常清楚的,root 用户拥有最高权限,可以修改任何文件的权限,而普通用户只能修改自己文件的权限(所有者是自己的文件)
文件类型和访问权限
上图中所示的文字意思解释如下:
第一位的文件类型的种类:
字母表示 | 文件类型 |
d | 文件夹 |
- | 普通文件 |
l | 软链接(类似windows的快捷方式) |
b | 块设备文件(例如硬盘,光驱等) |
p | 管道文件 |
c | 字符设备文件(例如屏幕等串口设备) |
s | 套接口文件 |
Linux 读写执行权限(-r,-w,-x)的含义
rwx权限对文件的作用
rwx权限 | 对文件的作用 |
读权限(r) | 表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。 |
写权限(w) | 表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。 |
执行权限(x) | 表示该文件具有被系统执行的权限。Window系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。也就是说,只要文件拥有 x 权限,则此文件就是可执行文件。但是,文件到底能够正确运行,还要看文件中的代码是否正确。 |
rwx权限对目录的作用
rwx权限 | 对目录的作用 |
读权限(r) | 表示具有读取目录结构列表的权限,也就是说,可以看到目录中有哪些文件和子目录。一旦对目录拥有 r 权限,就可以在此目录下执行 ls 命令,查看目录中的内容。 |
写权限(w) | 对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作:
|
执行权限(x) | 目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。 |
对目录来说,如果只赋予 r 权限,则此目录是无法使用的。很简单,只有 r 权限的目录,用户只能查看目录结构,根本无法进入目录(需要用 x 权限),更不用说使用了。
因此,对于目录来说,常用来设定目录的权限其实只有 0(---)、5(r-x)、7(rwx)这 3 种。
注:如果在一个普通用户的家目录下面root创建了一个文件,这个文件的所有者和所属组都是root,且其他人的权限为0,那么这个文件对这名普通用户来说无法读、无法编辑也无法执行,也就是说,他无法变动这个文件的内容就是了。但是由于这个文件在他的家目录下,他在此目录下具有 rwx 的完整权限,因此对于这个文件来说,是能够删除的。
chmod命令修改文件或者目录权限、
通过chmod命令可以手动修改文件的访问权限,chmod命令设定文件权限的方式有两种,分别是可以使用数字或者符号来进行权限的变更。
chmod命令使用数字修改文件权限
linux系统中,文件的基本权限由9个字符组成,以rwxrw-r-x为例,我们可以使用数字来表示各个权限,各个权限与数字之间的对饮关系是:
r | 4 |
w | 2 |
x | 1 |
由于这9个字符分属3类用户,因此每种用户身份包含3个权限(r,w ,x),通过将3种权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限。
所以在wxrw-r-x中,
所有人 = rwx = 4+2+1= 7
所属组 = rw- = 4+2 = 6
其他人 = r - w = 4+1 = 5
所以,此权限对应的权限值就是765
使用数字修改文件权限的chmod命令基本格式为:
chmod [-R] 权限值 文件名
-R(注意是大写)选项表示连同子目录中的所有文件,也都修改设定的权限。
chmod命令使用字母修改文件权限
文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
linux umask详解:令新建文件和目录拥有默认权限
Linux 是注重安全性的操作系统,而安全的基础在于对权限的设定,不仅所有已存在的文件和目录要设定必要的访问权限,创建新的文件和目录时,也要设定必要的初始权限
Windows 系统中,新建的文件和目录时通过继承上级目录的权限获得的初始权限,而 Linux 不同,它是通过使用 umask 默认权限来给所有新建的文件和目录赋予初始权限的。
root用户默认是0022,普通用户默认是0002
umask 默认权限确实由 4 个八进制数组成,但第 1 个数代表的是文件所具有的特殊权限(SetUID、SetGID、Sticky BIT),此部分内容放到后续章节中讲解,现在先不讨论。也就是说,后 3 位数字 "022" 才是本节真正要用到的 umask 权限值,将其转变为字母形式为 ----w--w-。
注意,虽然 umask 默认权限是用来设定文件或目录的初始权限,但并不是直接将 umask 默认权限作为文件或目录的初始权限,还要对其进行 "再加工"。
假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
同时umask掩码的值是可以修改的。
基本格式;umask 权限值
粘滞位
书接rwx权限章节,我root用户关键的文件凭什么你一个普通用户就能给我删了,就算是这个目录是你创建的,擅自删除别人的文件也是不对的,为了解决这个问题,出现了粘滞位。
chmod +t [文件名或者目录名]
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
关于权限还有许多知识,等到下次有机会再说。