[转帖]sudo 命令_su、sudo、sudo su、sudo -i的用法和区别

sudo,命令,su,用法,区别 · 浏览次数 : 0

小编点评

**sudo简介** sudo 是一个用于系统管理员管理用户权限的工具。它可以授权指定用户在指定主机上运行某些命令。 **sudo特性** * 允许指定用户在指定主机上运行某些命令。 * 记录每个用户使用 sudo 操作的日志。 * 支持使用通配符。 **sudo配置文件** sudo 配置文件位于 `/etc/sudoers` 中。该文件包含对系统管理员的授权规则。 **sudo语法** * `sudo` 命令后面可以跟一些参数,这些参数用于指定要执行的命令。 * `sudo -` 命令用于临时切换到超级用户模式。 * `sudo -i` 命令用于在频繁执行某些命令时节省密码输入。 **sudo命令** * `sudo su` 命令用于切换到超级用户模式。 * `sudo -i` 命令用于在频繁执行某些命令时以超级用户身份运行命令。 **sudo授权示例** ``` user1 ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod ``` 这段授权规则允许用户 `user1` 在任何主机上使用 `sudo` 命令执行任何命令。 **sudo使用建议** * 使用 `sudo -` 命令可以临时切换到超级用户模式执行命令。 * 使用 `sudo -i` 命令可以节省密码输入。 * 仔细阅读 sudo 的配置文件,了解其权限。

正文

sudo 命令

1、sudo 简介

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。(百度百科)

su 命令

su是最简单的身份切换命令,一般都是su - username,然后输入password就ok了,root用su至其他用户无须密码;但非root用户切换时需要密码。切换到root可以使用su -和su - root。

  • 切换用户的方式:
    su UserName:非登录式切换,即不会读取目标用户的配置文件
    su - UserName:登录式切换,会读取目标用户的配置文件;完全切换
  • 换个身份执行命令:
    su [-] UserName -c ‘COMMAND’
    选项:
    -l:“su -l UserName”相当于“su - UserName”
    -c: 仅执行一次命令,而不切换用户身份

2、sudo的特性

  • sudo 能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo 可以提供日志,记录每个用户使用sudo操作,以便于日后审计
  • sudo 为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
  • sudo 默认存活期为5分钟

编辑配置文件的方式

  • # sudoedit /etc/sudoers
  • # vim /etc/sudoers
  • # visudo
    visudo –c 命令具有语法检查功能,和crontab -e编辑后退出检查语言功能类似。

3、sudo相关文件

配置文件: /etc/sudoers, /etc/sudoers.d/
时间戳文件: /var/db/sudo
日志文件: /var/log/secure
配置文件支持使用通配符glob:

? :任意单一字符
* :匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]*

    配置文件规则有两类

    • 别名定义:不是必须的,别名必须全部而且只能使用大写英文字母的组合
    • 授权规则:必须的
    • 用户别名
      sudo 命令_linux

    4、sudo语法

    • who which_hosts=(runas) command
      被管理主机地址【访问主机】
      允许哪一个用户,执行某一条命令在哪一台主机上
      谁(who)能够以哪个用户(runas)的身份通过什么主机(which host)执行什么命令(command)

    user: 运行命令者的身份
    host: 通过哪些主机
    (runas): 以哪个用户的身份
    command: 运行哪些命令

    sudo 命令_linux_02

    • sudo授权示例
      sudo 命令_sudo_03
      user1 ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod
    • 常用的标签
      PASSWD:执行被授权的命令之前,必须输入密码进行身份验证
      NOPASSWD:执行被授权的命令之前,无需输入密码进行身份验证
      注意:PASSWD、NOPASSWD等标签只能在授权项中使用,不能在别名中使用

    5、sudo命令

    sudo -u centos 切换身份
    -V 显示版本信息等配置信息 
    -u user 默认为root 
    -l  列出当前用户可以使用的所有sudo命令
    -v 再延长密码有效期限5分钟,更新时间戳 
    -k  认证信息失效,清除时间戳(1970-01-01),下次需要重新输密码 
    -b 在后台执行指令 
    

      6、总结

      • su方式切换是须要输入目标用户的password。而sudo仅仅须要输入自己的password,所以sudo能够保护目标用户的password不对外泄漏。
      • sudo授权时passwd,su,sudo,sudoedit,visudo等具有特殊意义的命令时,务必要考虑全面(例如禁止修改root用户的密码等操作)。
      • 仔细看了sudo的配置文件发现sudo的which_hosts表示允许哪一个IP地址或网络访问当前主机,这种说法不对。通常能用到这个参数的场景不多,一般在有NIS服务或集中管理的时候,其实就是管理所有主机的管理策略在一台主机上编辑sudoers这个文件,然后将它推到所有主机。

      man帮助文件显示该参数的正确含义:
      #jack可以运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码因为是本地主机地址,而最后一个必须匹配掩码因为是网络地址。
      jack CSNETS = ALL
      #lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
      lisa CUNETS = ALL
      sudo 命令_linux_04

      su、sudo、sudo su、sudo -i的用法和区别

      sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
      su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
      sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。

      sudo -i 直接运行sudo命令加-i参数
      sudo su 运行sudo命令给su命令提权,运行su命令。
      sudo -i 运行结果 PWD=/root
      sudo su 运行结果 PWD=/home/用户名(当前用户主目录)
      


        su root 输入root密码后切换之root用户但是pwd目录不变

        su - root 输入root密码后切换之root用户但是pwd目录/root

        sudo 一般加的是命令

        sudo -i root与sudo - root、sudo -i ,sudo - ,sudo root效果相同 提示输入密码时该密码为当前账户的密码 要求执行该命令的用户必须在sudoers中才可以 su需要的是切换后账户的密 用法为“su 账户名称”

        sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
        su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
        sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。 要求执行该命令的用户必须在sudoers中才可以

        sudo -i 直接运行sudo命令加-i参数    要求执行该命令的用户必须在sudoers中才可以
        sudo su 运行sudo命令给su命令提权,运行su命令。 要求执行该命令的用户必须在sudoers中才可以
        sudo -i 运行结果 PWD=/root
        sudo su 运行结果 PWD=/home/用户名(当前用户主目录) 
        
          文章知识点与官方知识档案匹配,可进一步学习相关知识
          云原生入门技能树首页概览10622 人正在系统学习中

          与[转帖]sudo 命令_su、sudo、sudo su、sudo -i的用法和区别相似的内容:

          [转帖]012 Linux 搞懂用户权限升级 (sudo 和 su),包学会

          https://my.oschina.net/u/3113381/blog/5431540 Linux 系统中 root 账号通常用于系统的管理和维护,对操作系统的所有资源具有访问控制权限,当一个普通用户希望执行一些系统维护相关的操作的时候,就需要使用 sudo 命令,临时将该用户的权限提升到 ro

          [转帖]linux中关于带宽 MTU的一些命令

          linux中关于带宽 MTU的一些命令 https://blog.51cto.com/xiaoliuer/1882208 查看协商的带宽大小 sudo ethtools eth0 Linux更改网卡MTU方法: 1. 打开终端,查看当前网卡设置:ifconfig 2. 对需要改MTU的网卡进行设置(

          [转帖]Linux内核信息相关命令:dmesg

          https://bbs.huaweicloud.com/blogs/381167 【摘要】 在Linux 操作系统中,dmesg命令来显示与内核相关的消息,dmesg 命令提供了许多不同的消息,比如与消息相关的存储、模块、中断等。作为提供信息的底层工具,dmesg 命令需要root 权限,sudo

          [转帖]Systemd 指令

          一、由来 历史上,Linux 的启动一直采用init进程。 下面的命令用来启动服务。 $ sudo /etc/init.d/apache2 start# 或者$ service apache2 start 这种方法有两个缺点。 一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下

          [转帖]Linux小知识:sudo su和su的区别

          https://www.cnblogs.com/jiading/p/11717388.html su是申请切换root用户,需要申请root用户密码。有些Linux发行版,例如ubuntu,默认没有设置root用户的密码,所以需要我们先使用sudo passwd root设置root用户密码。 而s

          [转帖]【错误处理】Unable to init server: 无法连接: 拒绝连接

          当Linux使用 $ sudo gedit 文件路径 出现如下错误 Unable to init server: 无法连接: 拒绝连接 可更改指令,使用 $ sudo nano 文件路径 来用其他方式打开文件。 若想彻底解决,可尝试使用如下指令 $ xhost local:gedit 若出现如下报错

          [转帖]ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍

          ethtool -k < 网络接口>, ethtool --show-offload < 网络接口>, 或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0Offload parameters for eth0:rx-checksumming: ontx

          [转帖]The necessary bits to build these optional modules were not found: _uuid _bz2 _curse _curses_panel

          在安装Python3.7可能遇到如题的错误,只需安装uuid库就可以 ubuntu下安装uuid链接库 sudo apt-get install uuid-dev CentOS yum install libuuid-devel 对于以下的问题 The necessary bits to build

          【转帖】ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍

          ethtool -k < 网络接口>, ethtool --show-offload < 网络接口>, 或者可以看到很多网络接口的offload特性,例如: $ sudo ethtool -k eth0Offload parameters for eth0:rx-checksumming: ontx

          [转帖]Linux系统NVME盘分区和挂载

          https://www.jianshu.com/p/04327f1b97cb 查看系统里面识别到的硬盘和分区的信息 $ sudo fdisk -l Disk /dev/nvme1n1: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Units: s