Linux用户管理概述
一、用户分类与相关配置文件
1、用户分类概述
Linux系统是一个多用户多任务的操作系统,每个用户都有一个独立的身份号码,这个就是用户ID(UID)。在Linux中计算机并不会去认识用户的用户名,它认识的其实是用户ID—UID。
Linux下用户分为3类:超级用户(root)、系统用户(虚拟用户、傀儡用户)、普通用户。
超级用户的用户名为root,它具有操纵一切的权力,在计算机文件管理系统中犹如“皇帝”。在Linux操作系统的字符界面,root账户的提示符为#,且默认情况下,root用户的UID为0。
系统用户是Linux系统正常工作所必需的内建用户,一般是用于管理服务所用。系统用户不能用来登陆,如bin、daemon、lp等用户。系统用户的UID一般为1~999(在centos5、6中系统用户默认的UID范围是1-499),它们的命令解释器为/sbin/nologin。诸如QQ、微信等应用程序在运行是都会有相应的系统用户在后台作为支撑。
普通用户是为了让使用者能够使用Linux系统资源而建立的,用户新建的账号一般均为普通账号。在Linux操作系统的字符界面,普通用户的提示符为$,且普通用户的UID默认1000~60000。
2、用户相关配置文件
2.1、个人用户相关
①/etc/passwd(用户账户文件,所有账户都可以访问)
总计7段,格式为如:用户名:密码:UID:GID:账户信息:账户目录:Shell版本
②/etc/shadow(用户密码文件,root才可以访问)
总计9段,格式如:用户名:密码:最后一次修改时间的天数:两次修改密码最小间隔天数:多少天后需要再次修改密码:从发出警告到密码正式失效的天数:禁止登陆前用户名还有效的天数:用户被禁止登陆的时间:标志字段,无意义
注意
shadow中,密码字段为*表示用户被禁止登陆,为"!!“表示用户未设置密码,为”!"表示用户被锁定。passwd的密码为影子密码用X表示,而shadow中为加密后保存的密文。
2.2、与用户组有关的文件
①/etc/group(用户组文件,所有账户都可以访问)
总计4段,格式如:用户组名称:组密码:GID:组成员
②/etc/gshadow(用户组密码文件,root权限才可以访问)
总计4段,格式如:用户组名称:组密码:组管理者:组成员
二、批量创建用户及相关问题解答
1、用户创建
创建用户的命令是useradd [用户名]
,也可指定UID、GID等一系列参数。
参数 | 功能 |
---|---|
-u | 指定用户UID |
-g | 指定用户GID |
-M | 不创建家目录 |
-s | 指定命令解释器 |
-G | 指定附加组 |
默认说明
若不使用参数,则创建用户时一切按照默认的规则进行创建。创建新用户时UID和GID默认按照系统顺延,一般不单独指定UID和GID的情况下默认用户的UID和GID是相同的,新用户的家目录默认是/home/用户名
,命令解释器默认为/bin/bash
。
1 | [root@nanxi ~]# useradd test1 #不指定参数,默认创建用户 |
坑洞警告
当我们的需求是创建指定GID的用户时,一定要先创建用户组,才能指定GID,不存在或被占用的GID是无法指定的。
为新建用户指定用户密码:
1 | [root@nanxi ~]# passwd test1 #以交互的方式指定用户密码 |
批量创建用户:方式有三种输入重定向、sed后向引用、awk批量创建。
在写前面两章,我其实已经略微有提及了,这次我们重点强调awk批量创建用户并在创建时给用户同时设置随机密码。我使用的方法如下(仅供大家参考):
密码是使用mkpasswd命令随机生成的,后面会有讲随机密码的生成,存放密码的文件为8.txt。
①先编辑一个本地用户文件,格式如下:(每一列需严格按照/etc/passwd
密码文件的格式书写)
1 | user001::600:100:user:/home/user001:/bin/bash |
②执行命令[root@nanxi ~]# newusers < user.txt
③执行命令[root@nanxi ~]# pwunconv
(取消 shadow password
功能)
④编辑本地用户密码对照文件,格式如下:
1 | user001:123456 |
⑤执行命令[root@nanxi ~]# chpasswd < passwd.txt
⑥执行命令[root@nanxi ~]# pwconv
(开启 shadow password` 功能)
2、环境变量
在我们用普通方式批量创建用户时,默认新建用户是没有环境变量的,当然偶尔情况下我们可能也会出现环境变量被误删的情况,我们要怎么解决呢?一个命令即可cp -r /etc/skel/. /home/user001
【★★★★★】
那么,skel中究竟有什么东西那么神奇呢?两个文件.bash_profile
和.bashrc
其实我们只需要把这两个环境变量文件(.bash_profile
和.bashrc
),复制到自己用户的家目录下即可~😄
3、删除用户
userdel:删除用户,但不删除家目录(home/{user})和邮件池(/var/spool/mail/{user})
1 | [root@nanxi ~]# userdel test1 |
userdel -r: 删除用户、家目录和邮件池【★★★★★】
1 | [root@nanxi ~]# userdel -r test1 |
若要删除的普通用户正处于登录状态,则无法删除,强制删除可能操作失败!
三、用户密码与MD5校验
1、随机密码生成
首先我们需要安装一个软件包:expect.x86_64 0:5.45-14.el7_1
1 | [root@nanxi ~]# yum -y install expect |
参数及使用说明:使用方法mkpasswd [参数选项]
了解即可
参数 | 功能 |
---|---|
-l | 定义生成密码的长度,默认9 |
-d | 定义密码里面包含数字的最少个数,默认2 |
-c | 定义密码里面包含小写字母的最少个数,默认2 |
-C | 定义密码里面包含大写字母的最少个数,默认2 |
-s | 定义密码密码包含特殊字符的最少个数,默认1 |
2、MD5校验&指纹校验
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。
计算一个文件的校验和:md5sum file > file.md5
当我们在网上下载一个文件(rpm包或者iso文件或者源码包)时,我们要判断它是否被修改时,可以把下载的文件file和该文件的报文摘要文件file.md5(如果是rpm或者源码包是可从官网上下对应的摘要文件)放在同一个目录下:
MD5校验 :md5sum -c file.md5
然后如果验证成功,则会输出:正确(OK)。(注意:-c 是根据已生成的md5值,对现存文件进行校验)
1 | [root@nanxi ~]# echo nanxi > 1.txt |
给多个或全部文件做MD5校验:
1 | [root@nanxi ~]# ll |
应用实例:一般当我们怀疑系统被人动过手脚或者入侵时,都会通过日志来查看一些信息,但高手他们一般会清除他们入侵的日志,那怎么办,其实你想想,他们入侵的必须要做的是什么?肯定会动系统一些关键的文件和程序,然后用这些权利去执行他们的程序,我们就可以通过查看我们的关键的程序及文件是否被修改过来判断有没有被入侵。那我们怎么办呢?有办法,我们可以把系统关键文档和程序的MD5值求出并备份到另外一台安全的计算机上,当我们怀疑被入侵的时候再把这些关键文档和程序的MD5值求一次并保存为另一个文档,再比较这两个文档有没有不同,就可以看出一些蛛丝马迹(可以通过脚本实现)!
四、用户切换与sudo提权
1、用户切换
第二节我们讲述了怎么创建用户以及批量创建用户的方法,这一节我们简单补充一下用户的切换和使用注意事项。切换用户使用的命令是su - [用户名称]
。
1 | [root@nanxi ~]# su - nanxi # 切换至普通用户nanxi(更新变量) |
root用户切换至普通用户不需要密码,普通用户之间的切换以及普通用户向root用户切换时需要密码;但是当我们的密码文件被修改后,例如
root:x:0:0:root:/root:/bin/bash
修改为root::0:0:root:/root:/bin/bash
后,那我们的root用户就不能直接登录了,同时普通用户切换root用户时也不再需要密码!!!
2、sudo提权
普通用户的权限一般在其home目录内不受限制,但仅限于在自己的目录下如: /home/{user},一旦出了home目录,大多数地方普通用户仅有只读和执行权限,无修改权限。我们需要进入root用户,进行sudo提权。
授权单个命令:①查看命令路径which cat
;②使用visudo
命令授权如下,在root命令下写入并保存,大概在100行(快捷键100G)
授权后普通用户使用cat命令加sudo赋权时,就是以root权限查看。
1 | [root@nanxi ~]# su - nanxi |
授权多条命令时,命令路径之间加逗号即可,授权所有命令时用ALL,为了使用方便可以添加NOPASSWD,这样普通用户再使用授权命令时就不用校验用户密码了。
ALL通常授权给运维人员使用,一般情况下给普通用户提权一定要谨慎,因为很多命令进行提权后用户可以绕过管理员直接登录root。不过现在一般很少用到sudo提权了,因为我们有堡垒机~😏。
人所不能者,即是限制,即是残疾。
——史铁生