目录
权限就是通过一定条件,来限制一部分人,给一部分人权力来访问某些资源。
权限 = 角色 + 事物的属性
例如腾讯视频的vip,小区的门禁都会限制一部分的人。我们能进小区本质不是我们是谁,而是我们有个身份是小区的住户,有这层“角色”让我们有权利进小区。我们有腾讯的vip,但不能在腾讯视频里刷题,因为腾讯视频没有这种功能,它只能看视频,这是事物的属性。
用户
linux中有两种用户的角色,超级管理员root和普通用户,root是不受权限的约束的,权限只针对普通用户。
adduser [用户名]:添加用户
deluser [用户名]:只删除用户
deluser --remove-home:连同用户的主目录和邮箱一起删除
deluser --remove-all-files [用户名]:连同用户拥有的所有文件删除
passwd [用户名]:修改密码
su:普通用户下输入root密码切换root账号
su -:切换root并重新登录,路径会回到家目录
su [用户名]:切换普通用户
sudo + 指令:在普通用户下以root身份执行指令,执行sudo要输入当前用户的密码。
可以看到test是以root身份创建的。默认云服务器是不能直接使用sudo(虚拟机可以),因为linux中有一块类似“白名单”的地方,将用户列入到里面才可以执行,后面vim的博客会讲普通用户如何使用sudo。
文件权限的角色
linux的文件有三种角色:拥有者 所属组 other
不是拥有者和所属组的自然就是other。拥有者等就是代表用户是这个文件的什么角色。
所属组可以讲其他用户添加进来,主要用于多人协作时可以进行更好的权限管理。
文件属性权限
属性权限的了解:
文件的属性权限有三种:
r:读
w:写
x:可执行
文件属性开头的后9个字符,三三为一组分别对应拥有者,所属组和other的权限
第一个字符表是否具有读属性,是为r不是为-,以此类推。上图test.txt的权限就是,拥有者具有读写没有可执行权限,所属组具有读写没有可执行权限,other具有读没有写和可执行权限。
属性权限的修改:
一个文件的权限只有拥有者和root可以修改。
chmod:
使用chmod进行文件的修改
第一种:
上面可以看到将拥有者的读写权限关闭了,可执行权限放开了。
u代表对拥有者的修改,+-添加或关闭权限跟者对应的权限字符。
g表示所属组,o代表other,我们也使用‘,’可以同时对多个角色权限进行修改。
第二种:
chmod也可以使用八进制的形式来修改。
将rwx看作1,-看作0,再将每一组转化为一个八进制数字,test.txt现在的权限就是676。我们现在将test.txt的权限改为u:rw-,g:rw-,o:r--,转为八进制就是664。
语法:chmod [三位八进制] [文件名]
对比权限有无的表现:
想要对比我们要先学会如何修改拥有者和所属组。这个操作只有root可以完成,哪怕是这个文件的拥有者想要把这个文件给别的用户,也是要对方用户同意的,而linux没有这种操作。root作为超级管理员不受权限的约束,它就可以强制给别的用户文件。
chown [新拥有者] [文件名]:修改拥有者
chgrp [新所属组] [文件名]:修改所属组
chown [新拥有者]:[新所属组] [文件名]:修改拥有者和所属组
测试:
我们将拥有者的读写权限关闭,再对test.txt进行查看和写入
可以看到xj这个用户作为test.txt的拥有者已经无法进行读写了,但xj不仅是拥有者,也是所属组。它依旧不能读写是因为文件会先识别用户的身份,当用户为拥有者时就不会看它是不是所属组了。
把拥有者变为root再测试
这时xj为所属组就可以对文件进行读写了。
文件类型
在window中是通过后缀来区分文件类型的,修改后缀也就是修改了文件的类型。linux则是通过文件属性的第一个的字符来区分。
后缀:
我们先来说后缀,测试linux是否真的不受后缀的影响。
创建一个test.c文件,存放一段代码,编辑后修改形成的a.uot文件
执行a.html是和a.out的效果一样的。可以看出linux中的后缀是不影响文件的执行,真正影响文件的是执行权限x和文件是否是一个可执行文件。
给了test.txt执行权限,但因为文件本身不是可执行文件我们依旧无法执行。
我们已经知道linux是没有后缀的概念,但这并不代表我们不使用后缀。
将test.c改为test.t对linux是没影响,不过gcc这个工具是要看后缀来区分文件类型的,不是.c就不能编。所以我们在linux中对待后缀的态度是尽量使用的。
类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
目录的权限
文件=内容+属性,linux一切皆文件目录自然也是,目录的内容就是目录内所有的文件信息详细数据。
那我们来测试进去一个目录是需要什么权限,查看一个目录需要什么权限,对文件的修改需要什么权限
关闭r
可以进入和创建文件,但不能查看文件的信息。
关闭w(会打开r权限)
可以进入和查看,但不能创建和删除,这都是对目录的内容进行操作。
关闭x
可以看到查看、修改和进入都受到了限制,一个目录的执行权限是很重要的。
文件创建时权限的区别
在创建文件时它们的权限是不一样的,创建普通文件的起始权限是:0666(第一个0可以不用在意),目录文件是:0777。但创建后普通文件是664,目录文件是775,这是因为有umaks的存在。
umask是linux中默认的权限掩码。
创建文件会删除umask表示的权限,是通过按位与取反的umask来实现的。
最终权限 = 起始权限 & (~umask)
也可以通过修改umask来确认
umask取反之后全是0,&的结果必然也都是0,所以创建出来的文件没有开放任何权限。
如何创建共享文件
文件是在目录下创建的,而目录内对文件的修改是看目录的权限,哪怕是root创建的文件,只要其他用户有目录的修改权,就可以删除root的文件。
每个用户的家目录是没有给其他用户开放任何权限的,因此要创建共享文件是不能在自己的家目录下创建的,否则其他用户无法访问。
所以共享文件要在公共区域创建,也就是根目录下,最好用root建一个目录来使用,并放开other的所有权限使其他用户可以在里面修改。
现在虽然可以创建文件并且可以开放文件权限让其他用户访问自己的文件,但这也减少了文件的安全性。
xj在目录内创建了一个文件只想和a共享,将a添加到所属组里,关闭了other的权限。
这时b看到了很不爽,在像为什么不带他,随后就直接把这个文件给删了。
b是有目录的写权限的自然可以删除其他用户的文件。
针对这种情况就可以引出另一个概念“粘滞位”。粘滞位一般是添加给目录的。
chmod o+t [目录名],添加的位置是将x变成了t,这时该目录内的文件就只有超级管理员,目录的拥有者和文件的拥有者可以删除。
总结一下,共享文件的位置要在公共区域,放开权限并设置粘滞位以防被其他人删除,创建的文件想和其他用户一起编辑就将他设为所有组。