linux 命令 sudo、su 命令

news2024/11/23 9:20:32

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命令。

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

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

相关文章

C++中类的静态成员、存储、this、友元和运算符重载

静态成员 在类定义中&#xff0c;它的成员&#xff08;包括成员变量和成员函数&#xff09;&#xff0c;这些成员可以用关键字static 声明为静态的&#xff0c;称为静态成员。 不管这个类创建了多少个对象&#xff0c;静态成员只有一个拷贝&#xff0c;这个拷贝被所有属于这个…

搜索百度可以直接生成代码拉

先看效果图&#xff1a; 使用示例&#xff1a; 比如我要搜索“JS取一个数在两个数更近”的方法&#xff0c;直接搜“JS取一个数在两个数更近”&#xff0c;点击百度一下&#xff0c;就会出现想要的代码&#xff0c;如上图。

网站频频告警故障排查实录

故障描述 位于某Proxmox VE超融合集群上的一个网站频频报警&#xff0c;表现的形式是一会儿服务不可用&#xff0c;一会儿又恢复&#xff08;如下图所示&#xff09;&#xff0c;但同一集群上的其他Web站点未发现异常。 可能的原因 1&#xff09;出口带宽占满。 2&#xff09;…

【技巧】Excel表格如何退出“只读方式”?

如果Excel表格被设置了“只读模式”&#xff0c;那每次打开Excel都会出现对话框提示是否以“只读方式”打开&#xff0c;并且以“只读方式”打开的Excel&#xff0c;如果进行更改是无法保存原文件的。那要如何退出“只读方式”呢&#xff1f; 首先&#xff0c;我们要看下Excel表…

【数据结构】顺序表---C语言版

【数据结构】顺序表 前言&#xff1a;一、线性表二、顺序表1.顺序表的概念及结构&#xff1a;2.顺序表的分类&#xff1a;3.顺序表缺陷&#xff1a; 三、顺序表的代码实现&#xff1a;1.头文件&#xff1a;2.函数文件&#xff1a;3.测试文件&#xff1a; 四、顺序表的相关OJ题&…

私域成交的方式---朋友圈成交

朋友圈不止是生活&#xff0c;也是工作营销的很好场所。朋友圈成交也就是私域成交中养客户成交。和之前的微商相似&#xff0c;微商就是在朋友圈发内容&#xff0c;引起客户的兴趣&#xff0c;再转到1对1私聊进行成交。 适合产品&#xff1a;所有的产品都适合&#xff0c;不管…

Python实现艺术设计?提取图片中颜色并绘制成可视化图表,从大师作品中提取配色方案

文章目录 导入模块并加载图片提取颜色并整合成表格绘制图表实战环节关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠…

android基于UDP实现聊天小功能

一、DatagramSocket DatagramSocket 是 Java 中用于发送和接收 UDP 数据包的类。它提供了创建和管理 UDP 套接字的功能。以下是 DatagramSocket 类的一些常用方法&#xff1a; DatagramSocket(): 创建一个未绑定到特定本地地址和端口的 DatagramSocket 实例。 DatagramSocket…

普乐蛙绵阳科博会一场VR科普航天科学盛宴科普知识

普乐蛙绵阳科普展&#xff1a;一场科学盛宴&#xff0c;点燃孩子探索欲望的火花! 普乐蛙绵阳科普展正在如火如荼地进行中&#xff0c;吸引了无数孩子和家长的热情参与。这场科普盛宴以独特的内外视角&#xff0c;让人们感受到科学的魅力&#xff0c;激发了孩子们对知识的渴望和…

蚁剑低版本反制

蚁剑低版本反制 漏洞概述 中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。影响范围 AntSword <2.0.7 蚁剑实验版本&#xff1a;2.0.7 环境搭建&#xff1a; 172.16.1.233&#xff08;蓝队服…

如何在 Photoshop 中制作金像

如何使用渐变贴图和一些鲜为人知的 Photoshop 图像效果在 Photoshop 中制作金像 1. 如何为图像添加噪点 步骤 1 首先&#xff0c;将“颜色填充”图层设置为淡蓝色 #a9c9dd 颜色。 步骤 2 接下来&#xff0c;让我们右键单击>创建智能对象&#xff0c;以防万一我们以后想要…

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景&#xff1a; 根据查询条件将列表数据导出&#xff0c;并筛选出满足某个条件的数据&#xff0c;将满足条件的数据的背景颜色设置成黄色。 &#xff08;本文例子如&#xff1a;name出现的次数大于等于2&#xff0c;将相关数据背景颜色都设置为黄色&#xff09; …

代码签名证书是如何保护软件?

随着互联网的普及和技术的发展&#xff0c;软件开发已经成为了一个非常重要的行业。然而&#xff0c;软件安全问题也日益凸显&#xff0c;恶意软件、病毒、木马等威胁着用户的数据安全和隐私。为了确保软件的安全和可靠性&#xff0c;开发者需要采取一系列措施来保护他们的产品…

在线教育行业内卷突围,持续激活平台用户体验是关键

在线教育并不等同于K12教育。 众所周知&#xff0c;越来越卷的考试制度&#xff0c;已经被家长、学生们的谩骂和吐槽淹没了好几层。各种减负、杜绝课后补课等条例纷纷出台&#xff0c;不断的挤压着K12教育企业的生存空间。 于是乎&#xff0c;大家都认为&#xff0c;在线教育…

笔记62:注意力汇聚 --- Nadaraya_Watson 核回归

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章&#xff1a;动手学深度学习~注意力机制 a a a a a a a a a a a a a a a a

一键换肤功能

使用css3的css变量来实现 示例&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&qu…

好用的IDEA插件推荐

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…

使用opencv的matchTemplate进行银行卡卡号识别

![字体文件](https://img-blog.csdnimg.cn/3a16c87cf4d34aceb0778c4b20ddadb2.png#pic_center import cv2 import numpy as npdef show_img(img, name"temp"):img cv2.resize(img, (0, 0), fx3, fy3)cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()de…

Windows10-用户账户控制、Windows远程桌面

Windows10用户账户控制怎么设置白名单 问题引出&#xff1a; 安装低版本搜狗输入法后经常弹出用户账户控制 解决方案&#xff1a; 全局模式&#xff1a; UAC控制最早出现在Windows Vista中&#xff0c;用户帐户控制&#xff08;UAC&#xff09;是一项旨在防止对您的计算机…

2024年进入-1/12的世界

1.从一段与AI的对话开始 cj: 1234...无限的&#xff0b;下去结果是无穷大吗&#xff1f; chatgpt: 是的&#xff0c;从常规的数学观点来看&#xff0c;级数 1234… 无限相加的结果是正无穷。 这是因为每一项都是正数&#xff0c;并且随着项数的增加&#xff0c;部分和会趋近…