Linux沿用了Unix文件权限的办法,即允许用户和组根据每个文件和目录的安全性设置来访问文件。
Linux安全系统的核心是用户账户。
分配唯一的用户账户。
用户权限通过创建用户时分的用户ID(User ID,通常缩写为UID)来跟踪的。
登陆系统时使用的是登录名。
Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值。
包含一些与用户有关的信息。
root用户账户是Linux系统管理员,固定分配给它的UID是0。
Linux系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。
这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。
所有运行在后台的服务都需要用一个系统用户账户登录到Linux系统上。
/etc/passwd 文件的字段包含的信息如下:
- 登录用户名
- 用户密码
- 用户账户的UID(数字形式)
- 用户账户的组ID(GID)(数字形式)
- 用户账户的文本描述(称为备注字段)
- 用户HOME目录的位置
- 用户的默认shell
对Linux系统密码管理提供更多的控制。
只有root用户才能访问。
在/etc/shadow文件的每条记录中都有9个字段:
- 与/etc/passwd文件中的登录名字段对应的登录名
- 加密后的密码
- 自上次修改密码后过去的天数密码(自1970年1月1日开始计算)
- 多少天后才能更改密码
- 多少天后必须更改密码
- 密码过期前提前多少天提醒用户更新密码
- 密码过期后多少天禁用用户账户
- 用户账户被禁用的日期(自1970年1月1日到当天的天数表示)
- 预留字段给将来使用
用来向Linux系统添加新用户的主要工具是 useradd。
使用系统的默认值以及命令行参数来设置用户账户。
系统默认值被设置在 /etc/default/useradd文件中。
显示的默认值如下:
- 新用户会被添加到GID为100 的公共组;
- 新用户的HOME目录将会位于/home/loginname;
- 新用户账户密码在过期后不会被禁用;
- 新用户账户未被设置过期日期;
- 新用户账户将 bash shell 作为默认shell;
- 系统会将/etc/skel目录下的内容复制到用户的HOME目录下;
- 系统为该用户账户在mail目录下创建一个用于接收邮件的文件。
续:
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认的登录shell
-u uid 为账户指定唯一的UID
可以在 -D选项后跟上一个指定的值来修改系统默认的新用户设置。
从系统中删除用户可以用userdel命令。
默认情况下, userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
如果加上-r参数, userdel会删除用户的HOME目录以及邮件目录。
注意:
在删除用户的HOME目录文件之前一定要简称清楚,避免误删一些重要文件。
用来修改/etc/passwd文件中的大部分字段,只需用想修改的字段对应的命令行参数就可以。
命令行参数:
-c 修改备注字段
-e 修改过期日期
-g 修改默认的登录组
-l 修改用户账户的登录名
-L 锁定账户,使账户无法登录
-p 修改账户的密码
-U 解除锁定,使账户能够登录
passwd 和 chpasswd
passwd 改变用户密码
-e 选项能强制用户下次登录是修改密码
chpasswd 命令能从标准输入字典读取登录名和密码对(由冒号分隔)列表,给密码加密,然后为用户账户设置。
可以使用重定向命令来讲含有userid:passwd 对的文件重定向给该命令。
# chpasswd < users.txt
#
chsh、chfn和chage
chash、chfn和chage 工具专门用来修改特定的账户信息。
chsh 命令用来快速修改默认的用户登录shell。
使用时必须用shell的全路径名作为参数,不能只用shell名。
chfh 命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。
chage 命令用来帮助管理用户账户的有效期。
命令行参数:
-d 设置上次修改密码到现在的天数
-E 设置密码过期的日期
-I 设置密码过期到锁定账户的天数
-m 设置修改密码之间最少要多少天
-W 设置密码过期前多久开始出现提醒信息
组权限允许多个用户对系统中的对象(比如文件、目录或设备等)共享一组共用的权限。
每个组都有唯一的GID。
每个组还有唯一的组名。
/etc/group文件包含系统上用到的每个组的信息。
/etc/group文件由4个字段:
- 组名
- 组密码
- GID
- 属于该组的用户列表
groupadd 命令可在系统上创建新组。
groupadd 命令没有提供将用户添加到组中的选项,但可以用usermod命令来弥补。
usermod命令的 -G 选项会把新组添加到该用户账户的组列表中。
如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,组关系的更改才能生效。
groupmod 命令可以修改已有组的GID(加 -g 选项)或组名(加 -n 选项)。
修改组名时,GID和组成员不会变,只有组名改变。
可以随意改变组名而不会影响文件的安全性。
ls 命令可以用来查看Linux系统上的文件、目录和设备的权限。
输出结果的第一个字段是描述文件和目录权限的编码。
这个字段的第一个字符代表了对象的类型:
- 代表文件
d 代表目录
l 代表链接
c 代表字符型设备
b 代表块设备
n 代表网络设备
之后由3组三字符的编码。每一组定义了3种访问权限:
r 代表对象是可读的
w 代表对象是可写的
x 代表对象是可执行的
若没有某种权限,在该权限位会出现单破折线。
这3组权限分别对应对象的3个安全级别:
对象的属主
对象的属组
系统其他用户
rwx 文件的属主(设为登录名 rich)
rwx 文件的数组(设为组名 rich)
r-x 系统上其他人
umask 命令用来设置所创建文件和目录的默认权限。
八进制模式的值664代表属主和属组成员都有读取和写入的权限,而其他用户都只有读取权限。
umask值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。
要把umask值从对象的全权限值中减掉。
对文件来说,全权限的值是666(所有用户都有读和写的权限);
而对目录来说,则是777(所有用户都有读、写、执行权限)。
文件一开始的权限是666, 减去umask值022之后, 剩下的文件权限就成了644。
由于目录的默认权限是777, umask作用后生成的目录权限不同于生成的文件权限。
umask值026会从777中减去,留下来751作为目录权限设置。
chmod命令
用来改变文件和目录的安全性设置。
命令格式如下:
chmod options mode file
mode参数可以使用八进制模式或符号模式进行安全性设置。
第一组字符定义了权限作用的对象:
u代表用户
g代表组
o代表其他
a代表上述所有
下一步,后面跟着的符号表示你是想在
现有权限基础上增加权限( +),
还是在现有权限基础上移除权限( .),
或是将权限设置成后面的值( =)。
第三个符号代表作用到设置上的权限。
X:如果对象是目录或者它已有执行权限,赋予执行权限。
s:运行时重新设置UID或GID。
t:保留文件或目录。
u:将权限设置为跟属主一样。
g:将权限设置为跟属组一样。
o:将权限设置为跟其他用户一样。
chown命令
用来改变文件的属主。
命令格式如下:
chown options owner[.group] file
chown 命令的选项参数:
-R 选项配合通配符可以递归地改变子目录和文件的所属关系。
-h 选项可以改变该文件的所有符号链接文件的所属关系。
chgrp命令
可以更改文件或目录的默认属组。
/usr/sbin/groupadd shared 在系统上创建新组shared
/usr/sbin/usermod -G shared rich 将用户rich添加到组shared
/usr/sbin/groupmod -n sharing shared 修改组shared名为sharing
可以修改已有组的GID(加-g选项)或组名(加-n选项)。
Linux系统上共享文件的方法是创建组。
Linux还为每个文件和目录存储了3个额外的信息位。
设置用户ID( SUID) :当文件被用户使用时,程序会以文件属主的权限运行。
设置组ID( SGID) :对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
粘着位:进程结束后文件还驻留(粘着)在内存中。
SGID位对文件共享非常重要。
启用SGID位后,你可以强制在一个共享目录下创建的新文件都属于该目录的属组,这个组也就成为了每个用户的属组。
SGID可通过chmod命令设置。它会加到标准3位八进制值之前(组成4位八进制值),或者在符号模式下用符号s。
mkdir命令来创建共享的目录。
chgrp命令将目录的默认属组更改。
最后,将目录的SGID位置位,以保证目录中新建文件都用shared作为默认属组。
为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可写。
在前面的例子中, umask改成了002,所以文件对属组是可写的。
做完了这些,组成员就能到共享目录下创建新文件了。
跟期望的一样,新文件会沿用目录的属组,而不是用户的默认属组。现在shared组的所有用户都能访问这个文件了。
本章讨论了管理Linux系统安全性的一些命令行命令。
Linux通过用户ID和组ID来限制对文件、目录以及设备的访问。
useradd命令用来创建新的用户账户,
groupadd命令用来创建新的组账户。
修改已有用户账户,我们用usermod命令。类似的groupmod命令用来修改组账户信息。
每个文件都有三个安全等级:文件的属主、能够访问文件的默认属组以及系统上的其他用户。
每个安全等级通过三个访问权限位来定义:
读取、写入以及执行,
对应于符号rwx。
如果某种权限被拒绝,权限对应的符号会用单破折线代替(比如r–代表只读权限)。
chmod命令用来修改文件和目录的安全设置。
只有文件的属主才能改变文件或目录的权限。
不过root用户可以改变系统上任意文件或目录的安全设置。
chown和chgrp命令可用来改变文件默认的属主和属组。
设置组ID位来创建共享目录。
SGID位会强制某个目录下创建的新文件或目录都沿用该父目录的属组,而不是创建这些文件的用户的属组。
这可以为系统的用户之间共享文件提供一个简便的途径。
参考学习资料:
《Linux命令行与shell脚本编程大全》第3版
https://blog.csdn.net/x13262608581/article/details/107621770