本章将介绍系统安全的基础知识以及如下命令的使用。
- id: 显示用户身份标识。
- chmod: 更改文件的模式。
- umask: 设置文件的默认权限。
- su: 以另一个用户身份运行 shell 。
- sudo: 以另一个用户身份执行命令 。
- chown: 更改文件所有者。
- chgrp: 更改文件所属群组。
- passwd: 更改用户密码。
一、所有者、组成员和其它所有用户
ls命令-l选项.png给一个文件区分所有者、所属组和其他人,就是为了分配权限方便。
在之前学习 ls 命令以长格式显示结果时提到过,命令的第 3 列 pyvip 用户就是文件的所有者,第 4 列 pyvip 组就是文件的所属组。
1.用户
在 UNIX 安全模型中,一个用户可以拥有(own)文件和目录。
当一个用户拥有一个文件或目录时,它将对该文件或目录的访问权限拥有控制权。
2.所有者
文件的所有者就是这个文件的建立者。
此外,系统中绝大多数系统文件都是由 root 建立的,所以大多数系统文件的所有者都是 root。
3.群组(用户组)
用户又归属于一个群组(group),该群组由一个或多个用户组成(也就是就是一组用户的集合),组中用户对文件和目录的访问权限由其所有者授予。
除了可以授予群组访问权限之外,文件所有者也可以授予所有用户一些访问权限(所有用户是指整个世界)。
许多类 UNIX 系统会把普通用户分配到一个公共的群组中(比如:users),然而现在的 Linux 操作都是创建一个独一无二的,只有一个用户的群组,而且组名和用户的名字相同,这使得特定类型的权限分配变得更加容易。
(1)为什么?
为什么要把用户放入一个群组中呢?
当然是为了方便管理。想想看,如果我有 50 位用户,而这 50 位用户对同一个文件的权限是一致的,那我是一位用户一位用户地分配权限方便,还是把 50 位用户加入到一个群组中,然后给这个用户组分配权限方便呢?
可想而知,一定是给一个用户组分配权限更加方便。
4.概念举例
比如:我买了一台电脑,那我当然是这台电脑的所有者,可以把我的读者加入一个用户组,其他不认识的路人当然就是其他人了。分配完了用户身份,就可以分配权限了,所有者当然对这台电脑拥有所有的权限,而位于所属组中的这些学生可以借用我的电脑,而其他人则完全不能碰我的电脑。
5.id-显示用户身份标识
(0)简介
id 命令 可以显示真实有效的用户ID(uid)和组ID(gid)。uid 是对一个用户的单一身份标识。组ID(gid)则对应多个uid。
id命令已经默认预装在大多数 Linux 系统中。要使用它,只需要在你的控制台输入id。不带选项输入id ,结果会输出使用活跃用户。
① 应用
当我们想知道某个用户的 uid 和 gid 时 id命令 是非常有用的。一些程序可能需要 uid 和 gid 来运行。id 命令使我们更加容易地找出用户的 uid 和 gid 而不必在
/etc/passwd
和/etc/group
文件中搜寻。此外,你也可以在控制台输入
man id
进入id的手册页来获取更多的详情。
(1)用户身份标识
① 用户ID和有效组ID
在创建用户账户的时候,用户将被分配一个称为 用户ID 或者 uid 的号码(用户ID与用户名一一映射)。
同时用户也将被分配一个 有效组ID 或者 gid,而且该用户也可以归属于其它的群组。
1)不同系统结果不同
注意:
在 Fedora 系统中,普通用户账号是从 500 开始编号的。
而在 Ubuntu 系统中,是从 1000 开始编号的。
同时,Ubuntu 系统中的用户归属于更多的群组,这和 Ubuntu 系统管理系统设备和服务权限的方式有关。
2)主组和附加组的区别
在创建用户的时侯可以用 -g 和 -G 选项来指定用户所属组 和 附属组。
基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组,不可以把用户从基本组中删除。在创建文件时,文件的所属组就是用户的基本组。
附加组:除了基本组之外,用户所在的其他组,都是附加组。用户是可以从附加组中被删除的。
用户不论处于基本组中还是附加组中,就会拥有该组的权限。一个用户可以属于多个附加组。但是一个用户只能有一个基本组。
② 信息来源
类似于 Linux 系统中的很多情况,这些信息来源于一系列的文本文件。
用户账户定义在文件 /etc/passwd 中,用户组定义在 /etc/group 文件中。
在创建用户账户和群组时,这些文件随着文件 /etc/shadow 的变动而修改,文件 /etc/shadow 中保存了用户的密码信息。
对于每一个用户账户,文件 /etc/passwd 中都定义了对应用户的用户(登录)名、uid、gid、账户的真实姓名、主目录以及登录 shell 信息。如果查看文件(/etc/passwd )和文件( /etc/group )的内容,那你将会发现除了普通用户帐户信息之外,文件中还有对应于超级用户(uid = 0)和其它不同种类的系统用户的账户信息。
(2)语法格式
id [选项]... [用户名]
'''
功能: 显示用户身份标识(比如:用户ID(uid)、有效组ID(gid))。
参数:
① 用户名: 指定用户后,将会显示 指定用户 的身份标识。
(也可以不指定用户名,只写一个命令,这样就会显示当前用户的身份标识)
②
选项:
① -a :忽略同其它版本兼容。
② -g , --group :只显示 组ID。
③ -G , --groups :只显示 附加组。
④ -n, --name :显示 名字 而不是 数值。
⑤ -r, --real :显示 真实ID 而不是 有效ID。
⑥ -u, --user :只显示 用户ID。
⑦ --help :显示 帮助 并且退出。
⑧ --version :显示 版本信息 并且退出。
如果不附带任何选项,程序会显示一些可供识别用户身份的有用信息。
返回值: 用户身份标识.
'''
示例
① 显示当前用户的所有信息
id
② 显示指定用户的所有信息
id root
③ 打印用户名、用户ID、所属的所有组
id -u
④ 显示用户ID
id -u 或 id --user
⑤ 显示用户所属群组的ID
id -g
⑥ 显示所属组的名字
id -ng
⑦ 显示用户所属附加组的ID
id -G
⑧ 显示用户所属附加组名字
id -nG
网友评论