本章内容
理解Linux的安全性
解读文件权限
使用Linux组
1、Linux的安全性---/etc/passwd文件
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
/etc/passwd文件的字段包含了如下信息:
登录用户名
用户密码
用户账户的UID(数字形式)
用户账户的组ID(GID)(数字形式)
用户账户的文本描述(称为备注字段)
用户HOME目录的位置
用户的默认shell
2、Linux的安全性---/etc/shadow文件
/etc/shadow文件为系统上的每个用户账户都保存了一条记录。记录就像下面这样:
rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::
在/etc/shadow文件的每条记录中都有9个字段:
与/etc/passwd文件中的登录名字段对应的登录名
加密后的密码
自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
多少天后才能更改密码
多少天后必须更改密码
密码过期前提前多少天提醒用户更改密码
密码过期后多少天禁用用户账户
用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
预留字段给将来使用
3、添加新用户
用来向Linux系统添加新用户的主要工具是useradd。这个命令简单快捷,可以一次性创建新用户账户及设置用户HOME目录结构。 useradd命令使用系统的默认值以及命令行参数来设置用户账户。系统默认值被设置在/etc/default/useradd文件中。可以使用加入了-D选项的useradd命令查看所用Linux系统中的这些默认值。
# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#
在创建新用户时,如果你不在命令行中指定具体的值, useradd命令就会使用-D选项所显示的那些默认值。这个例子列出的默认值如下:
新用户会被添加到GID为100的公共组;
新用户的HOME目录将会位于/home/loginname;
新用户账户密码在过期后不会被禁用;
新用户账户未被设置过期日期;
新用户账户将bash shell作为默认shell;
系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
系统为该用户账户在mail目录下创建一个用于接收邮件的文件。
倒数第二个值很有意思。 useradd命令允许管理员创建一份默认的HOME目录配置,然后把它作为创建新用户HOME目录的模板。这样就能自动在每个新用户的HOME目录里放置默认的系统文件。
useradd命令行参数
参数 描述
-c comment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date 用YYYY-MM-DD格式指定一个账户过期的日期
-f inactive_days 指定这个账户密码过期后多少天这个账户被禁用; 0表示密码一过期就立即禁用, 1表示禁用这个功能
-g initial_group 指定用户登录组的GID或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录
-m 创建用户的HOME目录
-M 不创建用户的HOME目录(当默认设置里要求创建时才使用这个选项)
-n 创建一个与用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认的登录shell
-u uid 为账户指定唯一的UID
4、删除用户
默认情况下, userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件
如果加上-r参数, userdel会删除用户的HOME目录以及邮件目录
5、修改用户
用户账户修改工具
命令 描述
usermod 修改用户账户的字段,还可以指定主要组以及附加组的所属关系
passwd 修改已有用户的密码
chpasswd 从文件中读取登录名密码对,并更新密码
chage 修改密码的过期日期
chfn 修改用户账户的备注信息
chsh 修改用户账户的默认登录shell
a.usermod
usermod命令是用户账户修改工具中最强大的一个。
-l修改用户账户的登录名。
-L锁定账户,使用户无法登录。
-p修改账户的密码。
-U解除锁定,使用户能够登录。
b.passwd和chpasswd
改变用户密码的一个简便方法就是用passwd命令。 -e选项能强制用户下次登录时修改密码。
c.创建新组
groupadd命令可在系统上创建新组。在创建新组时,默认没有用户被分配到该组。 groupadd命令没有提供将用户添加到组中的选项,但可以用usermod命令来弥补这一点。
d.修改组
groupmod命令可以修改已有组的GID(加-g选项)或组名(加-n选项)
6、文件权限
umask命令用来设置所创建文件和目录的默认权限。
对文件来说,全权限的值是666(所有用户都有读和写的权限);而对目录来说,则是777(所有用户都有读、写、执行权限)
# umask 022;touch 8.txt
# ll
-rw-r--r-- 1 root root 0 Apr 24 15:41 8.txt
注:文件一开始的权限是666, 减去umask值022之后, 剩下的文件权限就成了644
# umask 026;mkdir test5
# ll
drwxr-x--x 2 root root 4096 Apr 24 15:43 test5
注: 由于目录的默认权限是777, umask作用后生成的目录权限不同于生成的文件权限。 umask值026会从777中减去,留下来751作为目录权限设置。
7、改变权限
chmod命令用来改变文件和目录的安全性设置。该命令的格式如下:
chmod options mode file
8、改变所属关系
Linux提供了两个命令来实现这个功能: chown命令用来改变文件的属主,chgrp命令用来改变文件的默认属组。
chown命令的格式如下。
chown options owner[.group] file
chown命令采用一些不同的选项参数。 -R选项配合通配符可以递归地改变子目录和文件的所属关系。 -h选项可以改变该文件的所有符号链接文件的所属关系。
9、文件共享
创建新文件时, Linux会用你默认的UID和GID给文件分配权限。想让其他人也能访问文件,要么改变其他用户所在安全组的访问权限,要么就给文件分配一个包含其他用户的新默认属组。
如果你想在大范围环境中创建文档并将文档与人共享,这会很烦琐。幸好有一种简单的方法可以解决这个问题。
Linux还为每个文件和目录存储了3个额外的信息位。
设置用户ID( SUID) :当文件被用户使用时,程序会以文件属主的权限运行。
设置组ID( SGID) :对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
粘着位:进程结束后文件还驻留(粘着)在内存中。
SGID位对文件共享非常重要。启用SGID位后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组,这个组也就成为了每个用户的属组。
因此,要创建一个共享目录,使目录里的新文件都能沿用目录的属组,只需将该目录的SGID位置位。
$ mkdir testdir
$ ls -l
drwxrwxr-x 2 rich rich 4096 Sep 20 23:12 testdir/
$ chgrp shared testdir
$ chmod g+s testdir
$ ls -l
drwxrwsr-x 2 rich shared 4096 Sep 20 23:12 testdir/
$ umask 002
$ cd testdir
$ touch testfile
$ ls -l
total 0
-rw-rw-r-- 1 rich shared 0 Sep 20 23:13 testfile