权限理解
- 一、Linux权限的概念
- 二、su [用户名] : 切换用户
- 三、Linux权限管理
- 文件
- (一)文件访问者的分类(人)
- (二)文件类型和访问权限(事物属性)
- (1)第一位:文件类型
- 关于文件后缀
- 可执行程序的条件
- (2)第2—10位:基本权限
- (三)文件权限值的表示方法
- (四)文件访问权限的相关设置方法
- (1)chmod [参数] 权限 文件名:设置文件的访问权限
- (2)**chmod 命令权限值的格式**
- **① 用户表示符+/-=权限字符**
- chmod a=x /home/abc.txt
- **②三位8进制数字**
- chmod 640 /home/abc.txt
- (3)chown [参数] 用户名 文件名 :修改文件的拥有者
- (4)chgrp [参数] 用户组名 文件名 : 修改文件或目录的所属组
- chgrp users /abc/f2
- (5)file [选项] 文件或目录 :辨识文件类型
- sudo分配权限
- 四、使用 sudo分配权限:
- (1)修改/etc/sudoers 文件分配文件:格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
- (2)使用 sudo 调用授权的命令:$ sudo –u 用户名 命令
- <font color=red>目录的权限
- ★ 五、关于权限的总结
- 对于 删除 存在着一些讨论:root就算没有权限,也能进行修改,任何都能做
- 六、/tmp目录:文件共享
- 七、粘滞位 `chmod o+t`
- 八、umask
- umask前言引入
- (一)umask 权限值 :查看或修改文件掩码 [ 权限掩码:定制一个文件被创建的时候的默认权限 ]
- (二)umask过程及原理
- (1)什么叫程序掩码?
- (2)程序掩码具体实现
一、Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
二、su [用户名] : 切换用户
命令:su [用户名]
功能:切换用户
要 从root用户切换到普通用户user,则使用 su user。
要 从普通用户user切换到root用户 则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
三、Linux权限管理
文件
(一)文件访问者的分类(人)
- 文件和文件目录的所有者:u—User(中国平民 法律问题)
- 文件和文件目录的 所有者所在的组的用户 :g—Group(不多说)
- 其它用户:o—Others (外国人)
(二)文件类型和访问权限(事物属性)
(1)第一位:文件类型
-
-:普通文件【包括 文本、源代码、图片、视频、(动静态库)库、可执行程序 等,已经涵盖了所有的文件类型】
-
l:软链接 链接文件(类似Windows的快捷方式)
像windows下的桌面快捷方式
-
b:块设备文件(例如硬盘、光驱等)
-
p:管道文件
管道文件 和 数据化线|(都是兄弟)本质就是用来传递信息的 -
c:字符设备文件(例如屏幕等串口设备)
-
s:套接口文件
关于文件后缀
-
windows 与 文件后缀 有关
-
在Linux系统中 与 -ll ,-ls 显示的文件信息中,前面第一位的文件类型有关,与文件后缀无关
用cat查看 确实是可执行程序
但mv到 .txt文件中
使用 gcc/g++ 等工具 需要考虑对应的后缀
可执行程序的条件
可执行的条件:
-
首先,文件本身就是可执行文件
-
第一位:文件类型 具有
-x
可执行权限
但系统之上的编译器指令,工具, 需要考虑对应相应的文件后缀
=> Linux 的文件类型不通过后缀区分( 不代表Linux不用后缀 )
- 对于文件后缀的态度 :虽然Linux不通过它识别文件类型,但是我们依旧推荐使用!:
- 使用工具时需要相应的文件后缀
- 人需要(人看一目了然)
(2)第2—10位:基本权限
-
读(r/4)[ Read ]
对文件而言, 读取文件内容 ;对目录来说, 浏览该目录信息
-
写(w/2)[ Write ]
对文件而言, 修改文件内容 ;对目录来说,删除移动目录内文件
-
执行(x/1)[ execute ]
对文件而言,执行文件 ; 对目录来说, 进入目录
-
“—” 表示 不具有该项权限
(三)文件权限值的表示方法
-
字符表示方法
-
8进制数值表示方法
(四)文件访问权限的相关设置方法
(1)chmod [参数] 权限 文件名:设置文件的访问权限
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
【 说明:只有文件的拥有者和root 才可以改变文件的权限 】
(2)chmod 命令权限值的格式
① 用户表示符+/-=权限字符
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限
用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
//实例
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
# chmod a=x /home/abc.txt
chmod a=x /home/abc.txt
②三位8进制数字
//实例
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt
chmod 640 /home/abc.txt
(3)chown [参数] 用户名 文件名 :修改文件的拥有者
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
//实例
# chown user1 f1
# chown -R user1 filegroup1
(4)chgrp [参数] 用户组名 文件名 : 修改文件或目录的所属组
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:
-R
递归修改文件或目录的所属组
//实例
# chgrp users /abc/f2
chgrp users /abc/f2
(5)file [选项] 文件或目录 :辨识文件类型
功能说明:辨识文件类型。
语法:file [选项] 文件或目录
常用选项:
-
-c
详细显示指令执行过程,便于排错或分析程序执行的情形。 -
-z
尝试去解读 压缩文件 的内容
sudo分配权限
四、使用 sudo分配权限:
(1)修改/etc/sudoers 文件分配文件:格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
# chmod 740 /etc/sudoers
# vi /etc/sudoer
(2)使用 sudo 调用授权的命令:$ sudo –u 用户名 命令
//实例
$sudo -u root /usr/sbin/useradd u2
目录的权限
目录也是文件
- 会 对用户先进行匹配,对应的第2-10位用户权限
-
-x
可执行权限:如果目录没有可执行权限, 则无法cd到目录中.创建一个目录 几乎给拥有者所属组都具备了
-x
权限,有可执行-x
权限 就一定能进文件
-
-r
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.-ll
ls-l
都是 查看对应文件的属性,-r
读权限 取决于是否有权利查看文件的属性有
-x
可以进文件,但无-r
权限 无法通过ls查看文件属性
-
-w
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.无
-w
写权限,则无法在文件中进行创建文件等活动
★ 五、关于权限的总结
- 目录的可执行权限 是表示 你可否在目录下执行命令。
-
-x
决定是否可以进入目录如果 目录没有
-x
权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r
读权限 【 这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件 】 -
-r
决定是否可以进行对文件属性信息进行查看的权力而如果目录具有
-x
权限,但没有-r
权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限 ,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档也就是说
-x
权限 是后续操作的前提。 -
-w
决定是否可以在目录下进行 新建 和 删除 文件
对于 删除 存在着一些讨论:root就算没有权限,也能进行修改,任何都能做
于是, 问题来了~~
-
问题一
换句话来讲, 就是 只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.- 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下
虽然文件目录确实是你的,但文件的所有者是root。且该文件并没有开放任何权限,所以普通用户无法对其进行任何修改。
既然什么都做不了,留着也没什么用,那我普通用户就你root账号建设的文件给删除了。
问:为什么 普通用户 可以将 root账号 设置的文件给删除掉?即便你是root文件 我想删我也能删,尽管没有任何权限-x
-r
-w
凭什么可以删掉?
解答:答案就是我们前面说的。只要用户具有 目录 的写权限, 用户就可以删除 目录中 的文件, 而不论这个用户是否有这个文件的写权限.
虽然文件目录确实是你的,但文件的所有者是root,文件所有者有权对文件权限进行设置 。
但该 文件所在的目录 是我的,虽然文件不是我的 。
对于这个目录,我是拥有者-u 对应的写权限我是有的,所以我可以对这个目录里的内容进行修改
一个文件能否被删除,并不取决于文件本身!!! 而取决于文件所处的目录,拥有者是否具有-w
权限!!
-
问题二
但应不应该删除root在未经自己允许的情况下设置的文件呢 ?这是否合理?-
合理,你root账号可以未经别人允许即可进入别人的目录里 别人并没有同意让你在里面写文件 那么别人也有权删除你创建的文件。
-
现在的问题已经不在于删的合不合理了 而是在于你为什么要随便在别人的目录下创建文件呢
-
但现实中并不会存在这样的问题
只对自己有权限,别人都没有。普通用户之间 乱搞不了。
只有root用户 和 超级用户 才会出现这样的情况 但你也有权 也可以 删除
六、/tmp目录:文件共享
家目录只对自己一个人有权限,对其他用户无权访问。
所以只能且 需要 在系统中的非家目录中进行 文件共享 。比如说 系统中的 /tmp 目录( 权限对u,g,o 都开放了 )
所以有 -w
权限,所有人都能删除tmp里的文件
删一个文件你这个文件无关!如果 想让其他人 看 或者 写,确实做到了 ---- 但是我们防不住别人删我!
-
问题三:我们去掉other的w权限不就可以了吗?
-
在
/tmp 目录
,无-w
虽说删不了( 能解决上述由于/tmp目录对于u,g,o的权限的全开放,避免了自己开辟的文件被别人删除的可能 ), -
但你能在root拥有者的tmp中能建文件的前提 也是因为
-w
。没了
-w
,新文件也在里面建不了,何来的共享可言。
-
为了解决这个不科学的问题, Linux引入了粘滞位的概念 .
七、粘滞位 chmod o+t
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
给 other
新增一个权限:t
粘滞位:给 自录共享 中的 other 设置的一个权限位 t
,具有x
的意义,同时也进一步对目录权限进行特殊限定:
该目录里面的文件,只有 超级用户root 、文件的拥有者或 目录的所有者 有权利进行删除!!
其他人一概不允许!
粘滞位 ( 用chmod o+t )
八、umask
umask前言引入
- 在Linux系统当中,可执行程序所占的比例只占其中一部分,只有必须得用可执行程序的才会加上
-x
, 不需要的可由用户自己去加,或者其他生成软件去加。
目录和可执行程序,本身天然的就需要
-x
,系统自动就会给你带上
那么
- 新建目录文件 的起始权限 本身就是从777开始( 带
-x
),事实上:775 - 而新建普通文件 的起始权限 则是从666开始( 不带
-x
),实际上:664
这是为什么呢? 原因就是创建文件或目录的时候还要受到umask文件掩码的影响。
(一)umask 权限值 :查看或修改文件掩码 [ 权限掩码:定制一个文件被创建的时候的默认权限 ]
功能:
查看 或 修改 文件掩码,给目录定制 被创建时的 默认权限
//实例
# umask 755
# umask ★查看
# umask 044 ★设置
(二)umask过程及原理
-
新建文件夹 默认权限=0666
-
新建目录 默认权限=0777
【只关心后面3个】
【 不是减法,借位作减法 得到的663 而不是664 】
(1)什么叫程序掩码?
-
【 umask【值】:【值】八进制二进制:权限掩码 】
-
程序掩码=最终不会出现的码 在umask当中出现的权限,就不应该在最终的权限中出现
(2)程序掩码具体实现
先 按位取反~
(任何跟0按位与都会被转换成0) 后 再按位与 &
假设默认权限是mask,则实际创建的出来的文件权限是: mask &
( ~
umask )
格式:umask 权限值
说明:将现有的存取权限 减去 权限掩码后,即可产生建立文件时预设权限。
超级用户root 默认掩码值为 0022,普通用户 默认为 0002 。
umask 权限值:修改文件掩码,将现有的存取权限 减去 权限掩码后,即可产生建立文件时预设权限。
由此可见,最终权限:由 起始权限 和 umask权限掩码 共同决定