本篇内容介绍了“什么是Linux账户以及怎么确保信息安全”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
GNU/Linux 通过用户和用户组进行访问控制,Linux 默认的访问控制机制相对简单直接。
用户一般指使用计算机的人。计算机给每个用户分配了用户名,用户使用这些名称访问计算机。除了人之外,一些系统服务也会建立账户,用于管理服务进程。
Linux默认会存在root用户,root用户拥有系统的最高权限,可以进行一切操作,而其他账号只能拥有部分权限。
Linux有组的概念,使用者可以通过修改组的权限对更多成员进行访问控制,每个用户必须是一个组的成员,这个组成为主属组,每个用户只能拥有一个主属组,但可以拥有多个从属组。
Linux通过useradd命令新增用户,通过userdel删除用户。UNIX中一切皆文件,所以最后所有的修改最终都会以文件的形式展示。你可以通过命令pwck –s检查用户配置文件(数据库)的完整性。
Linux通过访问权限控制用户可以查看的内容,使用ls –l命令可以看到如下内容:
里面标识了每个文件的所属用户,所属组,用户访问权限,组访问权限,非所属用户和所属组访问权限,文件大小,最后修改时间的信息。访问权限包括文件的读(r)写(w)执行(x)权限。控制好文件的访问权限可以有效防止数据泄露。
有时候安装一个新的软件都会自动创建一个用户和同名的组,这些软件一般是为用户提供服务的或者为网络上的用户提供Web服务、邮件服务等,这些软件就运行在它的组里,这样即便是软件受到了外界的攻击,也无法破坏非软件所属用户之外用户的文件。同样它也会建立一个只属于这个账户的目录,防止别的用户篡改。这些用户一般都是不可登录,并且不能使用密码,杜绝了通过爆破密码进入计算机。下表是一些用户组和其影响文件的信息。
组 | 影响文件 | 作用 |
Adm | 类似 wheel 的管理器群组 | |
ftp | /srv/ftp/ | 访问 FTP 服务器 |
Games | /var/games | 访问一些游戏。 |
Log | 访问 syslog-ng 创建的 /var/log/ 日志文件 | |
http | /srv/http/ | 访问 HTTP 服务器文件 |
Sys | Right to administer printers in CUPS | |
systemd-journal | /var/log/journal/\* | 以只读方式访问系统日志,和 adm 和 wheel 不同 [1]. 不在此组中的用户仅能访问自己生成的信息。 |
Users | 标准用户组 | |
Uucp | /dev/ttyS[0-9]+, /dev/tts/[0-9]+, /dev/ttyUSB[0-9]+, /dev/ttyACM[0-9]+ | 串口和 USB 设备,例如猫、手柄 RS-232/串口。 |
Wheel | 管理组,通常用于 sudo 和 su 命令权限。systemd 会允许非 root 的 wheel 组用户启动服务。 |
下面这些文件不建议手动编辑。用相关工具编辑更好,这样可以避免文件错误。
文件 | 作用 |
/etc/shadow | 保存用户安全信息 |
/etc/passwd | 用户账户信息 |
/etc/gshadow | 保存组账号的安全信息 |
/etc/group | 定义用户所属的组 |
/etc/sudoers | 可以运行 sudo 的用户 |
/home/* | 主目录 |
账号的基本信息存储在/etc/passwd。在这个文件中每个用户的帐号信息存储一行,帐号信息由七个字段组成,字段之间用冒号(":")分隔,从左至右分别表示为:帐号,密码,用户ID,组ID,用户介绍, home目录,默认shell。
1. name:password:UID:GID:GECOS:directory:shell
字段的详细描述如下:
· 账号:用户名,不能为空,不能包含大写字母,而且要符合标准的UNIX命名规则;
· 密码:加密的用户密码,或者星号,但实际上这个位置通常为"x",这里有所特殊,后面会详细介绍
· 用户ID:每个用户和组有一个对应的UID和GID(用户ID和组ID)。一般情况,第一个非root用户的默认UID是1000,后续创建的用户UID也应大于1000,特定用户的GID应该属于指定的首要组,组的ID数值列在/etc/group文件里。
· 组ID:用户的主要组ID
· 用户介绍:可为空,通常为账号使用者的信息,如使用者姓名,Email等,使用英文逗号(",")分割
· home目录:用于登录命令设置$HOME环境变量。某些服务的用户主目录设置为"/"是安全的,但不建议普通用户设置为此目录。
· 默认shell:登录时运行的程序(如果为空,则使用 /bin/sh作为默认shell)。 如果设为不存在的执行(程序),用户不能通过login登录。
在新版Linux中使用shadow文件存储密码。passwd文件对所有人可读,在里面存储密码(无论是否加密过)是很不安全的。在password字段,通常使用一个占位字符(x)代替。加密过的密码储存在/etc/shadow文件,该文件对普通用户限制访问。
示例:
1. jack:x:1001:100:Jack Smith,some comment here,,:/home/jack:/bin/bash
分解说明:用户登录名为jack,密码保存在/etc/shadow,UID为1001,首要组的ID是100 (users组),全名Jack Smith并加了一些注释,主目录是/home/jack,使用Bash作为默认shell。
/etc/shadow是用户存储账号安全信息的文件,其中包括密码、账号过期时间等设置,此文件是普通用户无法进行任何操作,在一定程度上保证了安全。
/etc/shadow文件每行包含9个字段,同样使用冒号(":")分隔,分别为登录名,加密密码,上次密码更改时间,密码不得更改天数,最长密码使用天数,密码警告期,密码闲置期,账户到期时间,保留字段。下面详细介绍每个字段的意义:
· 登录名:与/etc/passwd的账号相同,用于登录使用;
· 加密密码:经过crypt加密后的密码;
· 上次密码更改时间:最后一次修改密码的时间,表示自1970年1月1日以来的天数。值0具有特殊含义,即用户下次登录系统时应更改其密码。空字段表示密码老化功能已禁用。
· 密码不得更改天数:此字段表示在此天数之前不能修改密码,是与上次密码更改时间的间隔天数。空字段和值为0表示没有任何时间都可以修改。
· 最长密码使用天数:用户经过此天数必须修改密码。经过此天数后,密码可能仍然有效。需要用户在下次登录时更改其密码。空字段表示没有最长密码使用期限,没有密码警告期和密码闲置期(请参阅下文)。如果最大密码使用期限小于最小密码使用期限,则用户无法更改其密码。
· 密码警告期:在此期间提醒用户修改密码,空字段和值为0表示没有密码警告期。
· 密码闲置期:密码过期后的天数(请参见上面的最长密码使用期限),在此期间仍应接受密码(用户应在下次登录时更新其密码)。密码过期且经过了此过期时间后,将无法使用当前用户的密码登录。用户应联系管理员。
· 账户到期时间:此字段表示自1970年1月1日以来的天数。请注意,账户有效期与密码有效期不同。如果账户到期,则不允许用户登录。如果密码到期,则不允许用户使用其密码登录。空字段表示该账户永不过期。不应使用值0,因为它将被解释为账户于1970年1月1日到期。
· 保留字段:该字段保留供将来使用,现在暂未启用。
示例:
1. jack:$6$atIauuQ5$mh7ombrRsUxHxJ8uZGerdSUXSuBiOAzkfRgn2wrR69K5IbOANpHlBeY43BqmNkPy7Ho3XrGKu6CGIxc9nqjiS/:18303:1:10:7:7::
分解说明:登录名为jack,加密后的密码为$6$atIauuQ5$mh7ombrRsUxHxJ8uZGerdSUXSuBiOAzkfRgn2wrR69K5IbOANpHlBeY43BqmNkPy7Ho3XrGKu6CGIxc9nqjiS/,最后一次修改密码时间为2020年02月11日,2020年02月12日前不能修改密码,2020年02月21日后必须要修改密码,从2020年02月14日起登录系统会要求必须修改密码,在2020年02月28日前密码仍能使用,但登录系统后必须修改密码,否则在2020年02月28日后账户再也不能登录,未设置账户到期时间。
Linux中每个用户都必须有一个所属组,并且只能有一个,但可以有多个从属组。所属组在passwd文件中的第四个字段设置,从属组在group文件中设置。
与其他文件类似,group文件同样是每个组占用一行,并使用冒号分割为4个字段。分别为组名,密码,组ID,组中用户。下面详细介绍每个字段的意义:
· 组名:组名
· 密码:与passwd文件类似,加密的组用户密码,或者星号,但实际这个位置通常为"x"有所特殊。
· 组ID:组的数字标识。
· 组中用户:组内所有成员的用户名,以逗号分隔。
Gshadow文件同样是每个组占用一行,并使用冒号分割为4个字段。分别为组名,加密密码,管理员,成员。
· 组名:必须是系统中已经存在的有效组;
· 加密密码:经过crypt加密后的密码;
· 管理员:必须是一个逗号分隔的用户名列表。管理员可以更改组密码和成员。管理员也有成员一样的权限
· 成员:必须是一个逗号分隔的用户名列表。成员可以免密码访问组。
每个用户的登录信息都会被记录,无论是成功还是失败,可以通过命令last命令查看登录历史,lastb命令查看登录失败的记录。它们最终是通过读取/var/log/wtmp和/var/log/btmp文件获得的,这两个文件都是二进制文件,里面存储的是utmp(在Linux C头文件<utmp.h>中)结构体。
下图是部分通过lastb命令查到的尝试登录服务器的部分失败记录,其中发现一台IP为39.105.202.21的主机在3月7日12点到14点之间多次次尝试登录主机,通过命令sudo lastb | grep "39.105.202.21" | wc -l可以查看其一共进行了2213次尝试,可以推测其在尝试暴力破解登录密码。
也可以同last命令查看这个IP是否成功登录,如果有则说明用户密码一定被成功破解了,如果没有不排除文件被篡改过。
在登录输入密码时比较容易出现密码泄露,传统的加密方法,通过彩虹表可以很容易猜解密码,即使是SHA256/SHA512也可以在互联网上搜索到在线解密网站进行解密,这类加密方式只要密码一样加密结果必然雷同,所以密码被计算一次,想要破解的时候再查表就可以了。如今,MD5/SHA1 哈希算法已经被攻破,即使在加密密码前加上盐以后也不再保险 。
而在Linux中使用crypt算法对密码进行加密,这种加密方式即使每次都使用相同的密码,最后加密的结果都是不同的。salt是[a-zA-Z0-9./]中随机挑选的最多16位字符串,总共4096种的干扰方式,这就使得通过字典破解密码变得比较困难,每次破解一个密码都需要重新计算一遍。
Linux中的密码按固定的格式保存:
$id$salt$encrypted
id是一个数字,表示以何种方式对密码和salt生成随机数
ID | Method |
---|---|
1 | MD5 |
2a | Blowfish (不在主线glibc中;在某些Linux发行版中添加) |
5 | SHA-256 (从glibc 2.7起) |
6 | SHA-512 (从glibc 2.7起) |
salt是由大小写字母、数字、英文句号(.)和“/”组成的不超过16字节的随机字符串。
encrypted:是由明文密码和随机salt通过组合,再通过散列函数后生成的密文,不同散列算法的密文长度如下:
算法 | 长度 |
---|---|
MD5 | 22字符 |
SHA-256 | 43字符 |
SHA-512 | 86字符 |
“什么是Linux账户以及怎么确保信息安全”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。