本篇继续分享Linux中常用命令。主要分享Linux系统的用户管理相关的命令。

useradd命令——创建用户
原理:在使用useradd命令时,若不加任何参数选项,后面直接跟所添加的用户名,那么系统首先会读取/etc/login.defs(用户定义文件)和/etc/default/useradd(用户默认配置文件)文件中所定义的参数和规则,然后根据所设置的规则添加用户,同时还会向/etc/passwd(用户文件)和/etc/group(组文件)文件内添加新用户和新用户组记录,向/etc/shadow(用户密码文件)和/etc/gshadow(组密码文件)文件里添加新用户和组对应的密码信息的相关记录。同时系统还会根据/etc/default/useradd文件所配置的信息建立用户的家目录,并将/etc/skel中的所有文件(包括隐藏的环境配置文件)都复制到新用户的家目录中。
选项:
-r | 创建用户时不创建家目录 |
-d | 指定创建时的家目录位置,默认创建在/home目录,在/etc/default/useradd可修改默认目录。 |
-M | 不建立家目录,虚拟用户一般需要建立家目录。 |
-s | 用户登录使用的shell,默认是/bin/bash,可在/etc/default/useradd修改默认值 |
-g | 指定用户组,这个用户组必须提前存在。 |
-G | 指定多个附属组,可成为不同组的成员,多个使用逗号(,)隔开。 |
-u uid | 指定用户的ID值。 |
常用操作:
// 创建用户的同时还会创建一个与用户名相同的用户组
useradd test
// 创建用户rudy,属于mysql组,uid为1002useradd -g mysql -u 1002 rudy
// 创建禁止登陆的用户 ,/sbin/nologin表示禁止登录useradd -M -s /sbin/nologin rudy
usermod命令——修改用户信息
参数大部分和useradd相同,usermod是修改用户,useradd是增加用户。
选项:
-d 家目录 | 修改用户的家目录 |
-s shell | 修改用户登录的shell |
-G group | 修改此用户为多个不同组的成员 |
-l | 修改用户的账号名称 |
常用操作:
// 修改家目录和uid
usermod -d /dataroot/rudy -u 1002 rudy
// 将rudy用户名称更改为zhangsanusermod -l zhangsan rudy
// 将rudy添加到这些组里面usermod -G public,wangluo rudy
userdel命令——删除用户及该用户相关的文件
选项:
-f | 强制删除用户,即使用户已登录 |
-r | 删除用户的同时,删除与用户相关的所有文件 |
常用操作
// 不加参数删除用户,家目录还存在
userdel rudy
// 加-r参数删除用户,连同家目录一起删除userdel -r rudy
// 强制删除用户userdel -l -r rudy
在实际工作中尽量不要使用userdel删除用户,而是采用在/etc/passwd里注释用户的方法,防止用户误删带来的系统及服务不正常。
groupadd命令——创建新的用户组
groupadd命令的用途一般不大,因为useradd命令在创建用户的同时还会创建与用户同名的用户组。
常用操作:
添加GID为1020的rudy组
groupadd -g 1020 rudy
groupdel命令——删除用户组
groupdel不能删除还有用户归属的主用户组。
常用操作:
groupdel rudy
passwd命令——修改用户密码
说明:
root用户可以修改任何用户的密码,普通用户只能修改自身的密码。
root用户修改密码时,如果不符合系统密码规则,则给出警告信息,但密码设置仍然生效。普通用户修改密码时,如果使用弱密码,则给出告警信息,且修改无效。
选项:
-k | 为密码已经过期的用户更新有效期 |
–stdin | 从标准输入读取密码字符串 |
-l | 锁定用户 |
-d | 删除用户密码,是密码为空 |
常用操作:
1、修改自身密码
[root@localhost ~]# passwd root
更改用户 root 的密码 。
新的 密码:重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
2、一条命令修改密码,但不安全。[root@localhost ~]# echo manager |passwd --stdin root
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新
实战:批量创建10个用户user01-user10,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道来实现。
[root@localhost tmp]# echo user{01..10}| tr " " "\n"|sed -r 's#(.*)#useradd \1; pass=$((RANDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 \t `echo "$pass"`">/tmp/rudyli.txt#g'|bash
su命令——切换用户
将当前用户切换到指定用户或者以指定用户的身份执行命令或程序
选项:
-,-l,–login | 切换用户的同时,将用户的家目录、系统环境等重新按切换后的用户初始化 |
-c | 向Shell传递单个命令 |
操作:
# 只切换用户,不切换家目录
su liyb
# 切换家目录,
su - root
# 让系统每一次开机时能自动以普通用户启动指定的服务脚本
cat /etc/rc.local
su - liyb -c '/bin/sh /data/scripts/install.sh'
注意:
1、普通用户切换到root用户,需要输入密码
2、root切换到普通用户不需要密码
visudo命令——编辑sudoers文件
-c | 手动执行语法检查 |
操作:
visudo # 等价于vi /etc/sudoers编辑
大约100行下面添加需要提升root权限的普通用户名及对应权限
root ALL=(ALL) ALL
liyb ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdel
rudyli ALL=(ALL) NOPASSWD:ALL
检查语法
visudo -c
/etc/sudoers:解析正确
待授权的用户或组 | 机器=(授权角色) | 可以执行的命令 |
user | MACHING= | COMMANDS |
liyb | ALL=(ALL) | /usr/sbin/useradd, /usr/sbin/userdel |
sudo命令——以另一个用户身份执行命令
可以让普通用户在执行指定的命令或程序上,拥有超级用户的权限。普通用户不需要知道root用户密码。这个授权在visudo配置管理。
who命令——显示已登录用户信息
[root@harbor ~]# who -a
系统引导 2023-12-25 09:55
运行级别 3 2023-12-25 09:55
登录 tty1
2023-12-25 10:03 2894 id=tty1root + pts/0 2023-12-29 11:36 . 94994 (172.16.1.203)
last命令——显示用户登录列表
last命令能够从日志文件/var/log/wtmp读取信息并显示用户最近的登录列表
[root@harbor ~]# lastroot
pts/0 172.16.1.203 Fri Dec 29 11:36 still logged inroot
pts/0 172.16.1.203 Thu Dec 28 13:58 - 14:09 (00:11)root
pts/0 172.16.1.203 Thu Dec 28 13:06 - 13:11 (00:05)root
pts/0 172.16.1.203 Thu Dec 28 11:47 - 12:07 (00:19)root
pts/0 172.16.1.203 Thu Dec 28 10:23 - 10:38 (00:14)root
pts/0 172.16.1.203 Thu Dec 28 10:12 - 10:17 (00:05)
lastb命令——显示用户登录失败的记录
lastb命令可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登录异常
[root@harbor ~]# lastbrudyli
pts/0 Fri Dec 29 12:46 - 12:46 (00:00)Administ
ssh:notty 172.16.1.203 Thu Dec 28 13:58 - 13:58 (00:00)Administ
ssh:notty 172.16.1.203 Thu Dec 28 11:47 - 11:47 (00:00)Administ
ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ
ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ
ssh:notty 172.16.1.203 Mon Dec 25 11:19 - 11:19 (00:00)Administ
ssh:notty 172.16.1.203 Mon Dec 25 11:18 - 11:18 (00:00)Administ
ssh:notty 172.16.1.203 Mon Dec 25 11:18 - 11:18 (00:00)(unknown
tty1 Sat May 6 17:12 - 17:12 (00:00)
btmp begins Sat May 6 17:12:19 2023
lastlog命令:显示所有用户的最近登录记录
从日志文件/var/log/lastlog中读取信息,并显示所有用户的最近登录记录,用于查看系统是否有异常登录
[root@harbor ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/0 172.16.1.203 五 12月 29 11:36:08 +0800 2023
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**
shutdown **从未登录过**
halt **从未登录过**