Linux的权限操作与用户、用户组是兄弟操作。
一、 权限概述
总述:Linux系统一般将文件可存/取访问的身份分为3个类别:owner 、group 、others ,且3种身份各有read 、write 、execute 等权限。
1 权限介绍
什么是权限:在多用户(可以不同时)计算机系统管理中,权限是指某个特定的用户具有特定的系统资源使用权利,例如文件夹、特定系统指令的使用或存储量的限制。 在Linux中分别由读、写、执行权限: (1) 读权限
- 对于文件夹来说,读权限影响用户是否能够列出目录结构;
- 对于文件来说,读权限影响用户是否能够查看文件内容。
(2) 写权限
- 对于文件夹来说,写权限影响用户是否能够在文件夹下“创建/删除/复制到/移动到”文档;
- 对于文件来说,写权限影响用户是否能够编辑文件内容。
(3) 执行权限
- 一般都是对于文件来说,特别是脚本文件,因为普通的文件(如txt文件)来说,能不能执行并不重要。
2 身份介绍
2.1 owner身份(文件所有者,默认为文档的创建者)
由于Linux是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
2.2 group身份(与文件所有者同组的用户)
与文件所有者用足最有用的功能就体现在多个团队在用一台主机上开发资源的时候。例如主机上有A、B两个团队,A有a1, a2, a3三个成员,B有b1, b2两个成员,这两个团队要共同完成一个项目F。由于设置了适当的权限,A、B团队中的成员都能互相修改对方的数据,当团队C的成员不能修改F的内容,甚至连查看的权限都没有。同时,团队的成员也能设置自己的私密文件【owner】,让团队的其他成员也读取不了文件数据。在Linux中,每个账户支持多个用户组,如用户a1, b1既属于A用户组,也能属于B用户组【主组和附加组】。
2.3 others身份(其他人,相对于所有者)
例如团队A有a1, a2, a3三个成员,则a1, a2, a3就是一个用户组,若文件F的所有者是a1,b与a1没有关系,则b就是其他人(others)。
2.4 root用户(超级用户)
在Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有用户中它拥有最大的权限,所以管理者普通用户。
3 Linux的权限介绍
要设置权限,就需要知道文件的一些基本属性和权限分配的规则。在Linux中,ls 命令常用语查看文件的属性,能够显示文件的文件名及其相关属性。
#ls -l 路径 【ls -l等价于 ll】
第1列红框就是Linux的文档权限属性信息。
Linux中存在用户、用户组和其他人的概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下: 其中:
r :read,可读w :write,可写x :execute,可执行- :没有对应的权限
十位字符表示含义:
- 第1位:表示文档类型,取值常见的有“
d ”表示文件夹,“- ”表示文件,“l ”表示软连接,“s ”表示套接字等等; - 第2-4位:表示文档所有者的权限情况,第2位表示读权限的情况,
r 表示可读,- 表示不可读;第3位表示写权限的情况,w 表示可写,- 表示不可写;第4位表示执行权限的情况,x 表示可执行,- 表示不可执行; - 第5-7位:表示与所有者同在一个组的用户的权限情况,第5位表示读权限的情况,
r 表示可读,- 表示不可读;第6位表示写权限的情况,w 表示可写,- 表示不可写;第7位表示执行权限的情况,x 表示可执行,- 表示不可执行; - 第8-10位:表示除了上面的前2部分的用户之外的其他用户的权限情况,第8位表示读权限的情况,
r 表示可读,- 表示不可读;第9位表示写权限的情况,w 表示可写,- 表示不可写;第10位表示执行权限的情况,x 表示可执行,- 表示不可执行。
权限分配中,均是rwx 的三个参数组合,且位置顺序不会变化,没有对应权限就用- 代替。
二、权限设置
语法:#chmod 选项 权限模式 文档 常用选项:-R 【递归设置权限(当文档为文件夹的时候)】 权限模式:就是该文档需要设置的权限信息 注:如果想给文档设置权限,操作者要么是root用户,要么就是文档的所有者。
1 字母形式
给谁设置:
u :表示所有者身份owner(user)g :表示给所有者同组用户设置(group)o :表示others,给其他用户设置权限a :表示all,给左右人(包括ugo)设置权限
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置,即a 写和不写是一样的。
权限字符:
权限分配方式:
- +:表示给具体的用户新增权限
- -:表示删除用户的权限
- =:表示将权限设置为具体值
实例:为test.txt文件(-r--------)设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只读权限。 方法一:
#chmod u+wx,g+rx,o+r test.txt
方法二:
#chmod u=rwx,g=rx,o=r test.txt
实例:使用root用户为test.txt文件(-r--------)设置所有人都拥有执行权限
#chmod +x test.txt
#chmod a=x test.txt【会覆盖原有权限】
#chmod a+x test.txt
实例:使用root用户为test.txt文件(-r--------)设置所有人都没有任何权限
#chmod a=- test.txt
#chmod a=--- test.txt
2 数字形式
以二进制的方式来理解:
- 000(0):
--- - 001(1):
--x - 010(2):
-w- - 011(3):
-wx - 100(4):
r-- - 101(5):
r-x - 110(6):
rw- - 111(7):
rwx
实例:需要给test.txt(----------)设置权限,权限要求所有者拥有全部权限(111),同组用户拥有读和执行权限(101),其他用户只读(100)。
#chmod 754 test.txt
注:如果命令出现能“写”当不可“读”的情况,是不合理的。
3 注意事项
使用root用户创建一个文件夹(/example ),权限默认,权限如下: 需要在/example 目录下创建文件/example/test.txt ,并赋予所有人全部权限: 切换到其他用户,如wangerma(不是文件所有者,也不是同组用户,属于others部分): 问题1:wangerma用户是否可以打开/example/test.txt 文件?【是】 问题2:wangerma用户是否可以编辑/example/test.txt 文件?【是】 问题3:wangerma用户是否可以删除/example/test.txt 文件?【否,此外,也不允许在/example 目录下创建/移动/重命名文件或文件夹】 在Linux中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才能够删除。
三、属主与属组设置
属主:所属的用户(文件的主人) 属组:所属的用户组 红色方框即为属主,蓝色方框即为属组。 这两项信息在文档创建的时候会使用创建者的信息(用户名,用户所属主组名)。如果删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改。
1 chown
作用:更改文档的所属用户 语法:#chown [-R] 用户名 文档路径
实例:将root用户创建的/example 目录的所有者更改为wangerma
#chown wangerma /example
2 chgrp
作用:更改文档的所属用户组 语法:#chgrp [-R] 用户组名 文档路径
实例:将root用户创建的/example 目录的所属用户组改为lin
#chgrp lin /example
通过chown 命令实现同时对所属用户和所属用户组的修改:
#chown [-R] username:groupname 文档路径
实例:将root用户创建的/example 目录的所属用户和所属用户组均设置为root,包含其子目录
#chown -R root:root /example
四、扩展
问题:reboot、shutdown、init、halt、user管理,在普通用户身份上都操作不了,但是有些特殊情况又需要有执行权限,除了将root用户的密码告诉普通用户之外,可以使用sudo (switch user do)命令来进行权限设置。sudo 可以让超级管理员(root)事先定义某些特殊命令哪些用户可以执行。 默认sudo 是没有除root之外用户的规则,要想使用则需要先对sudo 进行配置。 sudo 配置文件:/etc/sudoers (1) 配置sudo 文件请使用“#visudo ”,打开之后其使用方法与vim一致。 (2) 配置普通用户的权限 先看一下/etc/sudoers 文件中的示例: 用户:
用户组:
- root:表示用户名,如果是用户组,则可以写成“
%组名 ” - ALL:表示允许登录的主机(地址白名单)
- (ALL):表示以谁的身份执行,ALL表示root身份
- ALL:表示当前用户可以执行的命令,多个命令可以使用“
, ”分割
实例:本身lin 用户不能添加用户,要求使用sudo 配置,将其设置为可以添加用户,并且可以修改密码(但是不能修改root用户密码) 注:在写sudo 规则的时候不建议写直接形式的命令,而是写命令的完整路径。路径可以使用which 命令来查看。 语法:#which 指令名称 在末行模式下输入指令: 现在添加sudo 规则:
lin ALL=(ALL) /usr/sbin/useradd,/usr/bin/passwd,!/usr/bin/passwd root
注:先定义可执行,再定义不可执行,否则后续命令会覆盖前者
在添加好对应的规则之后就可以切换用户,切换到普通用户lin,再去执行 此时要想使用刚才的规则,则根据以下命令执行:
#sudo 需要执行的指令
注:在输入sudo 指令之后需要输入当前用户的密码进行确认操作,输入之后再接下来5分钟内再次执行sudo 指令无需密码。 补充:在普通用户下查看自己具有哪些特殊权限
#sudo -l
最后,sudo 不是任何Linux分治都有的命令,常见的Centos和Ubuntu都具有sudo 命令。
|