linux 命令 sudo、su 命令

sudo命令详解

1、初识sudo

sudo是linux下常用的允许普通用户使用超级用户权限的工具,sudo 用来执行需要提升权限(通常是作为 root 用户)的命令,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,shutdown、init等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。sudo是对Shell的一个代替,它是面向每个命令的。
  它的特性主要有这样几点:
  ① sudo能够限制用户只在某台主机上运行某些命令
  ② sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
  ③ sudo使用时间戳文件——日志来执行类似的“检票”系统。当用户调用sudo并且输入他的密码时,用户获得了一张存活期为5分钟的票(这个值可以在/etc/sudoers设置)。
  ④ sudo的配置文件是/etc/sudoers,属性必须为0440,它允许系统管理员集中地管理用户的使用权限和使用主机。

2、sudo命令用法

命令解释

sudo — execute a command as another user(以其他用户身份执行命令)

命令语法

sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command

命令选项

选 项解 释
-V显示版本编号
-h显示版本编号及指令的使用方式说明
-l显示出自己(执行 sudo 的使用者)的权限
-v因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b将要执行的指令放在后台执行
-pprompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-uusername/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command要以系统管理者身份(或以 -u 更改为其他人)执行的指令

实例

① 列出当前用户权限;

[tom@localhost /]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
    DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 tom 可以在 localhost 上运行以下命令:
    (root) /sbin/useradd

② 以root身份使用useradd命令创建cat用户;

[tom@localhost /]$ sudo -u root useradd cat

③ 查看版本信息;

[tom@localhost ~]$ sudo -V
Sudo 版本 1.8.23
Sudoers 策略插件版本 1.8.23
Sudoers 文件语法版本 46
Sudoers I/O plugin version 1.8.23

3.如何编辑配sudo的配置文件/etc/sudoers?

编辑sudo的配置文件/etc/sudoers一般不直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如果有错也会保存从而导致sudo工具无法使用,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错误会给出提示。

① 别名规则

别名规则的定义格式:
    AliasType NAME = item1, item2, …
            或
    AliasType NAME = item1 : NAME = item2, item3 : …
  其中,AliasType 指别名类型,包括:HostAlias、UserAlias、RunasAlias 和 Cmnd_Alias 四种。NAME 指别名,命名可以包含大写字母、下划线以及数字,但必须以大写字母开头。

② 授权规则

授权规则的定义格式:
    授权用户 主机=命令动作
          或
    授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] [命令1],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2], …
  其中,授权用户、主机和命令动作这三个要素缺一不可,在命令动作之前可以指定切换到特定用户或用户组下,在这里指定切换的用户或用户组要用 () 小号括起来;如果不需要密码直接运行命令的,应该加NOPASSWD:参数。

示例

接下来,我们以一个栗子来教会大家该如何配置:
① 使用户 tom 能够有权限挂载/dev/sr0到/media目录下;

[root@localhost ~]# visudo    //打开配置文件
...省略部分信息
## Allow root to run any commands anywhere    
root    ALL=(ALL)       ALL
tom     ALL=(root)      /bin/mount /dev/sr0 /media    //添加该条信息
...省略部分信息

[root@localhost ~]# su - jerry    //切换到jerry用户
[jerry@localhost ~]$ sudo mount /dev/sr0 /media/    //测试jerry用户是否可以运行此命令
[sudo] password for jerry:
jerry is not in the sudoers file.  This incident will be reported.    //jerry被拒绝运行

[jerry@localhost ~]$ su - tom    //切换到tom用户
Password:
[tom@localhost ~]$ sudo mount /dev/sr0 /media/    //运行mount /dev/sr0 /media/命令
mount: block device /dev/sr0 is write-protected, mounting read-only    //挂载成功


② 使用户 tom 和 jerry 能够有权限修改IP,使用别名实现,且不需要输入密码;

[root@localhost ~]# sudoedit /etc/sudoers.d/ip    //在/etc/sudoers.d下编辑一个配置文件
User_Alias IPMOD_USERS = tom,jerry    //定义用户别名IPMOD_USERS,其中有用户tom,jerry
Cmnd_Alias IP = /sbin/ip    //定义命令别名,为/sbin/ip命令设置别名IP
IPMOD_USERS ALL=(root)  NOPASSWD:IP    //IPMOD_USERS用户在任何主机使用root身份不需要密码执行IP命

[root@localhost ~]# su - tom    //切换到tom用户
[tom@localhost ~]$ ip a    //查看ip信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.140.137/24 brd 192.168.140.255 scope global eth0
    inet6 fe80::20c:29ff:fed8:94d9/64 scope link
       valid_lft forever preferred_lft forever
[tom@localhost ~]$ sudo ip add add 192.168.140.138/24 dev eth0    //添加ip地址
[tom@localhost ~]$ ip a    //查看ip信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.140.137/24 brd 192.168.140.255 scope global eth0
    inet 192.168.140.138/24 scope global secondary eth0    //添加成功
    inet6 fe80::20c:29ff:fed8:94d9/64 scope link
       valid_lft forever preferred_lft forever

[tom@localhost ~]$ su - jerry    //切换到jerry用户
Password:
[jerry@localhost ~]$ sudo ip add del 192.168.140.138/24 dev eth0    //删除ip地址
[jerry@localhost ~]$ ip a    //查看ip信息,可以看到已经删除成功
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.140.137/24 brd 192.168.140.255 scope global eth0
    inet6 fe80::20c:29ff:fed8:94d9/64 scope link
       valid_lft forever preferred_lft forever


③ 使用户 jerry 能够有权限使用 /user/sbin/ 下的所有命令,除了 /use/sbin/userdel 命令;

[root@localhost ~]# visudo    //打开配置文件
...省略部分信息
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
jerry   ALL=(root)      /usr/sbin/*,!/usr/sbin/userdel    //添加该条信息

[root@localhost ~]# su - jerry    //切换到jerry用户
[jerry@localhost ~]$ sudo useradd jerry_testuser    //添加用户jerry_testuser
[sudo] password for jerry:
[jerry@localhost ~]$ tail -1 /etc/passwd    //查看/etc/passwd文件最后一条
jerry_testuser:x:503:503::/home/jerry_testuser:/bin/bash    //添加成功
[jerry@localhost ~]$ sudo userdel jerry_testuser    //测试是否可以使用/use/sbin/userdel 命令
Sorry, user jerry is not allowed to execute '/usr/sbin/userdel jerry_testuser' as root on localhost.localdomain.    //拒绝使用

sudo命令下环境变量失效问题

在sudo命令时,系统会默认重置环境变量为安全的环境变量,即之前设置的变量都会失效

sudo sed '/^#/d;/^$/d' /etc/sudoers

在这里插入图片描述
Defaults env_reset表示默认会重置环境变量
secure_path 当使用sudo命令时,自定义的环境变量PATH将失效,系统只识别该行定义的环境变量

  • 解决方法
  1. 将 sudo 执行命令时改成系统的 PATH 变量中的路径
    将 Defaults env_reset 改成 Defaults !env_reset 来取消掉对 PATH 变量的重置,
    然后在 .bashrc 中最后添加 alias sudo=‘sudo env PATH=$PATH’。这样 sudo 执行命令时所搜寻的路径就是系统的 PATH 变量中的路径
  2. 修改sudo配置文件
    修改 /etc/sudoers 文件的 env_keep 和 secure_path 配置项

su 命令

Linux操作系统中的su命令是一种用于切换用户身份的命令。su是"Switch User"的缩写,它允许当前用户切换到其他用户账户,包括超级用户(root)。

su命令的语法如下:

su [选项] [用户名]

当不指定用户名时,默认切换到超级用户(root)账户。如果指定了用户名,则会切换到该用户的账户。

su命令常用的选项包括:

  • -:切换到目标用户的环境变量,类似于登录该用户。
  • -c command:执行指定的命令,然后切换回原用户。
  • -l 或 --login:切换到目标用户的环境变量,类似于登录该用户。
    使用su命令需要输入目标用户的密码,只有拥有目标用户密码的用户才能切换到该用户账户。

su命令的主要用途是在需要进行系统管理或执行需要超级用户权限的任务时,临时切换到超级用户账户。通过切换到超级用户,用户可以执行一些普通用户无法执行的操作,如安装软件、修改系统配置等

由于su命令需要输入目标用户的密码,这可能会导致安全风险。为了提高系统的安全性,建议使用sudo命令来代替su命令。sudo命令允许普通用户以超级用户权限执行指定的命令,而无需知道超级用户的密码。

总结来说,su命令是一种用于切换用户身份的命令,可以在需要进行系统管理或执行需要超级用户权限的任务时使用。为了提高系统的安全性,建议使用sudo命令代替su命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/195034.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

002、ArkTS

之——开发语言 目录 之——开发语言 杂谈 正文 1.TypeScript基础 1.1 基础类型 1.2 条件语句 1.3 函数 1.4 类 1.5 模块 1.6 迭代器 2.ArkTS 2.1 JAVA SCRIPT 2.2 TS 2.3 ArkTS ​编辑 3.示例 3.1 概述性示例 3.2 自定义组件 3.3 渲染控制语法 3.4 状态管…

【C++】什么是模板?怎样使用模板?

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.函数模板 1.1函数模板概念 1.2函数…

研究前沿|NAR:一个综合性的植物代谢组数据库

引言 2023年10月&#xff0c;华中农业大学小麦改良创新团队陈伟教授课题组在Nucleic Acids Research发表题为“PMhub 1.0: a comprehensive plant metabolome database”的文章&#xff0c;系统介绍了他们开发的植物代谢分析网站&#xff08;PMhub&#xff09;的功能与价值。P…

Maven生命周期

Maven生命周期 通过IDEA工具的辅助&#xff0c;能很轻易看见Maven的九种生命周期命令&#xff0c;如下&#xff1a; 双击其中任何一个&#xff0c;都会执行相应的Maven构建动作&#xff0c;为啥IDEA能实现这个功能呢&#xff1f;道理很简单&#xff0c;因为IDEA封装了Maven提供…

PDF控件Spire.PDF for .NET【转换】演示:将C#/VB.NET:将 PDF 转换为 PostScript (PS)

PostScript 是 Adobe Systems 在 20 世纪 80 年代开发的一种将数字图形或文本文件转换为可供打印的固定格式的方法。随着时间的推移&#xff0c;虽然 PostScript (PS) 文件格式不再像以前那样流行&#xff0c;但现在大多数打印机仍然支持它。在本文中&#xff0c;您将了解如何使…

【刷题笔记】匹配字符串||KMP||动图解析||符合思维方式

找出字符串中第一个匹配项的下标 1 题目描述 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/ 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开…

IP-Adapter:文本兼容图像提示适配器,用于文本到图像扩散模型

IP-Adapter这是一种有效且轻量级的适配器&#xff0c;用于实现预训练文本到图像扩散模型的图像提示功能。只有 22M 参数的 IP 适配器可以实现与微调图像提示模型相当甚至更好的性能。IP-Adapter 不仅可以推广到从同一基本模型微调的其他自定义模型&#xff0c;还可以推广到使用…

OpenVINO异步Stable Diffusion推理优化方案

文章目录 Stable Diffusion 推理优化背景技术讲解&#xff1a;异步优化方案思路&#xff1a;异步推理优化原理OpenVINO异步推理Python API同步和异步实现方式对比 oneflow分布式调度优化优势&#xff1a;实现思路 总结&#xff1a; Stable Diffusion 推理优化 背景 2022年&am…

Selenium 连接到现有的 Firefox 示例

当前环境&#xff1a; python 3.7 selenium 3.14.1 urllib3 1.26.8 Frefox 115.1.0esr(32位) geckodriver.exe 0.33.0 1 下载 Firefox 浏览器&#xff0c;根据自己的需要选择。 下载 Firefox 浏览器&#xff0c;这里有简体中文及其他 90 多种语言版本…

招标采购软件如何让采购变得更轻松?

企业总是希望让采购流程更简单&#xff0c;选择更好的供应商&#xff0c;花更少的钱。采购软件的普及使原材料和服务的采购变得更容易&#xff0c;向供应商&#xff08;甚至是全球供应商&#xff09;索取信息的流程已大大简化。包括招标采购软件在内的采购技术已成为企业运营不…

Elasticsearch(ES)概述

文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…

【开发实践】使用POI实现导出带有复杂表头的的excel文件

一、需求分析 公司业务部门需要&#xff0c;根据一些数据&#xff0c;加上表头&#xff0c;导出需要的excel表格。效果如下&#xff1a; 二、代码实现 【依赖准备】 <!-- POI --><dependency><groupId>org.apache.poi</groupId><artifactId>po…

CloudCompare简单开发

一、概述 CloudCompare如何进行二次开发&#xff1f;_cloudcompare 二次开发-CSDN博客 开发一个功能&#xff0c;在原始CC的基础上添加一个拓展功能&#xff0c;如下&#xff1a; 二、功能开发 1、修改MainWindow.UI 重点是&#xff1a;要编译&#xff0c;不然在mainwindow.…

P8A110-A120经典赛题

Web应用程序SQL Inject安全攻防 任务环境说明&#xff1a; 服务器场景&#xff1a;WebServ2003&#xff08;用户名&#xff1a;administrator&#xff1b;密码&#xff1a;空&#xff09;服务器场景操作系统&#xff1a;Microsoft Windows2003 Server 服务器场景安装服务/工…

yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求&#xff0c;要更新迭代一个场景的检测模型&#xff0c;甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便)&#xff0c;而我训练模型确实要标注好的图片形式。 根据这些条件的话&#xff0c;思路应该是要这样的&#xff1a;首先使用现有的…

【Android知识笔记】性能优化专题(四)

App 线程优化 线程调度原理 任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型 分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用Android线程调度 nice值:Proc…

解密Python内置类属性__getitem__的神奇魔力:深入探索索引访问的奥秘

概要 在Python编程语言中&#xff0c;__getitem__是一种内置的类属性&#xff0c;它允许我们以索引的方式访问对象的元素。这个魔法方法在Python中被广泛使用&#xff0c;它不仅让我们能够使用索引来访问对象的元素&#xff0c;还能让我们自定义对象的索引访问方式&#xff0c…

STM32 ADC转换器、串口输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么&#xff1f;二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准&#xff1f;2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…

Hutool是一个小而全的Java工具类库

Hutool是一个小而全的Java工具类库&#xff0c;它包含了众多实用的静态方法&#xff0c;可以提高Java开发效率。以下是Hutool的安装和使用教程&#xff1a; 安装 Hutool可以通过Maven或Gradle进行安装。 ① Maven安装&#xff1a; 在您的Maven项目的pom.xml文件中添加以下依赖…

linux 安装 mvn

mvn 下载地址&#xff1a;https://maven.apache.org/download.cgi 选择一个合适的版本 cd /opt && curl -o apache-maven-3.8.6-bin.tar.gz https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz tar -xzf apache-maven-3.8.6-bin.…