用户和组高级操作

简介: 本文介绍了Linux系统中用户和组管理的基本操作,包括使用`usermod`命令修改用户属性、使用`passwd`和`usermod`命令禁用和恢复用户账户、使用`userdel`命令删除用户账户、使用`groupadd`、`groupdel`和`groupmod`命令管理组群,以及使用`gpasswd`命令为组群添加用户。此外,还介绍了`su`和`sudo`命令的使用方法,帮助用户在不同身份之间切换。

 1 维护用户账户

1.1 修改用户账户

usermod命令用于修改用户的属性,格式为

usermod [选项] 用户名

Linux系统中的一切都是文件,因此在系统中创建用户也就是修改配置文件的过程。用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息,诸如用户的UID、基本/扩展用户组、默认终端等。usermod命令的参数以及作用如下表所示。

参 数 作 用
-c 填写用户账户的备注信息
-d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e 账户的到期时间,格式为YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的UID

例子:

创建用户user1,查看用户及其组信息。

[root@rhel7-lzq-01 ~]# useradd user1
[root@rhel7-lzq-01 ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1)

image.gif

也可以直接通过tail 查看是否添加用户成功。

image.gif 编辑

将用户user1加入root用户组中,这样扩展组列表中会出现root用户组的字样,而基本组不会受到影响:

[root@rhel7-lzq-01 ~]# usermod -G root user1
[root@rhel7-lzq-01 ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1),0(root)

image.gif

用-g参数修改用户的基本组ID,用-G参数修改用户扩展组ID

[root@rhel7-lzq-01 ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1),0(root)
[root@rhel7-lzq-01 ~]# usermod -u 8888 user1
[root@rhel7-lzq-01 ~]# id user1
uid=8888(user1) gid=1001(user1) 组=1001(user1),0(root)

image.gif

修改用户user1的主目录为/var/user1,把启动shell修改为/bin/tcsh,完成后恢复到初始状态,操作如下:

#### 默认目录和shell编辑器 ########
[root@rhel7-lzq-01 ~]# tail -n 5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lu:x:1000:1000:lu:/home/lu:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash

image.gif

#### 修改目录:########
[root@rhel7-lzq-01 ~]# usermod -d /var/user1 -s /bin/tcsh user1
[root@rhel7-lzq-01 ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
lu:x:1000:1000:lu:/home/lu:/bin/bash
user1:x:8888:1001::/var/user1:/bin/tcsh
[root@rhel7-lzq-01 ~]#

image.gif

#### 恢复原状 ########
[root@rhel7-lzq-01 ~]# usermod -d /home/user1 -s /bin/bash user1
[root@rhel7-lzq-01 ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
lu:x:1000:1000:lu:/home/lu:/bin/bash
user1:x:8888:1001::/home/user1:/bin/bash

image.gif

1.2 禁用和恢复用户账户

有时需要临时禁用一个账户而不删除它。禁用用户账户可以用passwd或usermod命令实现,也可以直接修改/etc/passwd或/etc/shadow文件。

例如,暂时禁用和恢复user1账户,可以使用以下3种方法实现。

(1)使用passwd命令

修改用户口令(密码)信息

[root@rhel7-lzq-01 ~]# passwd user1
更改用户 user1 的密码 
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

image.gif

锁定用户:

[root@rhel7-lzq-01 ~]# passwd -l  user1
锁定用户 user1 的密码 
passwd: 操作成功

image.gif

查看锁定情况:

使用passwd命令禁用user1账户,利用tail命令可以看到被锁定的账户密码栏前面会加上“!”

[root@rhel7-lzq-01 ~]# tail -1 /etc/shadow
user1:!!$6$CM5uCdgm$bwxneTRd62xKfVzheARIlBfpA3XYADrK8JeRE7SZXU5KvhY35MJXN1FTgvMLBEAKk/5ds7aqWzIcRb7do3EZz.:20017:0:99999:7:::

image.gif

解除锁定并查看结果:

利用passwd命令的-u选项解除账户锁定,重新启用user1账户

[root@rhel7-lzq-01 ~]# passwd -u user1
解锁用户 user1 的密码。
passwd: 操作成功
[root@rhel7-lzq-01 ~]# tail -1 /etc/shadow
user1:$6$CM5uCdgm$bwxneTRd62xKfVzheARIlBfpA3XYADrK8JeRE7SZXU5KvhY35MJXN1FTgvMLBEAKk/5ds7aqWzIcRb7do3EZz.:20017:0:99999:7:::

image.gif

(2)使用usermod命令

[root@rhel7-lzq-01 ~]# usermod -L user1
[root@rhel7-lzq-01 ~]# tail -1 /etc/shadow
user1:!$6$CM5uCdgm$bwxneTRd62xKfVzheARIlBfpA3XYADrK8JeRE7SZXU5KvhY35MJXN1FTgvMLBEAKk/5ds7aqWzIcRb7do3EZz.:20017:0:99999:7:::
[root@rhel7-lzq-01 ~]# usermod -U user1
[root@rhel7-lzq-01 ~]# tail -1 /etc/shadow
user1:$6$CM5uCdgm$bwxneTRd62xKfVzheARIlBfpA3XYADrK8JeRE7SZXU5KvhY35MJXN1FTgvMLBEAKk/5ds7aqWzIcRb7do3EZz.:20017:0:99999:7:::

image.gif

(3)直接修改用户账户配置文件

可将/etc/shadow文件中关于user1账户的passwd域的第一个字符前面加上一个“!”,达到禁用账户的目的,在需要恢复的时候只要删除字符“!”即可。

1.3 删除用户账户

要删除一个账户,可以直接删除/etc/passwd和/etc/shadow文件中要删除的用户所对应的行,或者用userdel命令删除。userdel命令的格式为

userdel [-r] 用户名

如果不加-r选项,userdel命令会在系统中所有与账户有关的文件中(例如/etc/passwd,/etc/shadow,/etc/group)将用户的信息全部删除。

如果加-r选项,则在删除用户账户的同时,还将用户主目录以及其下的所有文件和目录全部删除掉。另外,如果用户使用E-mail的话,同时也将/var/spool/mail目录下的用户文件删掉。

[root@rhel7-lzq-01 ~]# userdel -r user1
[root@rhel7-lzq-01 ~]# tail -5 /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lu:x:1000:1000:lu:/home/lu:/bin/bash
# user1 已经被删除了

image.gif

2 维护组群

2.1 添加组

[root@rhel7-lzq-01 ~]# groupadd testgroup
[root@rhel7-lzq-01 ~]# cat /etc/group
...
ntp:x:38:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
lu:x:1000:
testgroup:x:1001:

image.gif

2.2 删除组

要删除一个组可以用groupdel命令,例如删除刚创建的testgroup组时可用以下命令:

[root@rhel7-lzq-01 ~]# groupdel testgroup
[root@rhel7-lzq-01 ~]# tail -5 /etc/group
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
lu:x:1000:

image.gif

2.3 修改组群

修改组群的命令是groupmod,其命令格式为

groupmod [选项] 组名

常见的命令选项如下表所示。

选 项 说 明
-g gid 把组群的GID改成gid
-n group-name 把组群的名称改为group-name
-o 强制接受更改的组的GID为重复的号码

修改组名

[root@rhel7-lzq-01 ~]# groupmod -n lzq lu
[root@rhel7-lzq-01 ~]# tail -5 /etc/group
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
lzq:x:1000:

image.gif

3 为组群添加用户

在Red Hat Linux中使用不带任何参数的useradd命令创建用户时,会同时创建一个和用户账户同名的组群,称为主组群。当一个组群中必须包含多个用户时,则需要使用附属组群。在附属组中增加、删除用户都用gpasswd命令。gpasswd命令的格式为

gpasswd [选项] [用户] [组]

只有root用户和组管理员才能够使用这个命令,命令选项如下表所示:

选 项 说 明
-a 把用户加入组
-d 把用户从组中删除
-r 取消组的密码
-A 给组指派管理员

例子:

要把user1用户加入testgroup组,并指派user1为管理员,可以执行下列命令:

[root@rhel7-lzq-01 ~]# groupadd  testgroup 
[root@rhel7-lzq-01 ~]# gpasswd -a user1 testgroup
[root@rhel7-lzq-01 ~]# gpasswd -A user1 testgroup

image.gif

4 su命令和sudo命令的使用

4.1 su 命令

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户:

[root@rhel7-lzq-01 ~]# id
uid=0(root) gid=0(root) =0(root) =unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@rhel7-lzq-01 ~]# useradd -G testgroup test
[root@rhel7-lzq-01 ~]# su - test
[test@rhel7-lzq-01 ~]$ id
uid=1001(test) gid=1002(test) =1002(test),1001(testgroup) =unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

image.gif

当从root管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成root管理员就需要进行密码验证。

[test@rhel7-lzq-01 ~]$ su root
密码:
[root@rhel7-lzq-01 test]# su - test
上一次登录:一 1021 09:41:01 CST 2024pts/0 上
[test@rhel7-lzq-01 ~]$ exit
登出
[root@rhel7-lzq-01 test]#

image.gif

4.2 sudo

尽管像上面这样使用su命令后,普通用户可以完全切换到root管理员身份来完成相应工作,但这会暴露root管理员的密码,从而增大了系统密码被黑客获取的概率,因此上述操作并不是最安全的方案。

这个命令自学。

相关文章
|
Java Apache Maven
【IntelliJ IDEA】解决IntelliJ IDEA 创建Maven项目速度慢的问题,配置DarchetypeCatalog
【IntelliJ IDEA】解决IntelliJ IDEA 创建Maven项目速度慢的问题,配置DarchetypeCatalog
2102 0
|
安全 Linux
Linux Centos通过mail向QQ邮箱发邮件
【8月更文挑战第20天】在 CentOS 上配置使用 `mail` 命令向 QQ 邮箱发送邮件涉及几个步骤。首先确保已安装 `mailx`;接着编辑 `/etc/mail.rc` 文件来配置发件信息,包括设置发件邮箱、SMTP 服务器及授权码。最后,通过 `echo` 命令结合 `mail` 发送邮件。需登录 QQ 邮箱开启 SMTP 服务并获取授权码用于安全验证。
728 3
|
存储 负载均衡 Java
如何配置Windows主机MPIO多路径访问存储系统
Windows主机多路径(MPIO)是一种技术,用于在客户端计算机上配置多个路径到存储设备,以提高数据访问的可靠性和性能。本文以Windows2012 R2版本为例介绍如何在客户端主机和存储系统配置多路径访问。
774 13
如何配置Windows主机MPIO多路径访问存储系统
|
安全 虚拟化 Docker
在win10中使用ModelScope官方镜像
为在办公环境笔记本win10上测试ModelScope的开源模型 ,记录踩坑过程
2593 0
在win10中使用ModelScope官方镜像
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
1052 2
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
|
网络协议 Linux
在Linux中,如何分析网络连接和端口占用情况?
在Linux中,如何分析网络连接和端口占用情况?
|
运维 监控 关系型数据库
CentOS7 离线安装 Zabbix5.0
各位运维的朋友们都有可能遇到过在公司内网环境下无法访问外网情况,无法访问外网yum源部署ZABBIX 对于rpm包依赖问题比较头疼。本文将会进行离线部署实战。同时大家也可以写成一份shell脚本直接离线安装一键部署就可以了。
2100 0
CentOS7 离线安装 Zabbix5.0
|
开发者 Python
【Python】已解决:(Python3中pip无法安装urllib报错问题) ERROR: Could not find a version that satisfies the requireme
【Python】已解决:(Python3中pip无法安装urllib报错问题) ERROR: Could not find a version that satisfies the requireme
1335 0
【Python】已解决:(Python3中pip无法安装urllib报错问题) ERROR: Could not find a version that satisfies the requireme
|
消息中间件 存储 监控
RabbitMQ 死信队列
RabbitMQ的死信队列(DLQ)是存储无法正常消费消息的特殊队列,常见于消息被拒绝、过期或队列满时。DLQ用于异常处理、任务调度和监控,通过绑定到普通队列自动路由死信消息。通过监听死信队列,可以对异常消息进行补偿和进一步处理,提升系统稳定性和可维护性。
417 1