
1.8 root用户和权限管理
Linux系统对文件的权限有着严格的控制,它可以让不同的用户有不同的操作权限,以确保系统的运行安全。例如在安装、卸载软件,修改系统配置时,当前使用的普通用户无权限执行此类操作,需要用sudo为用户临时赋予管理员权限才能完成相关的操作。
1.8.1 Linux中的权限概念
Linux中的文件权限分为3种,即可读、可写和可执行。可读权限对应用户可以查看文件内容,可写权限对应用户可以对文件执行修改、保存、删除操作,可执行权限则意味着用户可以运行这个文件(当然需要这个文件本身是可以运行的)。
Linux中的文件权限和用户管理有着紧密的关系,在文件权限的管理中将用户分为3个类别。第一类是文件的拥有者(user,使用u表示),第二类是同用户组用户(group,使用g表示),第三类是非拥有者所在用户组以外的用户,也称为其他用户(other,使用o表示)。用户和用户组的关系如图1-53所示。

图1-53 用户和用户组
以图1-53所示用户结构为例,假设一个文件file1的拥有者是用户1,用户1所在的用户组是用户组1,用户组1中还有用户2、用户3这两个用户,系统中还有一个用户组名为用户组2,用户组2中有用户4、用户5这两个用户。
在这张图中,用户1所在的分类就是拥有者,用户2和用户3所在的分类是同用户组用户,而用户4和用户5所在的分类就属于其他用户。
图中还有一个用户“root”,root用户是Linux中的超级用户,它对几乎所有文件都拥有完整的可读、可写和可执行权限,在权限描述时不会提及root用户的权限。
多用户和用户组在服务器运维领域是非常有用的,在本书中使用单一用户,不涉及多用户和用户组管理,关于这部分内容不做展开,感兴趣的读者可以自行检索学习。
1.8.2 文件/目录权限查看和修改
在介绍ls命令时,介绍过通过加上-l参数可以查看文件的属性,属性中一共有7个字段,在1.7.1节中介绍了属性第一个字段中第一个字符代表的是文件的类型,那么后面几个字符和其他字段又是什么含义呢?
如图1-54所示,以bingda_directory目录为例,它属性第一个字段为“drwxrwxr-x”,其中第一个字符“d”代表这是一个目录文件,后面的“rwxrwxr-x”一共9个字符,可以3个为一组拆分成3组,即rwx、rwx、r-x,这三组就代表了三类用户权限,从左到右依次为文件拥有者的权限、文件拥有者同用户组用户的权限以及其他用户的权限。

图1-54 bingda用户主目录下的文件
权限使用3个字符表示,顺序为r(read可读)、w(write可写)、x(execute可执行),如果有该项权限,就使用对应的字母表示,如果没有这项权限,就用‘-’表示该位。例如“rwx”表示可读可写可执行,“r-x”表示可读可执行但不可写。
权限除了使用r、w、x三个字母的表示法外,还有一种数字表示法,即将3位权限看作一个3位的二进制数字,有权限为1,无权限为0。例如rwx=111(二进制)=7(十进制),r-x=101=5,分解就是r=4,w=2,x=1。
第二个字段中的数字代表的是文件包含的硬链接数量,对于普通文件,这个数字通常是1,如果创建硬链接,则这个数字会出现相应的改变。如果是目录文件,这个数字代表的是目录下包含的一级子目录数,对于空目录,这个数字会是2,因为每个目录下都至少包含两个子目录“.”和“..”,分别指向目录自身和上级目录(可以通过ls-a来验证)。第三个字段是文件的拥有者,例如bingda用户。第四个字段代表的是文件拥有者所在的群组,例如bingda用户所在的bingda组。第五个字段代表的是文件的大小,普通文件根据文件内容不同而大小不同,目录文件的大小固定为4096B。第六个字段代表的是文件最后修改时间,例如“9月1114:32”,即文件最后修改的时间是9月11日14时32分。第七个字段代表的是文件名。
文件权限的修改使用的命令是chmod,命令的基本格式是带两个参数,格式为chmode权限文件名。
其中权限部分的写法非常丰富,它可以使用指定权限的方法,也可以使用增加、减少的方法修改权限,权限的表示可以使用字母法或数字法。这里只介绍两种常用的使用方法。
第一种是设置权限,例如chmod 666 bingda_directory,其中666为权限的描述,是使用数字法表示,即将文件权限设置为rw-rw-rw-,即所有用户都可读可写不可执行。
第二种是增减权限,例如chmod o-rw bingda_directory,其中“o”表示其他用户,“-”表示减去,“rw”表示可读和可写权限,所以连起来就是减去其他用户对bingda_directory文件的可读和可写权限,运行后文件的权限状况应该是“rw-rw----”。类似的,chmod u+x bingda_directory所表示的就是为文件拥有者增加对bingda_directory文件的可执行权限,执行之后文件的权限应该是“rwxrw----”。
1.8.3 启用root用户
在Linux中,root是超级管理员用户(super user),也称为超级用户、超级管理员等,其拥有最高权限,几乎可以操作系统内所有文件。在Ubuntu系统中,超级用户root默认是没有启用的,当普通用户需要通过管理员权限执行某些操作时,可以通过在命令前加上sudo来执行,使当前用户临时获得管理员权限。
在Ubuntu中,如果要启用root用户,首先需要为root用户设置密码。设置密码的操作就需要管理员权限,通过执行sudo passwd root来设置密码,输入密码后按〈Enter〉键确认,终端会提示输入新设置的root用户密码,例如设置密码为“bingda”,输入后提示再次确认密码,再次输入“bingda”确认,两次密码一致即可完成设置,如图1-55所示。
root用户已经启用后,在普通用户的终端中输入su命令即可切换到root用户,切换到root用户会提示输入密码,这里需要输入的是root用户的密码,正确输入后当前终端的用户就切换为root用户。
root用户的命令提示符和普通用户有很明显的差别,首先root用户的命令提示符中最前面是用户名root,其次,普通用户的命令提示符末尾是“$”符号,而root用户是“#”。如图1-56所示,第一行是普通用户的命令提示符,第三行开始是root用户的命令提示符。
在root用户终端中,通过cd~跳转到当前用户的主目录,然后用pwd显示当前的路径,如图1-56所示当前的路径为“/root”,和1.7节中介绍文件系统时描述的根目录“/”下的“root”目录的功能是一致的。
要将终端从root用户切换为普通用户也很简单,在root用户下输入exit即可切换为普通用户,如图1-57所示。

图1-55 设置root用户密码

图1-56 root用户终端和主目录

图1-57 root用户切换为普通用户
本书在后文中都是使用“bingda”这个普通用户,需要管理员权限时会通过sudo来获取。同时这里也不建议初学者使用root用户进行操作,由于root用户具有最高的权限,可以操作几乎所有的文件,并且在删除或修改重要的系统文件时不会有提示,如果误操作可能会导致系统不能正常工作。