Linux的命令——关于操作用户及用户组的命令
目录
1.Linux的命令格式
2.用户与用户组管理
2.1用户管理
添加用户
设置用户密码
删除用户
修改用户
2.2用户组管理
新增用户组
删除用户组
修改用户组属性
用户组切换
用户组管理
用户切换
1. su
2.sudo
1.Linux的命令格式
Linux系统中几乎所有操作,如文件、账户、软件包的管理、磁盘分区、性能监控、网络配置等都可通过命令实现,实现这些功能的命令大多遵循如下格式:
命令名称 [选项] [命令作用的对象]
命令的选项分为短选项和长选项;短选项可组合使用,而长选项只能单独使用。
2.用户与用户组管理
Linux是一个多用户、多任务的分时操作系统,在Linux主机上可同时登陆多个用户,为了对用户的状态进行追踪,并对其可访问的资源进行控制,每名用户在使用Linux之前,必须向系统申请一个账号,并设置密码,之后才能登陆并访问系统资源。
Linux用户可以分为两大类:超级用户和普通用户。
其中超级用户拥有操作Linux系统的所有权限。
2.1用户管理
添加用户
添加用户的命令为 useradd ,使用该命令可在系统中创建一个新账号。useradd命令的格式如下:
useradd [选项] 用户名
useradd命令可通过一些选项,在创建用户的同时为新增的账号设置一些属性,若不设置除用户名外的其他属性,则这些属性由系统设置为默认值。
选项 | 说明 |
---|---|
-d | 指定用户登录时的目录 |
-c | 指定账户的备注文字 |
-e | 指定账号的有效期限 |
-f | 缓冲天数,密码过期时在指定天数后关闭该账号 |
-g | 指定用户所属组 |
-G | 指定用户所属的附加用户组 |
-m | 自动建立用户的登录目录 |
-r | 创建系统账号 |
-s | 指定用户的登录shell |
-u | 指定用户的用户ID,若添加-o选项,则用户ID可与其他用户重复 |
例:
#创建新用户bxg,指定用户主目录为/usr/bxg并自动创建登录目录
[root@localhost ~]# useradd -d /usr/bxg -m bxg
#创建新用户 itcast ,设置其用户id为876
[root@localhost ~]# useradd itcast -u 876
Linux系统中的用户名和用户ID都是唯一的,其中用户名由字母、数字、下划线组成,且不能以数字开头。
设置用户密码
通过passwd命令为用户设置密码,其格式如下:
passwd [选项] 用户名
常用选项:
选项 | 说明 |
---|---|
-l | 锁定密码,锁定后密码无效,无法登录(新用户默认锁定) |
-d | 删除密码,仅系统管理员可使用 |
-S | 列出密码相关信息,仅系统管理员可使用 |
-f | 强行执行 |
#为新用户bxg设置密码
[root@localhost ~]# passwd bxg
更改用户bxg的密码。
新的密码:
重新输入新的密码:
passwd: 所有的身份验证令牌已经成功更新。
Linux系统建议用户密码至少为8个字符,若没有8个字符会打印警告信息,此警告不会对用户账户的使用造成影响。用户可再次输入密码并确认密码,完成密码设置。
密码信息存储在/etc的shadow文件中。
删除用户
若用户不再使用,可用userdel 命令将该用户从系统删除,出删除用户账户外,userdel命令还可以删除与指定用户相关的文件和信息。
userdel [选项] 用户名
选项 | 说明 |
---|---|
-f | 强制删除用户,即便该用户为当前用户 |
-r | 删除用户的同时,删除与用户相关的所有文件 |
#删除用户bxg及相关文件
[root@localhost ~]# userdel -r bxg
修改用户
usermod命令用户修改用户信息。
usermod 选项 参数
在使用usermod命令修改用户信息的时候,必须先确认该用户没有在电脑上执行任何程序。usermod命令的常用选项:
选项 | 说明 |
---|---|
-c | 修改用户账号的备注信息 |
-d | 修改用户的登录目录 |
-e | 修改账号的有效期限 |
-f | 修改缓冲天数,即修改密码过期后关闭账号的时间 |
-g | 修改用户所属组 |
-G | 修改用户所属的附属组 |
-l | 修改用户账号名称 |
-L | 锁定用户密码,使密码失效 |
-s | 修改用户登录后使用的Shell |
-u | 修改用户ID |
-U | 解除密码锁定 |
# 修改用户bxg的用户id为678
[root@localhost ~]# usermod -u 678 bxg
2.2用户组管理
为了方便对用户的管理,Linux系统设置了用户组的概念,一般将权限相同的用户放在同一个用户组中。
新增用户组
增加用户组的方式有两种:一种由系统默认创建——在创建新用户时,若无特别指定,系统会为新用户创建与其同名的用户组;另一种是使用groupadd命令主动添加,该命令的格式如下:
groupadd [选项] 参数
选项 | 说明 |
---|---|
-g | 指定新建用户组的组ID |
-r | 创建系统用户组,组ID取值范围为1~499 |
-o | 允许创建组ID已存在的用户组 |
# 创建一个用户组 group1 ,指定其组ID为550
[root@localhost ~]# groupadd -g 550 group1
Linux系统将用户组信息存储于 /etc/group 文件中。
删除用户组
使用 groupdel 命令可以删除多余的用户组,该命令的格式如下:
groupdel 用户组名
例:
# 删除用户组 group1 ,指定其组ID为550
[root@localhost ~]# groupdel group1
修改用户组属性
用户组的组ID、组名等属性都可以被修改,修改用户组属性的命令为gruopmod,其命令格式如下:
groupmod [选项] group1
选项 | 说明 |
---|---|
-g | 为用户组指定新的组ID |
-n | 修改用户组的组名 |
-o | 允许创建组ID已存在的用户组 |
# 创建一个组 group1 ,指定其组ID为550
[root@localhost ~]# groupadd -g 550 group1
# 在组 ID550 已存在的情况下,将用户组 itheima 的组 ID 改为 550
[root@localhost ~]# groupmod -o itheima -g 550
# 修改用户组 group1的组名为itcast
[root@localhost ~]# groupmod group1 -n itcast
用户组切换
用户组分为基本组(也称默认组)和附属组。
附属组是用户所属的除基本组之外的组,用户的基本组唯一,附属组不唯一;用户可从附属组移除,但不能从基本组中移除。
如果一个用户属于多个组,当需要切换到其它组执行操作时,可使用newgrp命令切换用户组:
newgrp 用户组
# 切换用户 root 的工作组为 itcast
[root@localhost ~]# newgrp itcast
用户组管理
gpasswd 命令用于管理用户组:
gpasswd 选项 参数
选项 | 说明 |
---|---|
-a | 添加用户到用户组 |
-d | 从用户组中删除用户 |
-r | 删除密码 |
-R | 限制用户登入组,只有组中成员才可以用 newgrp 加入用户组 |
注意:使用usermod命令的 -g 选项为用户设置附属组时,将会覆盖用户原有的附属组,若想为用户设置多个附属组,需使用gpasswd命令将用户逐个添加到不同的用户组中。
# 将用户 itheima添加到用户组 itcast
[root@localhost ~]# gpasswd -a itheima itcast
用户切换
Linux系统提供了两种切换用户的方式: 一种是通过Linux系统图形化界面菜单中的 “切换用户" 选项切换用户,另一种是在终端使用命令su或sudo切换用户。
通过图形界面菜单中的 “切换用户” 选项切换用户的方式如图2-1所示。
Linux运维人员一般通过用户切换命令实现用户切换。
1. su
使用 su 命令切换用户是最简单的用户切换方式,该命令可在任意用户之间进行切换,其基本格式如下:
su [选项] [用户名]
若选项和用户名缺省,则表示切换到 root 用户,但此时仍保留原来用户的工作环境;若使用“su -”,则表示从当前用户切换到root用户,并切换到root用户的工作目录。
su命令的常用选项如下:
选项 | 说明 |
---|---|
-c | 执行完指定的指令后,切换回原来的用户 |
-l | 切换用户的同时,切换到对应用户的工作目录,环境变量也会随之改变 |
-m,-p | 切换用户时,不改变环境变量 |
-s | 指定要执行的shell |
使用su命令时,由root用户切换到其他用户,可以不输入密码;由普通用户切换到目标用户时,需要输人目标用户的密码。
2.sudo
虽然使用su命令相当方便,但由于需要知道目标用户的密码,所以su命令是不安全的,若想保障系统的安全,可以使用 sudo 命令切换用户。
sudo [选项] [参数]
sudo 可使当前用户以其他身份来执行命令、若不指定用户名,则默认以 root 身份执行。在使用sudo 命令时,用户需要输人自己的密码,此次密码验证在之后的5分钟内有效,若超时需重新验证。
sudo命令的常用选项如下:
选项 | 说明 |
---|---|
-b | 在后台执行命令 |
-h | 显示帮助 |
-H | 将HOME环境变量设置为新身份的HOME环境变量 |
-k | 结束密码的有效期限 |
-l | 列出目前用户可执行与无法执行的命令 |
-p | 改变询问密码的提示符号 |
-s | 执行指定的shell |
-u | 以指定的用户作为新的身份,即切换到指定用户。默认切换到root用户 |
在使用 sudo 命令之前,需要先在 etc 目录下的 sudoers 文件中对可执行 sudo 指令的用户进行设置。sudoers 文件中的内容遵循一定的语法规范,为防止因语法有误导致的错误,Linux系统提供了 visudo 命令,使用该命令修改文件后,系统会在保存退出时对sudoers文件的语法进行检查。此外,visudo 命令亦可防止其他用户同时修改sudoers文件。下面将介绍使用root用户编辑sudoers 文件,为其他用户提升权限的方法。
首先在root用户下使用visudo命令打开sudoers文件,如下所示:
[root@localhost ~]# visudo
观察sudoers文件,可以在其中找到如下的语句:
# Allow root to run any commands anywhere
root ALL=(ALL) ALL
第一条语句是注释行,第二条语句是对root 用户的权限设置,它的作用是:使root用户能够在任何情境下执行任何命令。sudoers文件中的所有权限设置语句都符合如下格式:
账户名 主机名称=(可切换的身份) 可用的命令
以上格式中包含4个参数,每个参数的含义如下:
- 账户名:该参数是要设置权限的账号名,只有账号名被写入sudoers文件时,该用户才能使用sudo命令。root 用户默认可以使用sudo命令。
- 主机名称:该参数决定此条语句中账户名对应的用户可以从哪些网络主机连接当前Linux主机,root用户默认可以来自任何一台网络主机。
- 可切换的身份:该参数决定此条语句中的用户可以在哪些用户身份之间进行切换、执行哪些命令。root 用户默认可切换为任意用户。
- 可执行的命令:该参数指定此条语句中的用户可以执行哪些命令。注意,命令的路径应为绝对路径。root 用户默认可以使用任意命令。
以上语句中的参数ALL是一个特殊的关键字,分别代表任何主机、任何身份和任何命令。以用户itheima为例,若要使用户itheima能以root用户的身份执行/bin/more命令,则应在sudoers文件中添加如下内容:
itheima ALL=(root)/bin/more
保存退出后,切换到用户itheima,使用命令 “sudo -l” 可查看该用户可以使用的命令。
通过在配置文件中逐条添加配置信息的方法提升用户权限在一定程度上保障了系统安全,但当需要操作的用户较多时,如此操作显然相对麻烦。Linux 系统支持为用户组内的整组用户统一设置权限。
在sudoers文件中有如下所示的语句:
# %wheel ALL=(ALL) ALL
以上语句中,“%” 声明之后的字符串是一个用户组,该语句表示任何加入用户组wheel的用户,都能通过任意主机连接、以任何身份执行全部命令。因此若想提升某些用户的权限为ALL,将它们添加到用户组wheel中即可。当然此条语句前的“#”仍然表示注释,若要使此条命令生效,需将“#”删除。以用户组itheima为例,若要使该组中的所有用户能以root的身份执行命令/bin/ more ,则应在sudoers文件中添加如下命令:
%itheima ALL=(root)/bin/more
root作为系统中唯一的超级用户,权限极大,可以执行的命令极多,其中不乏非常危险的命令,如“rm -rf”。若是一个普通用户的权限被提升的太多,很可能会危及整个系统,为了防止这种情况,sudo命令中可以在配置sudoers文件时,对某些用户的权限进行控制。假如在itheima用户被提升至root 权限时,要禁止该用户使用/bin/more命令,可以使用以下语句:
itheima ALL= (root) ! /bin/more
以上语句通过 “!” 符号禁止用户执行某些命令。
相关文章:

Linux的命令——关于操作用户及用户组的命令
目录 1.Linux的命令格式 2.用户与用户组管理 2.1用户管理 添加用户 设置用户密码 删除用户 修改用户 2.2用户组管理 新增用户组 删除用户组 修改用户组属性 用户组切换 用户组管理 用户切换 1. su 2.sudo 1.Linux的命令格式 Linux系统中几乎所有操作࿰…...

pycharm 设置多级跳转SSH
打开本地终端并运行: ssh -L <local_port>:<target_server_ip>:22 <proxy_server_user><proxy_server_ip>运行完之后就应该已经连接上proxy (Optional) 可以再开一个终端测试一下: ssh -p <local_port> <target_server_user&g…...

LeetCode 189.轮转数组(三种方法解决)
文章目录 题目暴力求解空间换时间三段逆置总结 题目 LeetCode 189.轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5…...

GB28181设备对接视频流的流程
搭建CG28181 服务端,也即 SIP Server,这正是我们要实现的。实现CG28181服务端可以借助于现有的开源库 PJSIP,具体的实现步骤如下: 1、启动GB28181服务端,接收客户端消息请求 bool Init(std::string concat, int logL…...

类属性修改(为什么python类不具备被赋值能力?)
为什么python类不具备被赋值能力?,用魔术方法收集实参,在类中可以定义方法处理实际参数,实现对类“赋值”。 (笔记模板由python脚本于2023年11月15日 12:45:27创建,本篇笔记适合初通Python类class的coder翻阅) 【学习的…...

uniapp App端 解决input@input事件动态修改值不生效的问题
解决方法 1.延迟修改,利用setTimeout 2.异步修改,利用this.$nextTick <template><view><input v-modal"num" type"number" placeholder"请输入" :maxlength"3" input"onInputOne" …...

ELK分布式日志
ELK是指Elasticsearch、Logstash和Kibana三个开源软件的集合,用于构建分布式日志处理系统。 Elasticsearch是一款基于Lucene搜索引擎库的分布式全文搜索和分析引擎,支持多种数据类型的存储、搜索和分析,常用于日志分析、安全监控等领域。 L…...

Kylin-Server-V10-SP3+Gbase+宝兰德信创环境搭建
目录 一、Kylin-Server-V10-SP3 安装1.官网下载安装包2.创建 VMware ESXi 虚拟机3.加载镜像,安装系统 二、Gbase 安装1.下载 Gbase 安装包2.创建组和用户、设置密码3.创建目录4.解压包5.安装6.创建实例7.登录8.常见问题 三、宝兰德安装1.获取安装包2.解压安装3.启动…...

po与vo互转工具类
po转vo工具类 1.反射调用2.JSON序列化方式3.注解驱动4.ModelMappe5.手动映射6.总结7.扩展方法 1.反射调用 这个方法会创建一个新的实例,并将所有公共字段复制到目标对象中,而不修改原来的实例。因此,如果目标类包含 private 或 final 字段&am…...

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)
员工分页查询和账号启用禁用功能 1. 员工分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 封装PageResult1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.4 代码完善 2. 启用禁用员工账号…...

PyCharm:2023新版PyCharm无UI工具栏,如何回旧版
pycharm2023.3新版本,默认使用新UI,界面突然变化很大,感觉用起来很不适应。。。。于是,在网上搜了一下,确实有回老版的方法,试了一下,确实很nice~~~~ 方法: Settings——>Appea…...

阿里云国际站:云备份
文章目录 一、阿里云云备份的概念 二、云备份的优势 三、云备份的功能 四、云备份的应用场景 一、阿里云云备份的概念 云备份作为阿里云统一灾备平台,是一种简单易用、敏捷高效、安全可靠的公共云数据管理服务,可以为阿里云ECS整机、ECS数据库、文件…...

C#中.NET 6.0 Windows窗体应用通过EF访问数据库并对数据库追加、删除记录
目录 一、应用程序设计 二、应用程序源码 三、生成效果 前文作者发布了在.NET 6.0 控制台应用中通过EF访问已有数据库,事实上,在.NET 6.0 Windows窗体应用中通过EF访问已有数据库也是一样的。操作方法基本一样,数据库EF模型和上下文都是自…...

kafka+ubuntu20.04+docker配置
记录一次配置过程 安装docker 参加下面链接的第一部分 Ubuntu20.04使用docker安装kafka服务-CSDN博客 安装zookeeper docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper安装kafka服务 docker run -d --name kafka …...

遍历一个对象,并得出所对应的值
var dates {//定义的对象year:now.getFullYear(),month:now.getMonth()1,date:now.getDate(),hour:now.getHours(),minute:now.getMinutes(),second:now.getSeconds() }//开始遍历循环 var val; for (val in dates){console.log(对象名称:val-对象的值:…...

WGCLOUD的特点整理
做运维工作很多年了,项目中用过不少的运维软件工具,今天整理下WGCLOUD的特点(优点) 首先WGCLOUD是完全免费的 部署使用:部署简单方便,上手容易,几乎没有学习成本,对新手友好 文档…...

新版软考高项试题分析精选(三)
请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、项目整体管理要综合考虑项目各个相关过程,围绕整体管理特点,以下说法中,( )是不正确的。 A.项目的…...

从申请服务器到Docker部署Java项目至最后运行完结
目录 1.申请服务器篇 2.配置安全组篇 3.Docker安装篇 4.代码编写打包篇 目录结构 Maven Controller DockerFile 开始打包 5.所需文件上传及镜像构建篇 上传准备 上传jar包及DockerFile文件 指令构建 验证 6.镜像启动服务验证篇 启动镜像 使用云服务器地址进行…...

解决 requests.post 数据字段编码问题的方法
问题背景 在进行网络请求时,我们通常会使用requests库的post方法来发送POST请求。然而,当我们尝试发送包含特殊字符(如中文字符)的数据时,可能会遇到数据字段被编码的问题。这可能会导致请求失败或者服务器无法正确解…...

安全运维:cmd命令大全(108个)
1、calc:启动计算器 2、appwiz.cpl:程序和功能 3、certmgr.msc:证书管理实用程序 4、charmap:启动字符映射表 5、chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符) 6、cleanmgr: 打开磁盘清理工具 7、clico…...

构建Docker基础镜像(ubuntu20.04+python3.9.10+pytorch-gpu-cuda11.8)
文章目录 一、前置条件1.创建 ubuntu 镜像源文件【sources.list】2.下载 python 安装包【Python-3.9.10.tgz】 二、构建方法1.构建目录2.创建DockerFile3.打包镜像 一、前置条件 配置一下 ubuntu 的镜像源下载 python 安装包 1.创建 ubuntu 镜像源文件【sources.list】 内容…...

Flowable自定义Id生成器
内置ID生成器 Flowable内置DbIdGenerator(数据库自增ID)、StrongUuidGenerator(UUID),Flowable默认使用的StrongUuidGenerator看起来太长不好观察数据,可以修改成DbIdGenerator。 Configuration public class FlowableConfig implements EngineConfigu…...

怎样正确选择等保测评机构开展等保测评工作?
随着大家对网络安全的重视,越来越多的企业需要做等保测评了。很多小伙伴想知道怎样正确选择等保测评机构开展等保测评工作?这里就给大家简单说说。 怎样正确选择等保测评机构开展等保测评工作? 【回答】:正确选择等保测评机构开展…...

【论文阅读笔记】Detecting AI Trojans Using Meta Neural Analysis
个人阅读笔记,如有错误欢迎指出! 会议:2021 S&P Detecting AI Trojans Using Meta Neural Analysis | IEEE Conference Publication | IEEE Xplore 问题: 当前防御方法存在一些难以实现的假设,或者要求直…...

【PyTorch教程】如何使用PyTorch分布式并行模块DistributedDataParallel(DDP)进行多卡训练
本期目录 1. 导入核心库2. 初始化分布式进程组3. 包装模型4. 分发输入数据5. 保存模型参数6. 运行分布式训练7. DDP完整训练代码 本章的重点是学习如何使用 PyTorch 中的 Distributed Data Parallel (DDP) 库进行高效的分布式并行训练。以提高模型的训练速度。 1. 导入核心库 D…...

Istio学习笔记-体验istio
参考Istio 入门(三):体验 Istio、微服务部署、可观测性 - 痴者工良 - 博客园 (cnblogs.com) 在本章中,我们将会学习到如何部署一套微服务、如何使用 Istio 暴露服务到集群外,并且如何使用可观测性组件监测流量和系统指标。 本章教程示例使用…...

fastjson 系列漏洞
目录 1、 fastjson 1.2.22-1.2.24 版本 1.1 TemplatesImpl (Feature.SupportNonPublicField) 1.2 JNDI && JdbcRowSetImpl 利⽤链 2、fastjson 1.2.41 3、fastjson 1.2.42/1.2.43 4、fastjson 1.2.44-1.2.45 5、fastjson 1.2.46-1.2.47版本反序列化漏洞 jackson…...

odoo前端js对象的扩展方法
odoo前端js对象的扩展方法 在 Odoo 中,你可以使用两种方法来扩展 JavaScript 对象:extends 和 patch。这两种方法在功能上有一些区别。 extends 方法: 使用 extends 方法可以创建一个新的 JavaScript 对象,并继承自现有的对象。这…...

力扣双周赛 -- 117(容斥原理专场)
class Solution { public:long long c2(long long n){return n > 1? n * (n - 1) / 2 : 0;}long long distributeCandies(int n, int limit) {return c2(n 2) - 3 * c2(n - limit 1) 3 * c2(n - 2 * limit) - c2(n - 3 * limit - 1);} };...

基于Rabbitmq和Redis的延迟消息实现
1 基于Rabbitmq延迟消息实现 支付时间设置为30,未支付的消息会积压在mq中,给mq带来巨大压力。我们可以利用Rabbitmq的延迟队列插件实现消息前一分钟尽快处理 1.1定义延迟消息实体 由于我们要多次发送延迟消息,因此需要先定义一个记录消息…...