1.7 Linux文件权限
1.7.1 Linux安全性
Linux安全系统的核心是用户账户。访问Linux系统的每个人都应该拥有已分配的、唯一的用户账户。用户拥有的对系统中对象的权限依赖他们登录的用户账户。
可以使用用户ID(通常称为UID)来跟踪用户权限,账户将将在创建时被分配UID。UID是针对每个用户的唯一数值。不能使用UID登录Linux系统,而是需要使用登录名。登录名是由不多于8个字符(可以是数字或字母)组成的文本字符串,用户使用它(以及相关密码)登录系统。
1./etc/passwd文件
Linux系统使用/etc/passwd文件将登录名与相应的UID值匹配。/etc/passwd文件包含几条关于用户的信息。在当前的Linux系统中,/etc/passwd文件看上去如下所示:
根用户账户是Linux系统的管理员,它的UID始终为0。Linux系统中各种非实际用户的函数创建了大量用户账户,称为系统账户。系统账户是一个特殊的账户,在系统中运行的服务使用它们访问系统来源。在后台模式中运行的所有服务都需要作为系统用户账户登录Linux系统。
Liunx将500以下的UID保留用作系统账户。一些服务甚至需要特定的UID才能正常工作。当为普通用户创建账户时,大多数Linux系统都会从500开始分配第一个可用的UID。/etc/passwd文件中包含的信息远远不止用户的登录名和UID,/etc/passwd文件中的字段包含以下信息:登录用户名、用户密码、用户账户的数值UID、用户账户的数值用户组ID(GID)、用户账户的文本描述、用户HOME目录的位置、用户的默认shell。
/etc/passwd文件中的密码字段被设置为一个x。这并不意味着所有用户账户都拥有相同的密码。现在,大多数Linux系统都将用户密码保存在一个单独的文件中(称为影子文件,位于/etc/shadow)。只有一些特殊程序才允许访问该文件。
/etc/passwd文件是一个标准的文本文件。可以使用任何文本编辑器直接在/etc/passwd文件中手动执行用户管理函数(如添加、修改、删除用户账户)。但是,这是一个非常危险的操作,如果/etc/passwd文件被破坏,则系统将不能读取它,并且它将阻止任何人(甚至是根用户)登录系统。
2./etc/shadow文件
/etc/shadow文件为Linux系统管理密码的方式提供了更多的控制。只有根用户才能访问/etc/shadow文件,这/etc/passwd文件更安全。对于系统的每个用户账户,/etc/shadow文件都包含一个相应的记录。其记录如下所示:
每个/etc/shadow文件中的登录名相对应的登录名:
1.与/etc/passwd文件中的登录名相对应的登录名
2.经过加密的密码
3.密码上次修改时距1970年1月1日的天数
4.距能够修改密码时的最少天数
5.距必须修改密码时的天数
6.距密码逾期并警告用户修改密码的天数
7.从密码逾期开始到账户被禁用的天数
8.用户账户已被禁用的天数
9.保留供为来使用的字段。
使用影子密码系统,Linux系统对用户密码拥有更加精细的控制。它可以控制用户必须多久修改一次密码,以及当密码未修改时何时禁用账号。
3.添加新用户
useradd是用于将新用户添加到Linux中的主要工具。此命令为创建新用户账户并同时建立用户的HOME目录结构提供了一种简便的方法。useradd命令使用系统默认值结合命令行参数来定义用户参数。要查看Linux发行版所使用的系统默认值,使用useradd -D命令如下:
PS:一些Linux发行版将Linux用户和用户组实用工具放置在/usr/sbin目录中,该目录可能不在PATH环境变量中。如果用户使用的Linux发行版属于这种情况,把目录添加到PATH变量中,或使用绝对路径来运行它。
如果在创建新用户账户时未在命令行中指定各属性,则-D参数将显示useradd命令所使用的默认值。本例显示一下默认值:
² 新用户将被添加到用户组ID为100的公共用户组中
² 新用户将在/home/loginname目录下创建一个HOME账户
² 当密码逾期时,账户将不会被禁用
² 新账户不会在设定日期被设置为逾期
² 新账户将使用bashshell作为默认shell
² 系统会将/etc/skel目录中的内容复制到用户的HOME目录
² 系统将在邮件目录中创建一个文件用于用户账户接收邮件。
useradd命令允许管理员创建一个默认的HOME目录配置,然后使用它作为模板来创建新用户的HOME目录。这允许将系统的默认文件自动放置在每一个新用户的HOME目录中。在当前的Liunx系统中,/etc/skel目录包含以下文件:
它们是bash shell环境的标准启动文件。系统会自动将这些默认文件复制到用户为每个用户创建的HOME目录中。可以使用默认的系统参数创建一个新用户,然后再查看新用户的HOME目录,执行命令创建成功后,useradd命令使用/etc/skel目录中的文件创建一个新HOME目录。useradd命令行参数:
通过使用命令行参数,在创建新用户账户时,可以覆盖所有的系统默认值。然而,如果总是需要覆盖一个值,更改系统默认值更容易。通过使用-D参数和表示需要修改的值的参数,可以修改系统默认的新用户值。
4.删除用户
如果希望从系统中删除用户,则需要使用userdel命令。默认情况下,userdel只删除/etc/passwd文件中的用户信息。它不会删除用户在系统中拥有的任何文件。
如果使用-r参数,则userdel将删除用户的HOME目录和用户的邮件目录。在系统中删除的用户账户可能仍然拥有其他文件。userdel的命令参数:
5.修改用户
Linux为修改已有用户账户的信息提供了一些不同的使用工具。每个实用工具都提供了一个特定的函数,用户修改关于用户账户的信息。以下几节分别介绍这些工具:
5.1 usermod
usermod是最强大的用户修改实用工具。它提供了各种选项用于修改/etc/passwd文件中的大多数字段。为此,只需要使用与要修改的值对应的命令行参数。usermod参数命令如下所示:
5.2 passwd和chpasswd
passwd命令可用于快速修改用户的密码。如果只使用passwd命令自身,那么它将修改自己的密码。系统中的任何用户都可以修改自己的密码。但是只有根用户可以修改其他人的密码。
-e选项用于强制用户在下次登录时修改密码,它非常方便。这允许将用户的密码设置为一个简单的值,然后再强制将密码修改为可以记住的较为复杂的值。
如果需要对系统上的大量用户执行批量密码修改过,那么可以使用chpasswd命令。chpasswd命令从标准输入读取登录名和密码对列表(由冒号分隔),并自动对密码进行加密,让后为用户账户设置它们。
5.3 chsh、chfn和chage
chsh、chfn和chage实用工具专用于特定的功能。chsh命令允许快速修改用户的默认登录shell。必须使用shell的完全路径名,而不能仅是shell名称。
chfn命令提供了一个标准方法,用于将信息存储到/etc/passwd文件的注释字段中。与只插入随机文本,如名称、昵称、甚至保留注释字段为空的传统方式不同,chfn命令使用Unix finger命令中使用的具体信息来存储注释字段中的信息。finger命令允许方便地查找关于Linux系统上的用户信息。
chage命令帮助管理用户账户的密码变化过程。
chsh、chfn和chage参数说明如下: