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="COLORSDISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESSLC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARYLC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSETXAUTHORITY", 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 UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ffinet 192.168.140.137/24 brd 192.168.140.255 scope global eth0inet6 fe80::20c:29ff:fed8:94d9/64 scope linkvalid_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 UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ffinet 192.168.140.137/24 brd 192.168.140.255 scope global eth0inet 192.168.140.138/24 scope global secondary eth0    //添加成功inet6 fe80::20c:29ff:fed8:94d9/64 scope linkvalid_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 UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:d8:94:d9 brd ff:ff:ff:ff:ff:ffinet 192.168.140.137/24 brd 192.168.140.255 scope global eth0inet6 fe80::20c:29ff:fed8:94d9/64 scope linkvalid_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命令。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查

一、背景 在今天上午的时候&#xff0c;突然收到大量的sentry报错&#xff0c;都是关于redis连接超时的警告。 首先想到的是去查看redis的监控&#xff0c;发现那个时间段&#xff0c;redis的请求数剧增&#xff0c;cpu使用率和带宽都陡增双倍。 下面的是redis监控的cpu情况 …

无代码未来:智能、可视化、自动化的融合

无代码是一个相对较新的概念&#xff0c;不同的人群对其界定可能存在一定的差异。 对于IT专业人士和开发人员而言&#xff0c;无代码通常是指使用可视化界面和拖拽操作来构建应用程序的工具和平台。 无代码平台通过提供预先构建的组件和模块&#xff0c;使得开发人员可以通过简…

基于CW32F030单片机的便携式多功能测试笔

一、产品背景 在日常的硬件调试工作中&#xff0c;我们最常使用的仪器仪表可能就是万用表了&#xff0c;虽然万用表号称“万用”&#xff0c;但大部分时候&#xff0c;我们需要使用到的功能无非是电压测量和通断测量。 作为调试的“得力干将”&#xff0c;万用表有时候也会存…

歌手荆涛演唱的《春节回家》,一种情感的表达和文化的传承

歌手荆涛演唱的《春节回家》&#xff0c;一种情感的表达和文化的传承 春节回家&#xff0c;是中国传统文化中最为重要的传统节日之一&#xff0c;也是亿万华夏儿女最为期待的日子。每当春节临近&#xff0c;无论身在何处&#xff0c;人们都会收拾行囊&#xff0c;踏上归途&…

【5G PHY】5G SS/PBCH块介绍(四)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

策略算法与Actor-Critic网络

策略算法 教程链接 DataWhale强化学习课程JoyRL https://johnjim0816.com/joyrl-book/#/ch7/main 策略梯度 与前面的基于价值的算法不同&#xff0c;这类算法直接对策略本身进行近似优化。 在这种情况下&#xff0c;我们可以将策略描述成一个带有参数 θ θ θ的连续函数…

WebUI自动化学习(Selenium+Python+Pytest框架)002

新建项目 New Project 新建一个python代码文件 file-new-python file 会自动创建一个.py后缀的代码文件 注意:命名规则,包含字母、数字、下划线&#xff0c;不能以数字开头&#xff0c;不能跟python关键字或包名重复。 ********************华丽分割线********************…

【算法】20231128

这里写目录标题 一、55. 跳跃游戏二、274. H 指数三、125. 验证回文串 一、55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&am…

【MATLAB源码-第91期】基于matlab的4QAM和4FSK在瑞利(rayleigh)信道下误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 正交幅度调制&#xff08;QAM&#xff0c;Quadrature Amplitude Modulation&#xff09;是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度&#xff08;π/2&#xff09;的正弦波&#xff0c;因此…

C语言第三十四弹--矩形逆置

C语言实现矩阵逆置 逆置结果如图 思路&#xff1a;通过观察逆置结果&#xff0c;首先发现行数和列数都发生了调换。其次观察逆置前后数字对应的下标&#xff0c;逆置前数字对应下标为:[x][j] 逆置后数字对应下标为&#xff1a;[y][x]。综上&#xff0c;就可以实现矩阵逆置。 …

3D点云目标检测:CT3D解读(未完)

CT3D 一、RPN for 3D Proposal Generation二、Proposal-to-point Encoding Module2.1、Proposal-to-point Embedding2.2、Self-attention Encoding 三、Channel-wise Decoding Module3.1、Standard Decoding3.2、Channel-wise Re-weighting3.3、Channel-wise Decoding Module 四…

Pinctrl子系统和GPIO子系统实验

驱动入口出口函数&#xff1a; static int __init led_init(void) {return 0; } static void __exit led_exit(void) { }module_init(led_init);module_exit(led_exit);MODULE_LICENSE("GPL");字符设备驱动那一套 先创建设备结构体 &#xff08;cdev&#xff09; 1…

控制台gbk乱码

引用IntelliJ IDEA中 统一设置编码为utf-8或GBK-CSDN博客 特别注意file coding 的文件path和java的编码格式 配置

Linux 基本语句_12_信号

用途&#xff1a; 信号可以直接进行用户进程与内核进程之间的交互 特性&#xff1a; 对于一个进程&#xff0c;其可以注册或者不注册信号&#xff0c;不注册的信号&#xff0c;进程接受后会按默认功能处理&#xff0c;对于注册后的信号&#xff0c;进程会按自定义处理 自定义…

代码随想录训练营第30天 | 332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接&#xff1a;重新安排行程 解法&#xff1a; 这个题&#xff0c;卡哥的思路会超时。辛辛苦苦看懂了卡哥的思路&#xff0c;结果超时了&#xff0c;直接崩溃。 看了leetcode官方的思路&#xff0c;非常简洁&#xff0c;但是里面的深意还是不太懂。 由…

如何通过信息化为燃气管道提供数据监控、智能的调度和作业技术?

关键词&#xff1a;智慧燃气、燃气监控、智慧管网、智慧燃气管网、智慧燃气管网解决方案、城市燃气管网 在信息化迅猛发展的历史潮流中&#xff0c;如何通过信息化为燃气管道提供更广泛的数据监控、更紧密的数据集成、更智能的调度和作业、更智慧的分析和决策&#xff0c;为安…

01-鸿蒙4.0学习之开发环境搭建 HelloWorld

HarmonyOS开发学习 1.环境配置 1.下载地址 开发工具&#xff1a;DevEco Studio 3.1.1 Release 下载地址 安装选择快捷方式 安装nodejs和Ohpm 安装SDK 选择同意Accept 检测8项目是否安装成功 2.创建项目 —— hello word

C语言第三十五弹---打印九九乘法表

C语言打印九九乘法表 思路&#xff1a;观察每一行可以看出乘号右边的一行值都是相同的&#xff0c;而乘号左边不断变化&#xff0c;所以使用嵌套循环&#xff0c;控制好 乘号左右值变化的条件即可。 #include <stdio.h>int main() {for (int i 1; i < 9; i){for (in…

森林无人机高效解决巡查难题,林区防火掀新篇

山东省某市为了强化森林火灾防范&#xff0c;采用了一项新兴手段——复亚智能无人机森林火情监测系统。这套系统在AI飞行大脑的指挥下&#xff0c;让无人机在空中巡逻&#xff0c;实现了无人机森林防火系统的实施落地。 一、AI大脑如何引领森林无人机高空巡逻&#xff1f; 在山…

C++ :const修饰成员函数

常函数&#xff1a; 常函数&#xff1a; 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后&#xff0c;在常函数中依然可以修改 属性可修改&#xff1a; class Person { public: void showPerson() …