【linux-Day5】Linux权限
- linux用户
- 用户分类
- su:用户之间进行切换
- exit/ctrl+d:退出当前账户/回退到上一个登录账户
- 权限和文件
- sudo:暂时提高用户对指令操作的权限
- Linux权限=身份+目标文件属性
- 文件的权限表示
- 修改文件的权限
- chmod:设置文件的读/写/执行权限
- chown:修改文件的拥有者、所属组
- chgrp:修改文件的所属组
- 权限和目录
- Linux用户之间是互相“隔离”的
- chmod +t:粘滞位
- 缺省权限
- 权限掩码
- umask:查看或修改权限掩码
linux用户
用户分类
linux中用户分为两类,分别是root用户和普通用户。它们分别对应超级账号和普通账号。
它们的区别是root用户权限高,可以在Linux系统下做任何事情1;普通用户权限低,且受root用户管控。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
Linux多用户之间是相互隔离的->linux允许多账号同时登录。
su:用户之间进行切换
总结su的用法:
从普通用户,切换到root用户,有以下两种方式:
su -
->输入root账户密码
:从当前用户切换到root账户的根目录下
su
->输入root账户密码
:从当前用户切换到root账户,权限变了,路径没变。
用root账户切换成普通账户:root的权限很大,不用输入密码可以任意切换。
su 普通用户名
:从root用户切换成普通用户。
在普通账户之间切换:
su B
->输入B的密码
:从普通用户A切换到普通用户B。
exit/ctrl+d:退出当前账户/回退到上一个登录账户
exit或者xshell热键ctrl+d:退出当前账户、回退到上一个登录账户。
权限和文件
在Linux中,所有的文件其实只安装了一份,所有账户共同使用。但是能否操作一个文件,由每个用户拥有的权限决定。
sudo:暂时提高用户对指令操作的权限
如果在普通账户下,不想切换到root账户,只想拥有root账户的权限—>可以通过sudo指令实现,sudo:用来进行指令的短暂提权
。
总结sudo的用法:
- sudo 命令1 —> 输入当前账户的密码:在当前账户下以root身份执行命令1。
sudo -i
:从当前用户切换到root账户的根目录下
操作后,
发现报错信息:huabing is not in the sudoers file. This incident will be reported.
分析报错原因:
这是因为使用sudo命令还有一个前提,linux系统中有一份类似于白名单的文件sudoers,在sudoers文件中记录着一份 允许暂时获得root账户权限的普通账户名单。sudoers文件的操作权限只有root账户。
总结解决办法:
如果普通账户A想要通过sudo命令获得root权限,需要先让root用户在sudoers名单中添加账户A。
在Ubuntu系统中,ubuntu虽然是系统默认普通用户,但是ubuntu是在sudoers文件的白名单中的。
sudo的功能是暂时提高用户操作的权限,其实sudoers白名单正是暂时的体现。
Linux权限=身份+目标文件属性
权限:规定用户能或不能做什么事情。
权限可以控制用户的行为,防止错误的发生。
权限限制的是 账户的身份。
对于操作一份文件来说,所有的用户都必须确认两层身份,一是,该账户是root账户还是普通账户,二是,该账户是这份文件的拥有者,所属组,还是other。通过这两层身份限制每个账户对文件进行某个具体操作。
哪个账户创建了文件,该账户就是文件的拥有者;
拥有者把自己的权限给A账户,A账户就是文件的所属组,所属组也叫拥有者同组。
一个账户既不是文件的拥有者,也不是文件的所属者,该账户就是文件的other。
在文件属性中查看文件的拥有者和所属组:
Linux下一切皆文件,获取权限的目的是操作文件,操作文件无非三种情况:读、写、执行。所以,第一,目标文件必须支持读/写/被执行的属性,第二,用户有对文件进行读/写/执行的权限。 具备以上两点,有对应权限的用户才能对目标文件成功进行读/写/执行操作。
可执行权限 != 可执行。
所以Linux权限=身份+目标文件属性。
对于一份文件来说,用户的两层身份决定该用户有没有操作它的权限,目标文件有无对应属性决定权限是否有效。
文件的权限表示
-
对文件的操作就三点:读、写、执行。在Linux中,r表示读,w表示写,x表示执行。
-
ll指令获取到文件的详细信息后,每个信息对应的属性如下:
- 文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
-
文件类型后紧跟着的九位是文件的权限值。
前三位代表拥有者的权限,中间三位代表所属组的权限,后三位代表other的权限。
在前三位中,第一位只有两种情况—>r或-
---->分别表示允许拥有者读该文件或不许拥有者读该文件;
第二位也只有两种情况—>w或-
–>分别表示允许拥有者写该文件或不许拥有者写该文件;
第三位也只有两种情况—>x或-
—>分别表示允许拥有者执行该文件或不许拥有者执行该文件;
中间三位代表所属组的权限,同理;后三位代表other的权限,同理。- 例如,描述文件text.txt的权限信息:
text.txt的拥有者是root,root能对text.txt进行读、写操作,不能执行;text.txt的所属组是ubuntu,ubuntu只能进行读文件内容;非root账户也只能对text.txt文件进行读操作。
- 例如,描述文件text.txt的权限信息:
-
除了通过组合r、w、x、-四个字符表示文件的权限值,权限信息还可以用八进制和二进制表示。
-
用二进制表示权限:
也是三位数,第一位代表读,第二位代表写,第三位代表执行,每个位数上只有1和0两个选择,是1表示可读/可写/可执行,是0表示不可读/不可写/不可执行。 -
把二进制转化成八进制---->八进制数也能表示权限值。
-
总结:文件权限的三种表示方法
例如:
text.txt的权限信息可以表示为:rw- r-- r--
或者110 100 100
或者6 4 4
-
修改文件的权限
- 只有文件的拥有者和root才可以改变文件的权限。
- 修改权限----->
- 设置文件的拥有者、所属者;
- 设置拥有者、所属组、other对文件的操作权限。
- 用户A要访问文件a,系统会先确认,用户A是不是拥有者,是,根据拥有者的权限再访问文件a;不是,继续确认用户A是不是所属组,是,根据所属组的权限访问文件a;不是,继续确认用户A是不是other,是,根据other的权限访问文件a。
- 用户没有权限,系统会直接拒绝用户访问。
chmod:设置文件的读/写/执行权限
chmod是拥有者权限、root权限。
总结chmod的用法:
-
chmod 设置符号权限值 文件1:修改文件1的操作权限。
设置符号权限值:
u/g/o/a/:拥有者/所属组(拥有者同组)/其他用户/所有用户。
+/-/=:增加/取消/赋予指定用户权限。
r/w/x:权限值。
例如:
chmod o+wr text.txt:
chmod o+wr,g-r text.txt:这样也行。 -
chmod 设置八进制权限值 文件1:修改文件1的操作权限
例如:chmod 777 文件1:设置所有账户都能对文件1进行读、写、执行。
chown:修改文件的拥有者、所属组
修改文件的拥有者和所属组—>需要先切换到root用户然后再改
或者先获取root的权限然后再改
。
总结chown的用法:
-
chown 账户A 文件1:把文件1的拥有者更改为账户A。
-
chown 账户A:账户B 文件1:把文件1的拥有者和所属组分别更改为账户A,账户B。
chgrp:修改文件的所属组
只有root权限能使用这个命令。
总结chgrp的用法:
chgrp 账户A 文件1:把文件1的所属者更改为账户A。
权限和目录
对于目录来说,
r表示用户可以用ls等指令查看目录中的内容。
w表示用户可以在目录中创建、删除文件。
x表示用户可以进入该目录。
如果用户对目录没有x权限,即使有rw权限,也没用。
如果用户对目录有x权限,但是没有r权限,即使能执行ls指令,但是没结果。
只有上面这点和文件不一样,其他没有区别。
Linux用户之间是互相“隔离”的
Linux用户之间是如何实现互相“隔离”的?
每次创建一个新用户A,Linux系统会默认在/home路径下创建一个A命名的目录,此时,/home/A就是A用户的家目录。家目录不会对other身份的用户开放rwx权限,即使对所属组开放了一定权限,但所属组默认和拥有者一致。
所以:除root外的任何用户,无法进入其他用户的家目录---->Linux用户之间实现了互相“隔离”。
chmod +t:粘滞位
假设:
目录A里存储了文件B,
- 文件B的拥有者是用户b,
- 目录A的拥有者是其他用户---->目录A的拥有者允许:用户a和用户b都能进入目录A(x),并对其中的文件进行删除操作(w)。
此时,用户b设置用户a不能对文件B进行任何操作。
这时候会出现一种情况:用户a虽然不能读/写/执行文件B,但是它能直接删除文件B。
在Linux系统中,一个文件能否被删除,与文件本身无关,与文件所处的目录权限有关。
-
如果你不想让别人读/写/执行/删除你的文件,最重要的操作是要把文件放到你的目录底下且该目录不对外开放x权限。
Linux对每个用户的家目录就是这样做的。其他用户对家目录没有x权限,都进不来家目录,更别提其他操作。
-
如果你必须要把文件放到公共目录下供大家一起使用(大家有目录的xw权限),但是只能你和目录拥有者有删除权限,Linux系统对此也提供了其他解决办法:让root用户或目录拥有者对目录执行chmod +t命令—>即给目录设置粘滞位。
补充chmod的用法:
chmod +t 目录:该目录下的文件只能由超级管理员删除、 该目录的所有者删除 、该文件的所有者删除。
例如:
root用户创建的公共目录demo:对所有用户开放rwx权限–>所有用户可进入demo目录进行删除,创建,查看文件操作。
demo目录下有一个ubuntu用户创建的test.txt文件。
进入目录的所有人可删除test.txt文件。
demo目录的拥有者或者超级账户对demo目录执行粘滞位操作后,demo下的所有文件只能由超级管理员删除、 demo目录的所有者删除 、对应文件的所有者删除。
缺省权限
权限掩码
新建一个普通文件,起始权限是666,默认不带可执行(可执行文件带可执行);新建一个目录,起始权限是777,默认带x。
一波操作发现:理论和实际不符合啊。
分析原因:
实际刚创建出来的文件/目录权限等于默认权限值 & ~umask的后三位。
umask是权限掩码,它由四个八进制数构成,但参与计算的只有它的后三位。
权限掩码位于Linux系统中,有默认值,可通过指令查看或修改。
比如:新建一个普通文件,默认权限666,系统的权限掩码值是0002,此时该文件的实际权限为666&(~002)=664。
umask的作用是什么:
权限掩码也叫权限屏蔽码。它的作用是,umask的后三位中出现的权限,不希望在文件/目录的最终权限中出现。
比如:新建一个普通文件,默认权限666,系统的权限掩码值是0002,文件的实际权限是664。002代表的权限是只允许other对文件进行写操作,则实际权限中则不允许other对文件进行写操作。
通过umask可以控制文件/目录最终的操作权限。
Linux系统为什么要什么设计umsk:
新建文件/目录的默认权限是由操作系统决定的,无法在创建前进行修改。但是不同的用户对文件/目录的初始权限可能有差异,umask的存在让不同用户自己通过配置,满足自己的需要。
umask:查看或修改权限掩码
总结umask指令的用法:
- umask:查看权限掩码
- umask 三位八进制数:修改权限掩码
用户对umask的修改是临时的。系统默认umask值存在于系统的配置文件中。
root用户的权限就是没有权限!只有一点要注意:当卸载程序的时候,程序是打开状态,这个时候root账户也必须先把程序关闭再卸载。 ↩︎