用户概念以及基本作用
**用户:**指的是Linux操作系统中用于管理系统或者服务的人
一问:管理系统到底在管理什么?
答:Linux下一切皆文件,所以用户管理的是相应的文件
二问:如何管理文件呢?
答:
- 文件基本管理,比如文件的创建、删除、复制、查找、打包压缩等;文件的权限增加、减少等;
- 文件高级管理,比如程序文件的安装、卸载、配置等。终极目的是对外提供稳定的服务。
用户的类别
① root超级管理员,在Linux系统中拥有至高无上的权力。
② 系统用户,CentOS6=> 1 ~ 499,CentOS7=> 1 ~ 999,系统账号默认不允许登录
# useradd -s /sbin/nologin 系统用户
③ 普通用户,大部分是由root管理员创建的,UID的取值范围:CentOS6=> 500 ~ 60000,CentOS7=> 1000 ~ 60000,对系统进行有限的管理维护操作
总结
① 用户指的是操作系统上管理系统或服务的人,是人,就有相关的属性信息
② 用户的属性信息包括但不限于,如:==家目录、唯一身份标识(UID)、所属组(GID)==等
③ 今天我们讨论的用户指的是普通用户,即由管理员创建的用户
用户管理
与用户管理相关的几个单词 => user(用户)、add(添加)、mod(修改)、del(删除)
① 用户添加 useradd
② 用户修改 usermod
③ 用户删除 userdel
useradd用户添加
基本语法:
useradd [选项 选项的值] 新用户名称
选项值 | 作用 |
---|---|
-u | 指定用户uid,唯一标识,必须唯一 |
-g | 指定用户的默认组(主组) |
-G | 指定用户附加组(一个用户可以加入多个组,但是默认组只有一个) |
-d | 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx) |
-s | 指定用户默认shell,常见/bin/bash或/sbin/nologin |
-r | 指定用户为系统用户,如创建一个系统账号mysql |
案例:在Linux系统中创建一个账号zhangsan
useradd zhangsan
那一个用户创建成功后,如何判断是否添加到系统?
第一种方案我们可以通过tail命令查看/etc/passwd文件
tail -n 3 /etc/passwd
第二种方案我们可以使用id命令查看zhangsan信息
案例:在Linux系统中创建一个账号wangwu,指定用户的家目录为/rhome/wangwu
mkdir /rhome
useradd -d /rhome/wangwu wangwu
当我们为用户自定义家目录时,其上级目录必须是真实存在的,如/rhome
案例:在Linux系统中创建一个mysql账号,要求真实存在的,但是其不允许登录操作系统
useradd -s /sbin/nologin mysql
usermod用户修改
usermod [选项 选项的值] 用户名称
选项 | 选项作用 |
---|---|
-u | 指定用户uid,唯一标识,必须唯一 |
-g | 指定用户的默认组(主组) |
-G | 指定用户附加组(一个用户可以加入多个组,但是默认组只有一个) |
-d | 指定用户家目录(每个用户都有一个自己的家,并且默认在/home/xxx) |
-s | 指定用户默认shell |
案例:修改zhangsan账号的主组为wangwu组(只能指定一个)
① 可以获取wangwu组的编号信息GID
② 使用usermod -g GID编号修改某个用户的主组信息
其实在usermod修改用户的主组中,usermod -g 可以使用GID编号也可以使用组名称
usermod -g 1003 zhangsan
或
usermod -g wangwu zhangshan
案例:修改zhangsan账号的附加组,将其添加到wangwu中
usermod -G 1000 zhangsan
或
usermod -G itheima zhangsan
案例:修改用户zhangsan的家目录为/rhome/zhangsan(默认/home/zhangsan)
mkdir /rhome/zhangsan
usermod -d /rhome/zhangsan zhangsan
家目录改完了,但是当我们切换到张三
su - zhangsan
如图,切换到zhangsan后,并不能正常切换
出现以上问题的主要原因在于:我们迁移用户的家目录时,没有迁移家目录中的配置文件
解决方案:
① 家目录已经迁移,我们把/etc/skel中的文件,copy到新家中
cp -a /etc/skel/. /rhome/zhangsan/
② 家目录还没有迁移,准备迁移时,使用usermod -md /rhome/zhangsan 用户名
-m :move,迁移家目录时,把配置文件一起迁移到新的家目录
usermod -md /rhome/zhangsan zhangsan
userdel用户的删除
# userdel [选项] 用户名称
选项说明:
-r :删除用户的同时,删除用户的家目录
-f :强制删除用户(即使用户处于登录状态)
案例:删除zhangsan这个账号
userdel zhangsan
案例:删除zhangsan这个账号,同时删除这个账号的家
# userdel -r zhangsan
案例:删除某个正在使用的账号(强制删除)
userdel -f zhangsan
与用户相关的文件
Linux中一切皆文件,所以保存用户的信息的也是一个文件 => /etc/passwd
vim /etc/passwd
- 第1列:用户名称
- 第2列:用户密码,使用一个x占位符,真实密码存储在/etc/shadow文件中
- 第3列:用户的编号UID,0,1-999,1000 ~ 60000
- 第4列:用户的主组编号GID
- 第5列:用户的备注信息(扩展,可以使用-c进行指定) useradd -c “mysql” mysql
- 第6列:用户的家目录,/root,超级管理员的家/home,普通账号的家
- 第7列:用户的Shell文件,常见/bin/bash或/sbin/nologin=>/bin/false
用户密码
passwd修改用户密码
passwd [用户名称]
说明:
1.管理员root可以给任何用户修改密码
2.普通用户可以自己给自己修改密码,但是密码复杂度要符合规范(大小写、特殊字符、长度)
案例:使用root账号给wangwu用户修改密码,新密码为123456
su - root
passwd wangwu
案例:切换到wangwu这个账号,自己给自己修改密码(密码规范)
su - itheima
passwd
–stdin修改用户密码
–stdin :标准输入
echo 123 |passwd --stdin wangwu
history -c
注意:以上方式操作非常简单,但是以上命令会留在history历史命令中!可以使用history -c 清除历史
chage更改用户的账号信息
背景:很多公司运维工程师刚入职,都会默认得到一个服务器的管理账号,密码默认,如123456,我们有没有办法让运维工程师在第一次登陆操作系统后,强制要求其更新密码。
chage --help
选项 | 作用 |
---|---|
-l | 列出用户的详细密码状态; |
-d 日期 | 修改 /etc/shadow 文件中指定用户密码信息的第3个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD; |
-m 天数 | 修改密码最短保留的天数,也就是 /etc/shadow 文件中的第4个字段; 注:几天后才能修改一次密码 |
-M 天数 | 修改密码的有效期,也就是 /etc/shadow 文件中的第5个字段; 注:每隔多少天更新一次密码 |
-W 天数 | 修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第6个字段; |
-i 天数 | 修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第7个字段; 注:过期后还可以使用的天数,达到这个天数后,账号失效 |
-E 日期 | 修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第8个字段; |
案例:新创建一个账号lamp,设置初始化密码为123456。要求用户第一次登陆后必须强制修改用户的密码。
解决思路:把密码的最后修改时间重置为0(回到1970年1月1日)
useradd lamp
echo 123456 |passwd --stdin lamp
chage -d 0 lamp
运行效果:
案例:设置lamp账号的过期时间为2010-04-10
chage -E "2020-04-10" lamp
案例:设置lamp账号的10天后过期(延伸)
chage -E $(date +%F -d '+10 days') lamp
%F:YYYY-mm-dd,格式2020-04-01
-d:多少天以后的日期
案例:设置mysql用户60天后密码过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息
useradd mysql
echo 123456 |passwd --stdin mysql
chage -M 60 -m 7 -W 7 mysql