Linux下的用户管理

用户的概念

  • 用户:安全设定, 想要使用操作系统的某些功能就必须称为操作系统的用户,不同的用户有不同的管理权限
  • 组:同一个组下的用户可以共享权限
  • 初始组:每个用户在创建的时候就具有的组
  • 附加组:额外添加的组,独立于初始组

用户存在的形态:

  • 系统中用户存在形式就是一个表格和表格中调用的配置文件,系统通过表格中的信息来确定用户所具有的权限。

系统中用户的配置文件

用户

/etc/passwd
  • linux中存储用户的信息的文件

这里写图片描述
这个文件中存储的就是用户信息的表格,一共有7列,每列的含义如下:

用户名称 密码 用户id 组id 用户说明信息 用户家目录 用户默认使用的shell
root x 0 0 root /root /bin/bash

密码:

  • 密码列只写个x是因为出于安全性的考虑密码保存在其他文件中,这一列的功能已经弃用,所以密码位全部都是x

linux系统中用户的分类

  • 主要分为3类:
    • 超级用户:就是常说的root,UID为0,超级用户默认拥有系统中所有的权限。
    • 系统用户:UID为1~499。默认无法通过系统用户登陆。
    • 普通用户:UID一般为500~65534,普通用户的权限会受到基本权限的限制,也会受到管理员的限制,普通用户默认情况下是不能访问系统关键文件和目录的。
    • 在普通用户中还有个nobody用户,UID为65534,该用户的权限会受到进一步的限制,一般用于来宾账户。

/etc/group
  • 存储用户组信息
    这里写图片描述
    这个文件中存储的是系统中用户组的信息,每列含义如下:
组名称 组密码 组id 附加组成员
dialout x 20 liu

家目录

/home/username
  • /home下的目录是用户的家目录,家目录的目录名默认是用户的用户名
    这里写图片描述

环境配置

/etc/skel .*
  • 用户的骨信息(用户环境配置模板,在用户建立时会自动被复制到家目录),/etc/skel目录下的配置模板文件默认都是隐藏的。
    这里写图片描述

查看用户

指令 参数 使用对象 作用
whoami 查看当前用户的名称
id username 查看用户的id信息
-u username 查看用户的uid
-g username 查看用户的gid
-G username 查看用户所在的所有组的id
-n username 以名称显示信息

whoami:显示当前用户的名字

这里写图片描述

id :显示用户的id信息包含用户的UID,初始组和附加组
这里写图片描述

也可以通过指令逐条查看:
id -u查看用户UID
这里写图片描述

id -g查看用户的初始组
这里写图片描述

id -G查看用户的所有组
这里写图片描述

id -Gn以名称显示用户的所有组
这里写图片描述

监控命令

指令 参数 使用对象 作用
watch ‘指令’ 每隔2秒执行引号中的指令
-n 1 ‘指令’ 每间隔1秒执行
  • watch执行的指令中有多条指令的情况下使用分隔开。

为了方便查看用户配置文件的变化执行以下指令来实时显示/etc/passwd/etc/group/home/文件和目录的变化

watch -n 1 'tail -n 3 /etc/passwd /etc/group;echo ====;ls -l /home/'

echo指令会输出后面参数中的内容,在这里的作用是打印一个分割线。

显示效果如下:
这里写图片描述


创建用户

/etc/login.defs
  • 此文件中包含创建用户时的默认配置信息
指令 参数 作用
useradd 用默认配置创建用户
-u UID 指定uid创建用户
-g UID 指定初始组id创建用户,这个初始组必须是存在的
-G GID 指定附加组id创建用户,这个附加组必须是存在的,创建的用户同时有附加组和初始组,初始组为默认
-c “Stirng” 指定说明文字创建用户
-d /mnt/username 指定家目录创建用户
-s /bin/tcsh 指定shell创建用户

这里写图片描述
创建后的目录变更效果:
这里写图片描述.

可以看到添加了一个新用户liu,uid为9999,gid为1000,并且有一个附加组72

  • 此时就可以通过su切换到新的用户
    这里写图片描述

  • 创建用户的时候参数都是可选的,如果不指定会用配置文件中默认的配置创建用户
    这里写图片描述
    通过默认配置创建用户:
    这里写图片描述


删除用户

指令 参数 作用
userdel 删除用户身份
userdel -r 删除用户身份及用户涉及的配置文件
  • 一般在删除用户的时候都使用userdel -r的方式删除,只运行userdel不会删除用户的家目录及一些配置文件
  • 如果忘记加-r则需要手动删除用户的家目录

删除上一步创建的hello用户:
这里写图片描述

可以看到hello用户的配置文件以及家目录都被删除了:
这里写图片描述


系统中预装的shell

  • 在指定shell创建用户的时候只能指定系统中已有的shell
  • /etc/shells中包含的就是系统中已有的shell的信息。
    使用以下指令查看系统中已有的shell

cat /etc/shells

这里写图片描述

注意:

/sbin/nologin
/usr/sbin/nologin

这两个shell没有交互界面,用这两个shell创建的用户不能对系统进行操作,使用这两个shell的用户为系统用户


创建组

指令 参数 作用
groupadd 建立组
-g GID 使用指定id创建组
groupdel 删除组

直接使用groupadd创建一个组
这里写图片描述

可以看到组id是从1000开始累加的

这里写图片描述

指定id创建组groupadd -g 1009
这里写图片描述
这里写图片描述

删除组groupdel
这里写图片描述
这里写图片描述
注意:

创建组的时候可以指定gid创建组,删除时候需要通过名字删除


用户的修改

指令 参数 作用
usermod -l newname 修改用户的名字
-u UID 修改uid
-g GID 修改用户的初始组id,初始组必须为已存在的
-G GID 修改附加组,会清空原来所有的附加组,附加组也必须是已存在的。
-aG GID 追加附加组
-G “” gid为空会清空附加组
-c “String” 修改说明文字,为空可以清除说明文字
-d /home/lee 修改家目录指向,这个修改只是修改了配置文件里面的目录地址,并没有修改目录本身
-md /home/lee 修改家目录指向并修改目录本身的名字
-s /bin/tcsh 修改shell

修改上文中创建的linux用户
这里写图片描述
更改用户名为test,uid为2222,gid为72,清空附加组:
这里写图片描述
修改家目录的指向并修改家目录本身的名字为test:
这里写图片描述
可以看到家目录名称和路径配置都更改了:
这里写图片描述


用户的切换

su - username   
  • 切换到指定用户
  • 高级用户切换到低级用户不用密码
  • 低级用户切换到高级用户,或者切换到平级用户,需要密码

注意:
1. 用户切换后需要退出(exit)再切换到下一个用户,来回切换shell会出错
2. su -,表示切换用户身份及用户环境,不加-只是切换用户并没有切换目录
这里写图片描述


用户的认证信息

/etc/shadow     
  • 该文件中存放的是用户的认证信息一共有9列。
    这里写图片描述

如:daemon:*:17661:0:99999:7:::

每列的参数:

举例 参数名 注意点
daemon 用户名
* 密码 md5对称加密
17661 密码最后被修改的时间 单位为天,是距离1970年1月1日至今的天数
0 密码最短有效期 单位是天
99999 密码最长有效期 有效期结束前必须改密码否则帐号就会被冻结
7 密码过期警告 还剩多少天过期的时候警告
密码非活跃期 有效期到期后的缓冲时间,缓冲期内不会冻结账号
帐号到期时间 是一个时间点,如果指定,到达这个时间点就会被冻结
未设定用户自定义

对于有密码的账户密码部分为MD5对称加密如:
liu:$6$KdTQMNRu$V52ST1Kbkdc7uZO0PztBrp354QO60gkHtKev2X8sK2yiVxWTtZb8jaLR7zuQS6VPnPdDGcbzQFDbET8WbT2eY1:17747:0:99999:7:::

  • 对称加密:加密和解密使用同一个东西,就像指纹识别,MD5
  • 非对成加密:加密和解密用不同的东西,就像锁和钥匙

注意:
密码最后被修改的时间:如果设置为0,则用户登陆时会被强制要求修改密码

修改密码最后被修改的时间为0:

  • 需要使用超级用户才能更改
  • chage -d 0 username
  • passwd -e username

修改hello11用户的最后修改时间为0:
这里写图片描述
执行chage -d 0 hello11:
这里写图片描述

修改配置文件中的参数

修改密码:

指令 参数 解释
passwd username 超级用户才能执行,可以设置任意密码
passwd 普通用户修改自己,普通用户修改密码会要求密码有一定强度
passwd -d username 清空密码
passwd -l username 冻结账户,强度更高
passwd -u username 解锁
usermod -L username 冻结
usermod -U username 解锁,对于passwd执行的冻结需要解2次

现在有一个用户名为test的用户:
这里写图片描述


使用passwd test修改test的密码:
这里写图片描述

  • 修改密码的时候密码是隐藏的。

修改后test的认证信息中就能看到加密的密码:
这里写图片描述


使用passwd -l test冻结test

这里写图片描述
此时在test的认证信息中密码前面多了个!表示账户被冻结:
这里写图片描述


使用passwd -u test解除冻结:
这里写图片描述
这里写图片描述

修改最短有效期

指令 参数 作用
chage -m 1 username 修改最短有效期为1天
passwd -n 1 username 修改最短有效期为1天

修改最长有效期

指令 参数 作用
chage -M 30 username 修改最长有效期为30天
passwd -x 40 username 修改最长有效期40天

这里写图片描述
这里写图片描述

修改非活跃天数

指令 参数 作用
chage -I 2 username 修改账户过期后的缓冲天数为2天
passwd -i 0 username 修改非活跃天数为0

这里写图片描述
这里写图片描述

修改过期警告

指令 参数 作用
chage -W 2 username 距离账户过期还有2天的时候提醒
passwd -w 3 username 距离账户过期还有3天的时候提醒

修改帐号到期时间

指令 参数 作用
chage -E 2018-11-11 username 修改账号到期时间为2018-11-11

这里写图片描述
这里写图片描述

用户权力下放

  1. 配置文件 /etc/sudoers
  2. 配置命令
    • 使用visudo 命令编辑,该命令提供代码检查
    • 在100行处添加配置信息
      这里写图片描述
  3. 使用hostname指令查看当前主机名
    这里写图片描述
  4. 为普通用户添加命令权限:格式为用户名称 主机名称=(执行程序身份)命令
    • 命令需要为绝对路径
    • 当执行命令的时候需要用户验证
    • 给test普通用户添加useradd命令权限:test localhost=(root) /usr/sbin/useradd
      这里写图片描述
    • 以这种方式添加,执行命令的时和会要求进行用户身份验证.
  5. 取消用户验证的方式:用户名称 主机名称=(执行者身份) NOPASSWD:命令1, 命令2
    • 当执行命令时不要用户验证
    • 同时添加userdel命令
    • test localhost=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/userdel
      这里写图片描述
  6. 配置之后命令执行的时候需要加sudo
    • sudo作用就是执行命令的时候检查配置文件
      这里写图片描述

猜你喜欢

转载自blog.csdn.net/liuchonghua/article/details/81560960
今日推荐