目录
1.Linux两种用户:超级用户(root)、普通用户
root用户具有Linux下最高权限(权限针对人,同时事物的基本属性决定权限的相关概念),不受权限约束
普通用户可以存在多个,受到权限约束
普通用户创建方式:useradd
cd /home 再ll 查看有多少用户
普通用户切换回超级用户:su - (root密码)
普通用户之间切换:su 用户名
ctrl+d / logout 退出超级用户
1.2 文件类型和访问权限(事物属性)
Linux下不以文件后缀来区分文件类型
但是像gcc是Linux上的软件(不等于系统层面),需要文件后缀来区分类型(Linux系统不以所谓的文件后缀区分,具体用的软件决定)
可执行程序也被当成普通文件
Linux三种用户身份
拥有者:文件属于谁
所属组:文件属于哪一个组
other(其他):不属于上面两种的,就是other
事务属性的基本权限
如果给文件强制加上可执行权限,不代表他能执行,有可执行权限和能执行是两码事
如何修改权限
chmod(设置文件的访问权限)
格式:chmod [参数] 权限 文件名
u代表拥有者 g代表所属组 o代表other组 a代表所有人 +-代表赋/取消权限 =向权限范围赋予权限代号所表示的权限
只有文件的拥有者和root才可以改变文件的权限
虽然是拥有者,但是不具备任何权限
root的权限不受约束,哪怕你取消了所有权限也没用
修改root密码:passwd
第二种修改权限方式
三个数字在二进制中可以看作 无:000 有:111,转换成8进制数值表示方法:0~7
7转换成二进制111,代表三个权限都具备;6代表110,具有读写权限
更改文件的拥有者或者所属组:需要更高权限
chown:更改文件的拥有者
R -> 递归修改目录文件的权限
但是直接更改是不被允许的(给别人东西要别人同意,可以用root强制给)
chgrp:更改文件的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
sudo:给命令前带sodo意思是:执行的后续命令,要以root权限级别来执行(一次)
sudo需要账户白名单
2. 常见权限问题
如果我既是该文件拥有者又是所属组,当拥有者权限不存在,但所属组权限存在时,我还具备访问该文件权限吗
答案:不具备
我们如果既是拥有者又是所属组,只看拥有者权限(权限只会被认证一次,首先判定你是谁,判定后以该身份去验证权限)
进入一个目录,需要什么权限?
答案:x
总结:
1.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
2.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有创建文件/目录,删除移动目录内文件的权限
3.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
为什么创建的默认权限不是从777 / 000 开始
Linux默认:
一个目录被创建,起始权限是从777开始,实际权限是775
一个普通文件被创建,起始权限是从666开始,实际权限是664
实际是umask干的(权限掩码)
umask
umask意思:凡是在umask中出现的权限,都不应该在最终权限中出现
为什么umask是4位:0002,第一位多的可以不用管他,只需要关心后三位八进制数 002即可
所以八进制相减便是775和664 (777-002,最后一位7换成111,2换成010,相减便是5)
umask并不是减法减去对应值
最终权限 = 起始权限 &( ~ umask)
比如777 换成111 111 111 umask掩码000 000 010 umask~后变成111 111 101
按位与&后:111 111 101 (775)
我们也可以修改umask,例如0777,这样新创建文件就什么权限都没有
3.粘滞位
用户除了自己有权限,其他人都没权限
如果一个目录是我创建的,这个目录别人没法删除(权限设置好-w),别人也不能以他的账号进到我的目录中,把我的东西删除
但是当别人把文件创建在了我的目录中时,我们没有读写执行权限,却可以删除别人的文件
如果众多用户必须放在一个目录下,却阻挡不了对方删除文件(文件被删除不是本身属性,而是文件所在目录,用户是否具有w:写权限)
结论:在目录中新建或者删除文件,跟文件本身没关系,跟你所在目录中是否具有写权限有关
这时候,就可以使用粘滞位解决(只能自己删自己的,而且正常使用)
chmod +t 文件名(other变成rwt) t是x的特殊情况(粘滞位只能给目录设置)
注意:粘滞位谁加的谁才能取消