在最爱的秋天学习 linux 之 su 和 sudo

这篇具有很好参考价值的文章主要介绍了在最爱的秋天学习 linux 之 su 和 sudo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开开心心享受生活,没事学学 Linux

  • su:是 linux 切换用户的命令
    • linux 在切换用户的时候,不需要像 windows 一样先注销当前用户才可以切换到另一个用户
    • 直接使用 su 命令就可以切换,并且使用 exit 命令就能退出当前用户,返回到登录前的用户
  • sudo:是 linux 普通用户临时提权时需要带上的命令

你好,su

  • 先说一个冷知识:
    • root 用户使用 su 命令切换到其他普通用户不需要输入密码
    • 普通用户使用 su 命令切换到其他普通用户和 root 用户都是需要输入密码的
  • 再说一个冷知识:
    • 如果一个用户被分配了 /sbin/nologin 这种 shell 时,他是不能被登录的,但是这个用户可以启动有自己权限的服务
  • 最后一个冷知识:
    • su - <username>su <username> 是有区别的
    • su - <username> 表示完全登录到指定的用户,会把 env 命令的变量切换成登陆后的用户
    • su <username> 不会把 env 命令的变量切换成登陆后的用户,而是沿用切换前用户的 env 变量
  • 冷知识结束了,su 的使用也就差不多了
  • 下面使用到的用户需要自己提前创建,或者使用自己已有的用户来验证
  • 下面的命令解答:
    • su - azureray 表示使用登录的方式切换到 azureray 这个用户
    • -c "env" 表示不进入到用户的终端来执行命令
    • grep 'PATH' 表示过滤 PATH 这个字段
su - azureray -c "env" | grep 'PATH'

同上,区别在于有没有带 - ,通过 env 命令获取的内容,过滤 PATH 来比较之间的差异

su azureray -c "env" | grep 'PATH'

你好,sudo

  • 使用 visudo 命令的本质是调用 vi 命令去编辑 /etc/sudoers 文件,但是会把 /etc/sudoers 文件变成只读模式
  • 如果再次使用 visudo 命令,会返回:visudo: /etc/sudoers busy, try again later
  • 如果直接使用 vim /etc/sudoers 命令,当编辑文件时,会提示:W10: Warning: Changing a readonly file

关于 /etc/sudoers 文件

四个 Alias

/etc/sudoers 文件里面的三个 alias 可以理解成一个管理组,这样,在给不同用户配置相同权限的时候,可以直接分配给 alias 定义的名字

  • Host_Alias主机别名
  • User_Alias用户名别名和组名别名(组名前面要带上%)
  • Runas_Alias指定以哪个用户或用户组的权限执行命令的别名
  • Cmnd_Alias命令别名
Defaults

sudo 环境的一些默认配置,这块比较复杂,也比较深,有兴趣可以查阅官方的说明书

  • 这里解释一下配置文件自带的 Defaults
    • Defaults !visiblepw阻止 sudo 命令在终端中显示用户输入的密码
    • Defaults always_set_homesudo 命令在以其他用户身份执行命令时总是设置目标用户的家目录(home directory)作为当前工作目录
    • Defaults match_group_by_gidsudo 命令在执行匹配用户组时,将组名替换为组的 GID(组标识符)
    • Defaults always_query_group_pluginsudo 命令始终查询外部组插件来确定用户是否属于特定用户组,而不是仅依赖于本地组信息
    • Defaults env_resetsudo 命令在执行时重置用户的环境变量,以仅允许用户使用特定的环境变量
    • Defaults env_keep =指定要保留的环境变量,这些环境变量将在用户执行 sudo 命令时保持不变
    • Defaults env_keep +=指定要保留的环境变量,并将它们追加到已存在的环境变量列表中
    • Defaults secure_path用于指定安全的 PATH 环境变量,以确保在用户执行 sudo 命令时,只有受信任的目录包含在 PATH 中
  • 一些其他好用的 Defaults
    • Defaults log_inputDefaults log_output:可以用于记录 sudo 命令的输入和输出,以便审计
    • Defaults logfile指定日志文件
      • Defaults log_host, log_year, logfile指定日志文件的同时,将主机名和四位数年份信息记录到日志内
    • Defaults editor:指定用于编辑 sudo 临时文件的文本编辑器,需要写 vim 命令的绝对路径
sudo 授权配置语法

USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS

  • USER/GROUP表示需要被授权的用户名(或者 User_Alias)或者用户组名,如果是组则需要以 % 开头
    • 用户名别名要用 User_Alias 定义的
  • HOST表示允许从哪些主机登录的用户运行 sudo 命令,ALL 表示允许从任何终端、机器访问
  • (USER [:GROUP])表示使用 sudo 可切换的用户或者组,组可以不指定,ALL 表示可以切换到系统的所有用户
    • 用户名别名要用 Runas_Alias 定义的
  • NOPASSWD如果指定,则该用户或组使用 sudo 时不需要输入密码
  • COMMANDS表示指定可以使用 sudo 来提权的命令,ALL 表示所有命令,要使用绝对路径

搞一下不就知道了

配置 sudo

创建普通用户

useradd azureray
useradd wings

配置 sudo 文件

visudo
  • wheel 组是默认自带的,这里就不作修改了
  • root 用户也是默认自带的,这里也不作修改
  • Defaults 也都是遵顼的默认配置,没有修改过
# 定义一个别名叫 DOTA,里面包含了 azureray 和 wings 两个用户
User_Alias DOTA = azureray, wings
# 定义一个别名叫 SYSTEM,里面包含了 systemctl,chown,chmod,yum 这几个命令
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/chown, \
                    /usr/bin/chmod, /usr/bin/yum
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    editor = /usr/bin/vim
root    ALL=(ALL)       ALL
# 用户用别名 DOTA
# 使用的命令用别名 SYSTEM
# NOPASSWD 表示 sudo 命令不需要输入密码
DOTA ALL=(ALL) NOPASSWD: SYSTEM
%wheel  ALL=(ALL)       ALL

如果不生效,可以退出终端,重新连接来生效

免密切换到 root 用户
  • 在没有配置的情况下,如果 sudo 用户使用 sudo -i 切换到 root 用户会报错:Sorry, user xxx is not allowed to execute '/bin/bash' as root on localhost.localdomain.

指定 wings 用户,指定 /bin/bash 命令,随后再切换到 wings 用户,就可以使用 sudo -i 命令来免密切换到 root 用户

wings ALL=(ALL) NOPASSWD: /bin/bash

当然,这是一个比较危险的操作,还是不建议把 /bin/bash 配置到命令里面

查看当前 sudo 命令范围
sudo -l

会返回所有的 Defaults 的配置和可用的命令,因为我没有配置主机名,这里显示的是 localhost

Matching Defaults entries for wings on localhost:
    !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

User wings may run the following commands on localhost:
    (ALL) NOPASSWD: /usr/bin/systemctl, /usr/bin/chown, /usr/bin/chmod, /usr/bin/yum
sudo 审计日志

日志路径和日志文件名称

Defaults    logfile = /root/.sudo.log

wings 用户使用 sudo 操作后的记录,也会记录用户在哪个路径下操作的什么命令

Nov  2 21:39:10 : wings : TTY=pts/0 ; PWD=/home/wings ; USER=root ;
    COMMAND=/bin/systemctl disable firewalld

指定日志文件的同时,将主机名和四位数年份信息记录到日志内

Defaults    log_host, log_year, logfile = /root/.sudo.log
  • 时间后面多了年份
  • 用户后面多了 HOST
Nov  2 21:40:52 2023 : wings : HOST=localhost : TTY=pts/0 ; PWD=/home/wings ;
    USER=root ; COMMAND=/bin/systemctl disable firewalld
使用子配置文件的方式
  • 创建一个名字为 system 的文件,配置文件内容和上面的是一致的,也删除了原来配置文件里面的内容了
  • Defaults editor = /usr/bin/vim 写在主配置文件里面,这样,后续的子配置文件都会生效
  • 以后就可以修改 User_AliasCmnd_Alias 就能针对对应的用户生效了
cat << EOF > /etc/sudoers.d/system
# 定义一个别名叫 DOTA,里面包含了 azureray 和 wings 两个用户
User_Alias DOTA = azureray, wings
# 定义一个别名叫 SYSTEM,里面包含了 systemctl,chown,chmod,yum 这几个命令
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/chown, \
                    /usr/bin/chmod, /usr/bin/yum
# 不同的 sudo 子配置文件,可以配置不同的日志路径和日志文件名称,方便审计
Defaults    log_host, log_year, logfile = /root/.sudo_system.log
# 用户用别名 DOTA
# 使用的命令用别名 SYSTEM
# NOPASSWD 表示 sudo 命令不需要输入密码
DOTA ALL=(ALL) NOPASSWD: SYSTEM
EOF

sudo 要求配置文件的权限必须是 0440,不修改的话,校验配置文件会返回:/etc/sudoers.d/system: bad permissions, should be mode 0440

chmod 0440 /etc/sudoers.d/system

校验配置文件

visudo -c

返回都是 ok 就可以了文章来源地址https://www.toymoban.com/news/detail-740197.html

/etc/sudoers: parsed OK
/etc/sudoers.d/system: parsed OK

到了这里,关于在最爱的秋天学习 linux 之 su 和 sudo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux——系统安全及应用(账号安全、su命令、PAM认证、sudo命令、开关机安全机制、系统弱口令检测、NMAP)

    文件无法被修改的原因:权限不够或者账号被锁住了 设置密码有效期 闲置600秒后自动注销 用途:Substitute User,切换用户 格式:su - 目标用户 root-任意用户,不验证密码 普通用户-其他用户,验证目标用户的密码 将允许使用su命令的用户加入wheel组 启用pam_wheel认证模块 [root@

    2024年01月23日
    浏览(51)
  • Linux系统知识4—Linux的root用户,su 和 exit 命令,sudo 命令,用户和用户组管理,getent,查看权限控制,修改权限控制 -chmod,修改权限控制-chown

    目录 一.Linux的root用户 1.1 root用户(超级管理员) 1.2 su 和 exit 命令 1.3 sudo 命令 1.为普通用户配置 sudo 认证 二.用户和用户组管理 2.1用户,用户组 2.2用户组的管理 2.3用户管理 2.4.getent 三.查看权限控制 3.1认知权限信息 1.序号1,表示文件,文件夹的权限控制信息 2. 序号2,表

    2024年01月17日
    浏览(68)
  • 【简单理解】ubuntu中的sudo和su

    参考: https://blog.csdn.net/liberty12345678/article/details/87686284 https://cloud.tencent.com/developer/article/1721753 1.su为switch user,即切换用户的简写。 2.su的两种格式 3.如果不指定用户名,默认为 root 所以切换到root的身份的命令即为: 4.root用su切换到其它身份的时候是不需要输入密码的 1.sudo允

    2024年02月05日
    浏览(31)
  • HR:面试官最爱问的linux问题,看看你能答对多少

    本文介绍了Linux系统的常见面试题,主要包括文件系统管理、环境配置、进程管理、系统资源使用情况、网络设置、任务调度器、软件包管理和系统日志查看,希望对你有所帮助。当然,在面试中,你可能会遇到更多针对具体工作和岗位的问题,要做好充分准备。祝你面试成功

    2023年04月16日
    浏览(33)
  • Linux运维学习笔记

    此笔记为学习https://www.bilibili.com/video/BV1nW411L7xm/?vd_source=3f851e85e66ef33269a2eefee664cec2的学习记录,希望能找到运维的实习吖O(≧▽≦)O 目录 导航 Linux的终端 终端组成部分 Linux关机命令 使用VMware备份操作系统 快照 克隆 Linux系统的文件 文件与文件夹 Linux系统的文件目录结构 Li

    2024年02月08日
    浏览(48)
  • Linux运维监控学习笔记5

    监控项和应用集(重点) 监控项(item):监控项是从主机收集的信息。一个监控项是一个独立的子标,代表收集数据或监控的最小的单位。 应用集(applications):代表多个监控项目合成的组。 创建监控项: 1)Web管理界面-配置-主机-监控项(选择的是agent1的监控项,每个主

    2024年02月09日
    浏览(36)
  • Linux:用户切换指令su

     相关文章 Linux专栏 https://blog.csdn.net/weixin_45791458/category_12234591.html         su是一个常用的用户切换命令, 用于在不同的用户身份之间切换,下面是它的用法。          当没有指定username时,su命令默认将root当做username。su命令默认不切换工作目录到目标用户的家目录,

    2024年01月23日
    浏览(42)
  • Linux命令(93)之su

    linux命令之su linux命令su用于变更为其它使用者的身份,如root用户外,需要输入使用者的密码 su [参数] user su参数 参数 说明 -c command 执行指定的命令,然后切换回原用户 - 切换到目标用户的环境变量 命令: su -c \\\"ls /home\\\" ztj 命令: su - ztj

    2024年02月07日
    浏览(35)
  • 全面解析Linux下的su指令

    简介: 在Linux系统中,su指令是一项强大而常用的工具,用于切换用户身份以执行特定操作。本篇博客将深入剖析su指令的前世今生,详细讲解其功能、用法和相关指令,以及在实际应用中的场景和问题排查。通过通俗易懂的方式、丰富的示例和参考链接,希望能帮助读者全面

    2024年02月07日
    浏览(57)
  • linux切换root用户su - root和su root的区别

    这里说一下login shell和 no login shell的区别 通过tty客户端登陆的shell就是login shell,通过在图形界面使用ctrl+shift+t的方式新建的shell是no login shell login shell 主要读取两个配置文件/etc/profile和~/.bash_profile no login shell 读取的文件和顺序为:/etc/bashrc和~/.bashrc 不同用户初始的PATH是不一

    2024年01月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包