用户的概念
- 用户:安全设定, 想要使用操作系统的某些功能就必须称为操作系统的用户,不同的用户有不同的管理权限
- 组:同一个组下的用户可以共享权限
- 初始组:每个用户在创建的时候就具有的组
- 附加组:额外添加的组,独立于初始组
用户存在的形态:
- 系统中用户存在形式就是一个表格和表格中调用的配置文件,系统通过表格中的信息来确定用户所具有的权限。
系统中用户的配置文件
用户
/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 |
用户权力下放
- 配置文件
/etc/sudoers
- 配置命令
- 使用
visudo
命令编辑,该命令提供代码检查 - 在100行处添加配置信息
- 使用
- 使用
hostname
指令查看当前主机名
- 为普通用户添加命令权限:格式为
用户名称 主机名称=(执行程序身份)命令
- 命令需要为绝对路径
- 当执行命令的时候需要用户验证
- 给test普通用户添加useradd命令权限:
test localhost=(root) /usr/sbin/useradd
- 以这种方式添加,执行命令的时和会要求进行用户身份验证.
- 取消用户验证的方式:
用户名称 主机名称=(执行者身份) NOPASSWD:命令1, 命令2
- 当执行命令时不要用户验证
- 同时添加
userdel
命令 test localhost=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/userdel
- 配置之后命令执行的时候需要加sudo
- sudo作用就是执行命令的时候检查配置文件
- sudo作用就是执行命令的时候检查配置文件