开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Liux 用户和组的的配置及管理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:
https://developer.aliyun.com/learning/course/550/detail/7609
Liux 用户和组的的配置及管理
内容介绍:
一、用户和组的配置文件
二、密码加密
三、密码的复杂性策略
四、group 文件格式
一、用户和组的配置文件
◆Linux 用户和组的主要配置文件:
/etc/passwd: 用户及其属性信息(名称、UID、 主组 ID等)
/etc/group :组及其属性信息
/etc/shadow :用户密码及其相关属性
/etc/gshadow :组密码及其相关属性
passwd文件格式:
◆login name :登录用名( wang )
◆passwd :密码(x)
◆UID :用户身份编号(1000)
◆GID :登录默认所在组编号(1000)
◆GECOS :用户全名或注释
◆home directory :用户主目录(/home/wang)
◆shell :用户默认使用shell (/bin/bash)
shadow文件格式:
◆登录用名
◆用户密码:一般用 sha512 加密
◆从1970年1月1日起到密码最近一 次被更改的时间
◆密码再过几天可以被变更( 0表示随时可被变更)
◆密码再过几天必须被变更( 99999表示永不过期)
◆密码过期前几天系统提醒用户(默认为一周)
◆密码过期几天后帐号会被锁定
◆从1970年1月1日算起,多少天后帐号失效
上一节讲了用户账号、组账号以及权限的相关概念,其中讲述了关于用户组的四个配置文件。介绍了第一个文件的结构,命令 cat /etc/passwd 查看。
我们介绍了第一个“wang”用户名,“x”为页码,“500”为 uid,“500”为 gid,gid 为主组 id 号,再中间那一串算描述,/data/wang:为家目录路径,最后的 /bin/bash 为它使用的 shell 类型。
系统支持的shell类型可以通过 cat /etc/shells 命令查看,除了可以使用 /bin/bash shell 也可以改成别的 shell 类型。
现在想把 wang 账号里面的 shell 类型改成 csh,如果不用文本编辑工具直接修改的话是可以的,但是我们上午曾经做过一个实验,把账号的 ID 改成 账号也不是零,root 账号也不是零,导致系统也起不来了,所以一般来讲“wang” 文件里除了有特殊需求,一般来说是不建议直接修改里面的文件的,如果要修改文件里面的内容,是利用特定的工具进行修改的。
现在修改 shell 类型有特定的命令,改变 wang 账号的 shell 类型使用 chsh –s /bin/csh wang 命令,其中 –s 就是指定新的 shell,改了之后使用 wang 账号登录,查看当前 shell 类型会发现已改变。
登录 centos 6,使用 echo $SHELL 命令查看会发现已修改。
Csh 和 bash shell 不是同一个 shell 类型,内置命令不一样,不支持 enable,支持 history,不过他的显示格式和默认的 bash 里面的 history 不一样。
我们现在查看的都是内部命令,shell 类型和内置命令是息息相关的,不同的 shell 采用的内部命令的集是不一样的。
当然我们不需要掌握太多的 shell 类型,只需要知道常见的 bash 就可以了,还有一个常见的 shell 类型为 nologin,也是我们系统中常用的,nologin 这个 shell 类型,为不可登录。
我们现在来修改一下 nologin 这个 shell 类型,登录 wang 账号,这时候就会导致无法登录。
Nologin 就表示用户不能登录系统了,即使我们后面用 su 切换,他也是不能登录的,su 切换就是不需要登录可以用来切换身份的,但是这个 wang 账号已经使用了 nologin ,连切换都切换不了。那么 nologin 既然不是给用户用的,那么其实是给系统用的。
我们系统中常会有开机就会有的进程,而这些进程就是使用系统账号运行的,就是使用的 nologin,因为他就是给开机的进程使用的,不是给人使用的。所以将来要创建给进程、服务用的账号,就会使用 nologin。
因为如果用普通的账号创建方式创建,不加 nologin 的 shell 类型,那么黑客就会利用这一点来登录,造成安全隐患,使用 nologin 黑客就利用不了。
当然我们不需要创建了账号之后进行修改,我们能在创建账号时直接就设置他的 shell 类型为 nologin,就不需要再修改了。
现在把 wang 账号的类型再修改到刚开始的 bash,修改好之后,就可以使用 su 切换了。
由此我们对这个文件的格式就十分了解了,一共七个字段,需要记住。
Shadow 意思为影子,Shadow 文件可以放用户的口令,有一定的安全措施,不是说随便一个用户就可以登录的,设置了相应的权限。
现在来查看 shadow 文件的格式。
总共包括用冒号隔开了九个 field,field 翻译为域,就是列的意思,当然也可以成为字段或者属性,这些都是同样的意思。
当然也可以成为行,后面还可以看到 record 记录的意思,后面经常会接触一些相关术语。
现在 shadow 就是有九个列,我们来看一下都包括什么。
“wang”是账号,$6是特定的加密算法,当然也有别的加密算法。比如 $1 对应的加密算法是 md5,$6 的加密算法是 sha512,这种加密算法相对而言更加安全,$1 对应的 md5 已经被破解了。
如果两个账号的口令是一模一样的,会不会导致出现的加密算法也是一样的呢?
我们知道不同的口令有不同的加密算法,但加了 salt 之后就会导致相同的口令加密完也是不一样的,salt 翻译为盐,使密码具有随机性,这样可以避免破译。在数据库里面就不如 linux,在数据库里如果口令一样,那么在家出来的加密算法也是英语的,这样就有可能暴露密码。
但是如果盐一样,那么结果也是一样。关于加密的算法可以人为更改,但是理论上不可逆。
接着第三个字段17618显示的是什么时候改的口令,改口令的天数。
17618显示的意思就是距离 1970 年1号过了17618天,如果想知道今天到70年有多少天。
先用 data +&s 算出有多少秒,再使用 echo data +%s /3600/24 | bc 算出来有多少天,得出一共过了17623天。
在帮助文档里还有一句特别重要的话,如果值为零的话是有特殊意义的。
就是说如果为零就会迫使为你下一次登录必须更改口令,更安全。把不安全的密码可以改为安全的复杂的密码。
再接着往下看文档。
新建账号时会有默认口令,但不安全,所以可以设置为零,这样第一次登录时就会迫使它改口令,保障安全,还可以设置最短口令有效期,最短有效期就是规定多少天之后才可以更改口令,也就是规定多少天内不可以更改口令,避免更改次数过多出现遗忘。
比如设置最短有效期为三,也就是三天之后才可以更改新口令,这三天内不可以更改,如果最短有效期是零的话就是随时都可以更改口令。
还有一个最长口令有效期,就是改了多少天之后口令就过期了,一旦过期就口令就不能用了,规定多少天后必须改新口令,默认用久。保证账号安全性。
在 windows 想要查看最短口令有效期和最长口令有效期就用 net accounts 命令查看。
Windows的时间比较合理。但是这只是一个通用策略,针对单独
的用户可以单独设置,在属性里面可以设置永不过期。
也可以设置一个命令,在快到期的时候起到一个提醒作用。使用 nano 就可以修改
修改完可以看见在 wang 账号上提醒还有2天口令就过期了,这只是个警报,还是可以使用的,但是如果不更改的话2天之后过期了就不可以使用了。
还有一个方法就是设置一个宽限期,就是口令过期之后的多少天内还是可以使用,一旦宽限期再过期就不可以使用了。
上述字段里还有一个账号有效期,账号有效期就是可以使用这个账号多久,等过了这个账号有效期之后账号就不可以使用了。
二、密码加密
◆加密机制:
加密:明文-->密文
解密:密文-->明文
◆单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5: message digest,128bits
sha
1
: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
◆更改加密算法 authconfig --passalgo=sha256 –update
关于加密算法可以使用命令 authconfig --passalgo=sha256 –update 修改,比如现在来修改一下。
现在就吧 wang 账号的 $6 改为了 $5,把加密算法改成了 sha512,512位尾数更长,更加安全。
以上提到的六种加密方法都称为哈希算法,哈希算法有一个特点就是属于单向加密,关于单向加密唯一要记住的点就是他是不可逆的。
但是 md5 易被破解,属于不那么安全的算法,所以再 centos 6 往后都采用其他五种算法,不再考虑 md5。$1 对应的就是 md5,已经被破解了。
三、密码的复杂性策略
◆使用数字、大写字母、小写字母及特殊字符中至少3种
◆足够长
◆使用随机密码
◆定期更换,不要使用最近曾经使用过的密码
在工作中的 root 口令不会像口令一样简单,要相对复杂一点,不易被破解。使用数字、大小写以及特殊字符三种一般来说是相对安全的。在生产过程中一般都是用比较长的位数,比如十二位的复杂口令。
当然要想实现口令复杂,理论上应该使用没有规则的口令,这就要求口令的随机性。有人为了方便自己的记忆就使用一些规则口令,但方便了自己记忆,也同时方便了别人记忆。
使用 openssl rand –bass64 9 命令就可以随机生产9个字符的口令,没有规律,而且基于安全考虑需要定期修改,不能一直用这个口令,一个用这个口令可能会造成熟人破解。
在企业里破解口令一般就是内部人员,基于安全一定要定期修改。我们可以分层次来设置密码口令,比如一些不常用的不重要的网站就可以使用简单一点的口令,像银行账号等涉及到钱的可以设计一个安全一点的。
一些比如博客什么的密码可以设置简单的,即使弄丢了也可以重新注册。有些人即使设计复杂密码,但是不加密,只要不加密就可以让人轻松破解。当然在生活中为了让软件更加安全,也可以不采用密码设置,可以用指纹、人脸识别、瞳孔等更加安全的加密方式。
关于密码的有效期在上图画得非常清楚,如果听的比较糊涂的话,可以通过上图来辅助理解。
四、group 文件格式
◆群组名称:就是群组名称
◆群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
◆GID : 就是群组的 ID
◆以当前组为附加组的用户列表(分隔符为逗号)
接下来我们来看看和组相关的,比如说现在新建一个账号 mage,是一个空口令,发现在 centos 里不能进行登录,是因为账号被锁定,显示为两个“!”。
如果把两个“!”给删了,就可以登录了。
使用 usermod –U mage 命令就可以给 mage 账号解锁,但一次只能解锁一个“!”,两次之后就可以解锁登录。当然一个叹号就可以进行锁定了,但两个叹号是双保险。加一个叹号被解锁之后就可以随意登录了,但是加两个叹号除非你刻意去解锁他,不然就无法解锁,被解锁的几率就小多了。
在创建账号的时候有一个初始口令,如果后期登录想用新的口令而不用初始口令,可以使用命令 passwd –e wang命令设置立即登录改口令。
看这里的结果提示为口令立即过期,这时再用 wang 账号登录。
就显示立即输入旧口令,输入了旧口令之后就有提示你要输两遍新口令了,这就是让用户口令立即失效。但是要注意设置的口令不能简单,必须要足够的复杂才行。
除了这种方法,还可以用 chage –d 0 wang 命令,也可以让 wang 账号的口令立即失效。Chage 命令还可以更改别的东西,
如图:
hage 口令更改了 wang 账号的一系列设置,再查看时已经变成了更改的样子,更改成功。
关于有效期,一般默认永久,但是我们希望新建的口令默认时间不要这么长,那么怎么更改呢?
我们使用 cat /etc/login.defs去查看 wang 账号的配置文件。
可以看到密码的最长有效期,最短有效期,长度和提前几天通知。使用 nano 就可以直接在上面修改。
现在改成如下有效期:那么在新建一个 useradd ngiux 账号的时候,就会显示上面更改的参数为默认值。
说明新建账号就是按照你所制定的口令策略来创建口令的有效期、时长等属性。
每个账号都有自己的邮件文件,mail 为专属的一个组,在创建用户的时候,系统默认自动创建邮件,而且默认把家目录放进 home 文件里。另外创建用户的时候,还有一个文件很重要就是 default 文件,我们现在来创建一个新的账号,查看这个账号,就可以看见他现在的默认属性。为什么会自动创建邮箱呢,因为 default 文件里显示创建邮箱为 yes。
为什么家目录默认在 home 文件里,而且自动生成配置文件,就是因为复制了上述文件夹的内容,作为家目录的模板文件夹,里面还有一些隐藏文件。再往下看默认为什么用 bash shell,就是因为 shell=/bin/bash,如果把 shell 改成等于 csh,那就是默认为新建账号的 shell 类型就会是 csh。Expire 就是账户的有效时间。
Inactive 就是账户过期以后的宽限期,默认不设置宽限期就是-1,账号过期了不改口令也不影响。如果要把-1改成3,那么过期三天以后仍然不更改账号就不能放在使用了。
Group=100就是组等于100。新创建账号默认创建的组为同名,但在 windows 里面不是,在 windows 里面默认组为 USERS。
在 linux 里面就是账号必须属于一个组,这个组就是主组,不可以不属于认识一个组。但是在 windows 里面属于组与否是不强制的,可以属于某个组也可以不属于认识一个组。
/etc/ passwd、/etc/ shadow、/etc/ login.defs、/etc/ default/useradd、/etc/skel/ 这些都是跟创建组息息相关的一些命令。
Gshadow 用来放组的口令,man group 存放的是组的成员,如果有好几个成员,需要用逗号做分隔符。
Etc 中存放的最后一个字段为附加组,账号属于它同名的主组。
用 id wang 命令可以查看 wang 的账号信息,用 group wang 命令可以查看 wang 属于哪个组。组和最终获取的权限有关,要获取其中的账号信息,如果在添加组时账号已经登录,那么刚加的账号是不生效的,需要退出登录之后再添加才可以生效。
如果一个用户不被使用之后,要一个新用户获得原用户所拥有的权限,可以把用户名更改掉,更换密码,保留原 id,id 不变权限不变,不需要创建新账号,家目录文件夹同样可以修改。Linux 判断身份根据 id,而不是根据用户名。