Linux沿用了Unix文件权限的方法,允许用户和组根据每个文件和目录的安全性设置来访问文件。Linux安全系统的核心是用户账户,每个进入Linux的用户都会被分配唯一的用户账户,用户对系统中各种对象的访问权限取决于他们登录时所用的账户。
用户权限是通过创建用户时分配的用户ID(UID)来跟踪的,UID是一个数值,每个用户都有一个唯一的UID,而登陆的时候用的是登录名,同时关联一个密码。
Linux使用特定的文件和工具来跟踪和管理系统上的用户账户。
/etc/passwd文件
Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值,就是/etc/passwd文件
root用户账户是Linxu系统的管理员,固定分配给他的UID是0,而Linux会为各种各样的功能创建不同的用户,而这些用户并不是真正的用户,叫做系统账户,只是为了系统上运行的各种服务进程能够访问到特定资源的特殊账户,所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。
在安全问题不那么明显之前,这些服务经常会用root账户登录,一旦有人攻陷这些服务中的一个,它就立刻能作为root用户登录系统。现在为了防止这种情况,基本上运行在Linux后台的服务都是用自己的账户登录了,这样即使有人攻陷某个服务,也不会以root账户登录,无法控制整个系统。
Linux系统为系统账户预留了500以下的UID值,有些服务甚至需要特定的UID值,创建普通的用户账户时,通常从500开始。
/etc/passwd 文件(本身是一个文本文件)中包含以下字段:
登录用户名
用户密码
用户账户的UID
用户账户的组ID(GID)
用户账户的文本描述
用户HOME目录的位置
用户的默认shell
而现在,绝大多数的Linux系统都将用户密码保存在另一个单独的文件中(shadow文件),只有特定的程序才能访问它(比如登录程序)。
/etc/shadow 文件
为Linux系统密码管理提供了更多的控制,只有root用户才能访问这个文件,比/etc/passwd文件安全。
这个文件保存的内容相当丰富,可以更好地控制密码,多久改一次,什么时候禁用用户都是一个字段。
添加新用户
useradd命令可以向Linux系统添加新用户,它可以一次性创建新用户账户及设置用户HOME目录结构。useradd命令使用系统默认值以及命令行参数来设置用户账户,默认在/etc/default/useradd文件下
-D参数可以查看所有的默认值
上述没有直接使用useradd是因为/user/sbin目录并未包含在PATH环境变量中,所以其下面的useradd 就不能直接使用,只能使用绝对文件路径名来使用这些工具。(或者加到PATH也就能直接使用useradd了)
(必须在root用户账户下运行这些命令)
创建新用户可以指定一些命令行参数更改系统默认值
useradd命令会将tech shell作为新用户的默认登录shell(-s 更改默认的登录shell)
删除用户
userdel命令可以从系统中删除用户,默认情况下,userdel只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
-r参数则会删除用户的HOME目录以及邮件目录
使用ls命令时,即可看出之前的目录已经不存在了(所以使用-r参数要特别小心,是否有重要文件存在要删除的文件夹)
修改用户
Linux系统中有很多的命令可以修改用户信息
usermod 命令是最强大的一个,他能用来修改/etc/passwd文件中的大部分字段,只需要加上对应的命令行参数即可。(-c修改备注字段,-e修改过期日期,-g修改默认的登录组)
passwd 命令修改用户密码(登录用户有权更改自己的密码,但是只有root用户才能修改其他账户的密码)
chpasswd可以为大量用户修改密码(很少使用)
chsh/chfn/chage 专门用来修改特定的账户信息。
chsh命令快速修改用户默认登录shell、使用时必须带上shell的全路径名作为参数
chsh -s /bin/csh test
为test用户更改默认shell
chfn 命令提供了修改/etc/passwd文件中备注字段存储信息的标准方法(修改用户信息)
finger命令可以用来查看这些信息。
chage命令用来帮助管理用户账户的有效期,两种模式,一种是具体年月日,一种是从1970年1月1日到该日期的天数
Linux组
用户账户在控制单个用户安全性方面很好使用,但涉及到在共享资源的自足用户是就不太方便了。
组权限允许多个用户对系统中的对象(文件、目录、设备)共享一组共用的权限。(各种发行版会有不同的划分,有的是一个用户一个组,有的是所有用户一个组)
每个组都有GID,在系统上的唯一数值,还有其组名。
/etc/group文件
组信息也保存在系统的一个文件下,它包含了系统上用到的每一个组的信息:
与用户ID相似,GID也采取相似的分配手段:500以下为系统预留的组ID,用户组的GID一般从500开始,一般有四个字段:组名、密码、GID、属于改组的用户列表
不能直接修改文件中的内容来添加一个用户到某个组,只能通过usermod命令来修改用户所属组。
(注:当一个用户在/etc/passwd文件中指定一个组作为其默认组时,该用户账户不会作为该组成员出现在/etc/group文件中)
创建新组
groupadd命令可以在系统上创建新组
创建新组时,默认没有用户被分配到该组
usermod可以向组内添加用户(-g 和-G 有区别,前者会从之前的默认组中剔除,而后者不影响其默认组)
(更改用户归属的用户组之后,只有退出系统后才能生效)
修改组
groupmod命令可以修改已有组的GID(-g 选项参数)和组名(-n选项参数)