Linux的安全性
用户权限是通过创建用户时分配的用户id(UserId,通常缩写为UID)来跟踪的。UID是数值,每个用户都有唯一的UID,但在登录系统时用的不是UID,而是登录名。
Linux系统使用特定的文件和工具来跟踪和管理系统上的用户账户。
/etc/passwd文件
Linux系统使用一个专门的文件来将用户的登录名与UID值进行匹配。这个文件就是/etc/passwd文件,它包含了一些与用户有关的信息。
Linux为系统账户预留了500以下的uid值。为普通用户创建账户时,大多数Linux系统会从500开始,将第一个可用UID分配给这个账户。
/etc/passwd文件的字段包含了如下信息:
- 登录用户名
- 用户密码
- 用户账户的UID(数字形式)
- 用户账户的组ID(GID)数字形式
- 用户账户的文本描述(称为备注字段)
- 用户HOME目录的位置
- 用户的默认Shell
目前,绝大多数的Linux系统都将用户密码保存在另一个单独的文件中(叫做shadow文件,位置在/etc/shadow)。
/etc/shadow文件
/etc/shadow文件对Linux系统的密码管理提供了更多的控制。
在/etc/passwd文件中的每条记录都有9个字段:
- 与/etc/passwd文件中的登录名字段对应的登录名
- 加密后的密码
- 自上次修改密码后过去的天数
- 多少天后才能更改密码
- 多少天后必须更改密码
- 密码过期前提前多少天提醒用户更改密码
- 密码过期后多少天禁用用户账户
- 用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)
- 预留字段给将来使用
添加新用户
- useradd -m test
默认情况下,useradd不会创建HOME目录,但是-m命令行选项会使其创建HOME目录。
删除用户
默认情况下,userdel只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
如果加上-r参数,userdel会删除用户的HOME目录以及邮件目录。
- /usr/sbin/userdel -r test
修改用户
命令 | 描述 |
---|---|
usermod | 修改用户账户的字段,还可以指定主要组以及附加组的所属关系 |
passwd | 修改已有用户的密码 |
chpasswd | 从文件中读取登录名密码对,并更新密码 |
chage | 修改密码的过期日期 |
chfn | 修改用户账户的备注信息 |
chsh | 修改用户账户的默认登录shell |
/etc/group文件
与用户账户类似,组信息也保存在系统的一个文件中。/etc/group文件包含系统上用到的每个组的信息。
上图中,系统账户用的组通常会分配低于500的GID值,而用户组的GID则会从500开始分配。
/etc/group文件有4个字段:
- 组名
- 组密码
- GID
- 属于该组的用户列表
创建新组
- /usr/sbin/groupadd shared
执行此命令后,可以看到/etc/group文件最后增加了shared组 - /usr/sbin/usermod -G shared test
通过执行上面的命令,将test用户增加到shared组中
修改组
- /usr/sbin/groupmod -n sharing shared
执行上面的命令,使得组名从shared转变成sharing
默认文件权限
umask 命令用来设置所创建文件和目录的默认权限
$ umask
0022
$
umask第一位代表特别的安全特性,叫做粘着位,后面的3位表示文件或目录对应的umask八进制值。
umask值只是个掩码,它会屏蔽掉不想授予该安全级别的权限。
要把umask值从对象的全权限值中减掉。对文件来说,全权限的值是666(所有用户都有读写权限),而对目录来说,则是777(所有用户都有读,写,执行权限)
文件一开始的权限是666,减去umask值022之后,剩下的权限就成了644.
同样道理,对于新创建的目录,则是用777减去022,即755的权限。
改变权限
1.使用八进制模式进行安全性设置
chmod命令用来改变文件和目录的安全性设置,格式如下:
chmod options mode file
如chmod 760 newFile
2.使用符号模式进行安全性设置
[ugoa…][+ - =][rwxXstugo…]
第一个括号:
- u代表用户
- g代表组
- o代表其他
- a代表所有
第二个括号: - 增加权限(+)
- 移除权限(-)
- 权限设置成后面的值(=)
第三个括号: - X:如果对象是目录或者它已有执行权限,赋予执行权限
- s :运行时重新设置UID或GID
- t :保留文件或目录
- u:将权限设置为跟属主一样
- g:将权限设置为跟属组一样
- o:将权限设置为跟其他用户一样
如:chmod o+r newfile 给其他用户加上读的权限
chmod u-x newfile 移除属主已有的执行权限
改变所属关系
Linux提供了两个命令来实现这个功能:
chown命令用来改变文件的属主
chgrp命令用来改变文件的默认属组
chown命令的格式如下:
chown options owner[.group] file
如:
可用登录名或UID指定文件的新属主
chown dan newfile
同时改变文件的属主和属组
chown dan.shared newfile
chgrp 命令可以更改文件或目录的默认属组
chgrp shared newfile