· 用户管理
· 组账号管理
· 计划任务
用户简介
· 用户账户 : 1 . 可以登陆操作系统 2 . 资源访问控制(不同的人,不同的权限)
· 组账户 : 方便管理众多的用户
唯一标识 :
-
UID(0,1,2,3…来标识用户,并不是用户名),
vim /etc/login.defs
查看UID范围,默认最大为60000 -
GID(0,1,2,3…来标识组)
管理员root的UID永远为0,普通用户的UID从1000开始
Linux一个用户必须至少属于一个组,可以多个组
· 组账户分类 : 基本组、附加组(从属组)
- 基本组 : 由系统创建,与用户同名
- 附加组(从属组) : 由管理员创建,由管理员管理组成员
useradd tom 创建用户tom
基本组 : tom # 一般和用户名一样
附加组 : sg nb
本地账户的数据文件
/etc/passwd /etc/shadow
/etc/group /etc/gshadow
/etc/passwd 保存用户基本信息的配置
每个用户记录一行,以:分隔为7个字段
head -1 /etc/passwd
# root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组的GID:用户描述信息:家目录:解释器
用户账号创建
useradd 添加用户
useradd [选项]... 用户名
常用的命令选项
- -u:指定UID标记号(不指定默认从1000开始)
- -d:指定宿主目录(家目录),不指定默认为/home/用户
- -G:指定所属的附加组
- -s:指定用户的登陆解释器,不指定默认为/bin/bash
useradd nsd01 创建用户nsd01
grep nsd01 /etc/passwd 过滤精确查找nsd01是否存在
# nsd01:x:1000:1000::/home/nsd01:/bin/bash
-u: 指定UID标记号
useradd -u 1400 nsd02 创建用户nsd02,指定用户UID为1400
grep nsd02 /etc/passwd
# nsd02:x:1400:1400::/home/nsd02:/bin/bash
id nsd01 查看用户是否存在
存在则显示用户基本信息
不存在则显示no such user
-d: 指定家目录
useradd -d /opt/abc nsd03 创建用户nsd03,指定用户家目录为/opt/adc
grep nsd03 /etc/passwd
# nsd03:x:1401:1401::/opt/abc:/bin/bash
我们在指定家目录的时候父目录必须是存在的,否则会报错,如下:
useradd -d /opt/aa/bb/cc nsd04 父目录不存在,报错
-G: 指定所属的附加组
groupadd tarena 创建一个组名字为tarena
useradd -G tarena nsd05 在组tarena组中创建一个用户nsd05
grep nsd05 /etc/passwd
# nsd05:x:1404:1405::/home/nsd05:/bin/bash
id nsd05 查看nsd05的基本信息,groups会显示两个组
-s: 指定用户的登陆解释器
/sbin/nologin 禁止用户登陆系统
useradd -s /sbin/nologin nsd06 创建一个禁止用户登陆的用户
grep nsd06 /etc/passwd
# nsd06:x:1403:1403::/home/nsd06:/sbin/nologin
用户账户的属性修改
usermod修改用户
usermod [选项]... 用户名
常用命令选项
- -l:更改用户账户的登陆名
- -u:更改用户id
- -s:更改用户的登陆解释器
- -d:家目录路径
- -G:附加组 //重置附加组
-l: 修改用户的名字
usermod -l abc01 nsd01 将用户nsd01的用户名修改成abc01
id abc01
-u -s:修改用户的的id和用户的登陆解释器
grep abc01 /etc/passwd
usermod -u 1500 -s /sbin/nologin abc01 将用户abc01的UID改成1500,登陆解释器修改成/sbin/nologin
grep abc01 /etc/passwd
-d: 修改用户的家目录路径
useradd abc02
grep abc02 /etc/passwd
usermod -d /opt/haha abc02 -d只修改etc/passwd的信息,并没有在opt的目录下创建haha目录
grep abc02 /etc/passwd
ls /opt /opt目录下并没有创建haha目录
-G 修改用户,重置附加组
useradd abc03 创建用户abc03
groupadd A 创建组A
usermod -G tarena abc03 abc03没有附加组,添加附加组tarena
id abc03 查看用户abc03的基本信息
usermod -G A abc03 将abc03的附加组修改成A
id abc03 查看用户abc03的基本信息
设置用户密码
方式一:交互式方式设置
passwd 用户名 # 只有管理员用户才可以用这个格式
重复输入密码两次即可
注意:root账户是可以直接重置密码的,无需知道普通用户的登陆密码
su - abc01 切换普通用户abc01(注意su后面要加上"-",把环境切换过去,否则是以管理员身份登陆abc01)
passwd
先输入以前的密码
重复输入密码两次即可
exit从普通用户切换到管理员用户
root身份更改普通用户密码
普通用户身份更改密码
方式二:非交互式方式设置 (只有管理员可以用这种方式设置密码)
echo 密码 | passwd --stdin 用户名
echo abc | passwd --stdin abc01 将用户abc01的密码设置成abc
echo 123456 | passwd --stdin abc02 将用户abc02的密码设置成123456
/etc/shadow 保存密码字串/有效期等信息
只有管理员账户才有权限可以查看/etc/shadow,普通用户是没有权限查看该目录的
每产生一个用户,就会有一个用户记录行,以:分隔为9个字段
用户名:密码加密字符串:18694(上一次密码修改的时间):0:99999:7:::
18694:从1970-1-1到达上一次修改密码时间经历的天数
0:下一次可以修改密码时间限制,0代表随时可以修改
99999:表示修改的密码可以用99999天
7:密码到期之前提前7天提醒
:::用户账户永远不过期,可以永久使用
如下图所示:
用户家目录
touch /etc/skel/haha.txt
mkdir /etc/skel/xixi
ls -A /etc/skel /etc/skel里面新增了haha.txt,xixi
useradd nsd15 创建用户nsd15
ls -A /home/nsd15 /home/nsd15目录里面也新增了haha.txt,xixi
由此可见:新建用户时,根据/etc/skel模板目录复制
· 用户家目录下的配置文件来源
- 新建用户时,根据
/etc/skel
模板目录复制
主要的初始配置文件
~/.bash_profile
: 每次登陆时执行,定义初始化变量~/.bashrc
: 每次进入新的终端执行,定义永久的别名
给普通用户 定义永久别名
useradd nsd01 创建一个新用户nsd01
vim /home/nsd01/.bashrc 打开家目录下的nsd01用户的初始配置文件,定义永久别名hn="hostname"
su - nsd01 切换到nsd01用户下
给root用户 定义永久别名
vim /root/.bashrc 打开管理员身份的起始文件,定义别名nana="echo biubiubiu"
bash 重启终端
所有用户都生效 定义永久别名
全局配置文件 : /ect/bashrc /etc/profile
vim /ect/bashrc 只允许管理员修改,所有用户都生效
打开管理员身份的起始文件,定义别名lala="520"
用户家目录的删与查
userdel命令
- 格式: userdel [-r] 用户名
- 添加-r选项,宿主目录(家目录)/用户邮件也一并删除
普通用户的权限,对数据的增删改查只能在自己的家目录下进行操作,所以普通用户的家目录存放了普通用户的所有数据
userdel nsd01
id nsd01 没有nsd01的信息
ls /home/ 家目录下依然存在nsd01的信息
useradd nsd02
userdel -r nsd02 # 一般情况下我们工作中是不会连普通用户的家目录一起删除
ls /home/ 家目录下不存在nsd02的信息
查询账号id
- 格式:id [选项]... 用户名
id nsd01 查看用户是否存在
存在则显示用户基本信息
不存在则显示no such user
案例
useradd nsd03
usermod -d /opt/xixi nsd03
grep nsd03 /etc/passwd
ls /opt/xixi 找不到/opt/xixi的目录
userdel -r nsd03 操作系统找不到nsd03的家目录,会有找不到家目录的报错信息,但是还是会把nsd03所有的数据全部删除
# userdel : nsd03 home directory (opt/xixi) not found
组账号的管理
/etc/group 保存组账号的基本信息
/etc/group 保存组账号的基本信息
- 每个组记录一行,以:分割为4个字段
groupadd stugrp
grep stugrp /etc/group 查看组账号基本信息
stugrp:x:1000:
组名:组的密码占位符:组的GID:本组的成员列表
gpasswd 命令管理组成员
- 格式 : gpasswd [选项]... 组名
· 常用命令选项
- -a:添加组成员,每次只能加一个
- -d:删除组成员,每次只能删一个
- -M:重新定义组成员用户列表,可设置多个
- -A:定义组管理员列表
useradd nana
useradd dada
useradd lili
useradd dudu
groupadd stugrp 创建stugrp分组
gpasswd -a nana stugrp 创建组成员nana至stugrp分组
grep stugrp /etc/group 查看组账号基本信息
# stugrp:X:1000:nana
gpasswd -d nana stugrp 删除stugrp分组中的组成员nana
grep stugrp /etc/group
# stugrp:X:1000:
gpasswd -M dudu,lili stugrp 清空原组成员,重新添加组成员dudu,lili
grep stugrp /etc/group
# stugrp:X:1000:dudu,lili
gpasswd -M "" stugrp 清空组成员列表
grep stugrp /etc/group
# stugrp:X:1000:
gpasswd -A lili stugrp 添加组管理员lili(只有root权限才可以添加管理员)
grep stugrp /etc/gshadow 查看组账号的管理员信息
# stugrp:!:lili: 添加了组管理员后普通用户lili对stugrp分组只能行使-a和-d的功能,不能行使其他的功能
/etc/gshadow 保存组账号的管理信息
- 每个组记录一行,以:分隔为4个字段
grep stugrp /etc/gshadow 查看组账号的管理信息
stugrp:!::
组名:组的密码加密字符串:组的管理员列表:组的成员列表
添加组账号stugrp的管理员,组管理员可以在stugrp组中,也可以不在stugrp的组中。
gpasswd -A nana stugrp root权限 添加管理员nana
grep stugrp /etc/gshadow 查看stugrp组的管理信息
su - nana 切换至普通用户nana
gpasswd -a dada stugrp 普通用户添加用户dada
grep stugrp /etc/group 查看stugrp组账号的基本信息
gpasswd -d dada stugrp 删除用户dada
exit 切换至管理员用户
gpasswd -A "" stugrp root权限 清空stugrp组管理员
grep stugrp /etc/gshadow 查看stugrp组的管理信息
gpasswd -A nana,dada stugrp 定义stugrp组管理员
grep stugrp /etc/gshadow
groupdel删除组
- 格式:groupdel 组名
- 删除的目标组不能是用户的基本组
groupdel stugrp 删除附加组stugrp
grep stugrp /etc/group
groupdel dada 不能删除用户的基本组
# groupdel:cannot remove the primary group of user "dada"
计划任务crontab
· 周期性任务
- 用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务
- 软件包 :
cronie
crontabs
(Linux系统默认自带的) - 系统程序 :
crond
(系统默认开机自启动) - 日志文件 :
/var/log/cron
· 使用crontab命令
- 编辑计划任务:crontab -e [-u 用户名]
- 查看计划任务:crontab -l [-u 用户名]
- 清除计划任务:crontab -r [-u 用户名]
· 周期性计划任务书写格式
- 分 时 日 月 周 任务命令行(绝对路径)
* * * * * *代表任意时间都匹配,写五个*表示每分钟执行一次(第一个*号必须为顶格)
30 23 * * * 每天晚上11.23分执行一次
30 23 * * 5 每周的周五晚上11.23分执行一次
30 23 * * 1-5 周一至周五晚上11.23分执行一次
30 23 * * 1,2,5 周一,周二,周五晚上11.23分执行一次
30 23 1 * 1 每月的1号或者每周的周一,晚上11.23分执行一次
*/5 * * * * 每隔5分钟执行一次
1 */2 * * * 每隔2个小时执行一次(每两个小时的第一分钟执行)
案例
配置一个cron任务
每分钟记录当前系统的时间,写入/opt/time.txt
date 查看系统当前时间
crontab -e -u root 以root身份进入周期性计划任务书(vim编辑器)# -u root可以省略不写
* * * * * date >> /opt/time.txt
# 保存退出后
cat /opt/time.txt 查看记录的情况
crontab每分钟定时执行:
*/1 * * * * systemctl restart nginx //每隔1分钟执行一次
*/10 * * * * systemctl restart nginx //每隔10分钟执行一次
crontab每小时定时执行:
0 */1 * * * systemctl restart nginx //每1小时执行一次
0 */2 * * * systemctl restart nginx //每2小时执行一次
crontab每天定时执行:
0 10 * * * systemctl restart nginx //每天10点执行
30 19 * * * systemctl restart nginx //每天19点30分执行
crontab每周定时执行:
0 10 * * 1 systemctl restart nginx //每周一10点执行
30 17 * * 5 systemctl restart nginx //每周五17点30分执行
crontab每年定时执行:
0 10 1 10 * systemctl restart nginx //每年的10月1日10点执行
0 20 8 8 * systemctl restart nginx //每年的8月8日20点执行