权限是约束人的(某个人或某些人)
比如看某些电影需要VIP,或者是QQ空间设置只对好友开放。
其实就是某件事允许谁去做,谁不能去做。
文件权限=人+文件属性
对于人的权限约束是因为角色的关系,比如说你的校长XXX,他因为是校长才能进学校的校长室,才有校长相对的权限,而如果XXX辞职不干了,那么对应的校长权限也没了。
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令: su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user(并且不需要密码)。 要从普通用户user切换到root用户则使用 suroot(root可以省略),此时系统会提示输入root用户的密码。
普通用户->root
这里可以使用 su(只是让原来的用户变成root用户,路径不变) / su -(su -是让root用户重新登陆,路径变成原来root账户的路径)
root->普通用户 su [用户名] (这里不需要输入密码)
这里如果想退出一层用户可以输入exit或者是热键Ctrl+d
如果你在普通用户的情况下,想要执行某一条root权限级别的指令,这时就要在你的指令前面加一个sudo了。
提权的时候需要输入自己账户的密码。(给受信任的用户提供最少的执行障碍)
如果发生了报错说明系统不相信你的用户,需要将当前用户添加到/ect/sudoers中。
(不受信任用户只能使用普通用户的权限)
文件和文件目录的所有者: u—User(拥有者)
文件和文件目录的所有者所在的组的用户: g—Group(所属组)
其它用户: o—Others
如果A这个人在系统中创建了一套所属组A的文件,那么A访问这个文件的时候,发现A是本人,那么A就是这个人就是这套文件的拥有者,假如B这个人也像访问这套文件,对比之后,B既不是A本热,也不是在所属组,那么B就是其他用户。
那么所属组的作用是什么呢?
比如说某家公司在研发一个项目,有A,B两个团队整好同时看上了这个项目,那么老板让他们一起做,这时两个团队相当于是一个竞争关系,自己团队做的方案肯定不能让对方看到,如果只有拥有者和其他用户,那么A团队中的成员就不能相互看到对方的代码了,可是如果放开权限让其他用户能看到,虽然自己团队A能看到了,但是对面的团队B也能看到了。
所以这时就有了所属组,团队A的所有成员都能看到团队A的代码,但是对团队B不进行开放。
首先说一下,两个root的意思:第一个root是这个文件的所有者是root,第二个root是所有组中有root。
开头第一列的第一个字符,这是Linux的文件类型,和windows差别很大,windows是后缀。
Linux文件类型与文件后缀无关,但是可以使用后缀区分文件,但是对于Linux系统来说本质就是文件名的一部分而已。(如果是对于其他工具就不一定了,比如gcc)
Linux文件类型:
- :普通文件(源代码,库文件,可执行程序,文档压缩包等等)
d:目录文件
c:字符设备文件(键盘,显示器)
b:块设备(硬盘)
l:链接文件(快捷方式)
p:管道文件
那么剩下的9个字符是什么呢?
这里将9个字符分为3个3个一组:(这里也是目录ccc的信息)
第一组是拥有者,第二组是所属组,第三组是其他用户。
r(读)w(写)x(执行)-(无)
一组的排序都是rwx,哪个权限没有哪里就是-。
比如ccc这个文件,拥有者有读,写,执行权限,所属组有读,执行权限,其他用户有读和执行权限。
chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
这里我们以ccc目录为例:
这里权限就被更改了。这里要注意一下,如果是所属组有你用户的权限,但是拥有者没有你的权限,那么你就不能对该文件进行操作。
看,报错了。
这里的root权限是不受约束的,如果你想改掉某个拥有者或者是所属组权限是轻而易举:
3个权限组中的除了符号操作,还能化成8进制,因为:
chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
注意:这里只能是root才可以(提升权限也行),因为你要给人家文件需要别人的同意才可以。
把这个文件放在mfc的账户里:
chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
功能说明:辨识文件类型。
语法: file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
每次我们创建一个文件的时候都会产生一个默认的权限,那么这个权限是怎么来的呢?
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:
mask&(~umask)
这里注意要先按位取反
umask
功能:查看或修改文件掩码
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
为什么是先按位取反然后在进行异或呢?
umask默认是想要去掉权限位1,保留权限位0;
~umask之后要去掉权限位是0,至于1的位置要看起始权限然后在进行判断是否要保留。
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
所以目录的创建必须是777开始,因为目录是必须要进入的。(进入目录必须有x权限)
注意:粘滞位的前提是很多人在同一个公共目录下进行文件操作。
一个公司内的Linux系统中有很多人,会在一个公共目录下对于自己的临时文件的增删查改。
这里比如说A这个人不能在B的目录下操作,因为没有权限,B也不能操作A。
但是这个公共目录是谁来创建的呢?A和B显然都没有资格,但是root可以。
在这种情况下,A创建的文件对于B来说没有任何权限,但是B可以将A的这个文件删除,(当然A也可以删除B的文件),因为你对于你创建的这个文件对其他人的权限是不可读不可写不可执行,没说不能删除。
这个时候不想让这个目录的两个用户互相删除文件,这就需要粘滞位了,注意,一定要root才可以。
chmod +t 文件