Linux的权限管理操作
Linux的权限管理操作与用户和用户组是兄弟操作。
一、权限概述
总述:Linux系统一般将文件可存取访问的身份分为3个等级:owner group others,且三种身份各有read write execute等权限。
1、权限介绍
什么是权限?
在多用户计算机系统的管理中,权限试试指某个特定的用户具有特定的系统资源使用权力,像是文件夹、特定系统指令的使用或存储量的限制。
Linux中分别有读、写、执行权限:
读权限:
对于文件夹来说。读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限:
对于文件夹来说,影响用户是否可以在文件夹下”创建、删除、复制、移动文件”
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限:
一般都是对于文件来说,特别脚本文件
2、身份介绍
Owner身份(文件所有者,默认为文档的创建者)
由于Linux是多用户、多任务操作系统,因此有多人同时在主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“秘密文件”,即个人所有者,因此设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
Group身份(与文件所有者同组的用户)
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候,例如主机上有A,B两个团队,A有成员A1、A2、A3,B有成员B1、B2,这两个团队共同完成报告F,设置A B在同一组,两组成员均可查看和修改报告F,但是不处于同一组的团队C没有以上权限。同时各成员也可以设置自己的私密文件。每个账号可以加入多个用户组。
Others身份(其他人)
这个是相对概念。
Root用户(超级用户)
在Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有的用户中它拥有最大的权限,所以管理这普通用户。
2、Linux权限的介绍
要设置权限,就需要知道文件的一些基本属性和权限的分配规则,在Linux中,ls命令常用的查看文件和文件夹的命令。
#ls -l 路径 (ls -l 等价于 ll)
[xia@xia /]$ ls -l ~
total 0
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Desktop
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Documents
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Downloads
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Music
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Pictures
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Public
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Templates
drwxr-xr-x 2 xia xia 6 Aug 3 20:54 Videos
[xia@xia /]$
linux中存在的用户、用户组和其他人概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:
十位符号具体的含义:
第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的三个参数组合,且位置顺序不会变化,没有对应权限就用-代替。
例如:以下文档权限是怎样的?
a.其是文件夹类型
b.所有者拥有全部权限(读写执行)
c.同组用户可读可执行
d.其他用户可读可执行
二、权限设置
语法:#chmon 选项 权限模式 文档
注意事项:
常用选项:
-R:递归设置权限(当文档模式位文件夹时)
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
注意点:如果想要给文档设置权限,操作者要么是root用户,要么是文档的所有者
1、字母形式
给谁设置:
u:表示所有者身份owner(user)
g:表示给所有者的同组用户设置(group)
o:表示others,给其他用户设置权限
a:表示all,给所有用户(包含ugo部分)设置权限
如果在设置权限的时候不指定给谁,则默认给所有用户设置
权限字符:
r:读
w:写
x:表示执行
执行分配方式:
+:表示给具体的用户新增权限(相对于当前)
-:表示删除用户的权限(相对于当前)
=:表示将权限设置成具体的值
例如:需要给anaconda-ks.cfg文件(-rw-------)设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只读权限。
答案:
① #chomd u+x,g+rx,o+r anaconda-ks.cfg
[root@xia ~]# ll|grep anaconda-ks.cfg
-rw-------. 1 root root 1919 Jun 18 2020 anaconda-ks.cfg
[root@xia ~]# #chomd u+x,g+rx,o+r anaconda-ks.cfg
② #chmod u=rwx,g=rx,o=r anaconda-ks.cfg //相当于重新设置权限
③ #chond a=--- anaconda-ks.cfg //取消所有权限
例如:如果anaconda-ks.cfg文件什么权限都没有,可以使用root用户设置所有人都有执行权限,则可以写成
① #chmod +x anaconda-ks.cfg
② #chmod a=x anaconda-ks.cfg
③ #chmod a+x anaconda-ks.cfg
2、数字形式
经常在一些技术性的网页上会看到类似#chmod 777 a.txt这样的一个权限,这种形式称之为数字形式。
读:r   权:4
写:w   权:2
执行:x   权:1
没有任何权限:0
例如:需要给anaconda-ks.cfg文件(-rw-------)设置权限,要求所有者拥有全部的权限(权为7),同组用户拥有读和执行权限(权为5),其他用户只读权限(权为1)。
答案:#chmod 751 anaconda-ks.cfg
注:设置写权限的时候一定也要设置读权限,如果一个权限设置中出现2和3的情况,说明有不合理的地方。
3、注意事项
使用root用户创建一个文件夹(/oo),权限默认为:
[root@xia ~]# mkdir oo
[root@xia ~]# ll
drwxr-xr-x 2 root root 6 Aug 8 17:22 oo
需要在oo下创建文件(oo/xx.txt)需要给777权限:
[root@xia ~]# touch oo/xx.txt
[root@xia ~]# ls -l oo
total 0
-rw-r--r-- 1 root root 0 Aug 8 17:25 xx.txt
[root@xia ~]#
切换到xia用户(不是文档所有者,也不是同组用户,属于other部分):
问题1:xia用户是否可以打开oo/xx.txt文件?(能打开)
问题2:xia用户是否可以编辑oo/xx.txt文件?(不可以)
问题3:xia用户是否可以删除oo/xx.txt文件?(不可以)
在Linux中如果要删除一个文件,不是看文件有没有权限,而是看文件所在的目录有没有权限。
三、属主与属组设置
属主:所属的用户组(文件的主人)
属组:所属的用户组
前面的root就是属主
后面的root就是属组
这两项信息在文档创建的时候就会使用创建者的信息(用户名、用户所属的主组名称)。
如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改。
1、chown
作用:更改文档的所属用户
语法:#chown -R username 文档路径
案例:将root用户创建的oo目录,所有者更改为xia
#chown xia /oo/aa.txt
[root@xia /]# ll oo
total 0
-rw-r--r-- 1 root root 0 Aug 8 18:24 aa.txt
[root@xia /]# ll /oo/aa.txt
-rw-r--r-- 1 root root 0 Aug 8 18:24 /oo/aa.txt
[root@xia /]# chown xia /oo/aa.txt
[root@xia /]# ll /oo/aa.txt
-rw-r--r-- 1 xia root 0 Aug 8 18:24 /oo/aa.txt
[root@xia /]# ll oo
total 0
-rw-r--r-- 1 xia root 0 Aug 8 18:24 aa.txt
2、chgrp
作用:更改文档的所属用户组
语法:#charp -R groupname 文档路径
案例:对root创建的oo目录,所有者更改为xia,并且将所属用户组也改成xia
#chgrp xia 00/
思考:如何使用一条命令同时修改文档的属主和属组
答案:可以通过chown命令实现
语法:#chown -R username:groupname 文档路径
案例:使用chown命令,将oo目录及其下文档的属主和属组都改为xia
[root@xia /]# chown -R xia:xia oo
[root@xia /]# ll oo
total 0
-rw-r--r-- 1 xia xia 0 Aug 8 18:24 aa.txt
[root@xia /]# ll /oo/aa.txt
-rw-r--r-- 1 xia xia 0 Aug 8 18:24 /oo/aa.txt
四、扩展(1)
问题:reboot shutdown init halt user 管理,在普通用户身份上都是操作不了,但是有时候需要有执行权限。又不能知道root的密码。
答案:可以使用sudo(switch user do)命令来进行权限设置,sudo可以让管理员(root)事先定义哪些命令谁可以执行。
默认sudo中是没有除了root之外用户的规则,要想使用则先配置sudo.
sudo配置文件:/etc/sudoers
[root@xia /]# vim /etc/sudoers
a.配置sudo文件请使用"visudo",打开之后其使用的方法和vim一致
b.配置普通用户的权限
root:表示用户名,如果是用户组可以写成“%组名”
all:表示允许登录的主机(地址白名单)
(all):表示以谁的身份执行,all表示root身份
all:表示当前用户可以执行的命令,多个命令可以使用“,”分隔
案例:本身xia用户不能添加用户,要求使用sudo配置,将其设置为可添加用户,并且可以修改密码。
注:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径,路径可以使用which指令查看
语法:#which 指令名称
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
#Allows xia to add users and word password.but don`t word root`s password.
xia ALL=(ALL) /usr/sbin/useradd,/usr/bin/passwd
在添加好规则之后就可以切换用户,切换到xia再去执行
此时想要使用刚才的规则,输入:
#sudo 需要执行的命令
[xia@xia /]$
[xia@xia /]$ useradd qq
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
[xia@xia /]$ sudo useradd qq
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for xia:
[xia@xia /]$ tail -1 /etc/passwd
qq:x:1003:1003::/home/qq:/bin/bash
在输入sudo指令之后需要输入当前的用户密码确认操作,确认后5分钟内不需要再次确认。