Linux sudo与/etc/sudoers

news2024/11/18 1:29:23

sudo介绍

  1. sudo命令可以让普通用户在执行需要超级用户权限的命令时,临时提升为超级用户。例如,普通用户可以使用sudo执行系统管理任务,如安装软件、修改系统配置等。
  2. 访问控制:sudo命令通过sudoers文件中的配置,可以对用户和用户组进行细粒度的访问控制。管理员可以指定哪些用户可以使用sudo以及可以执行哪些命令。
  3. 审计和日志记录:sudo命令可以记录用户执行的每个sudo命令,包括命令的时间、执行者和执行的命令本身。这对于安全审计和故障排除非常有用。
  4. 环境变量控制:sudo命令可以通过Defaults行中的配置,控制sudo命令执行时的环境变量。这有助于确保以root权限执行命令时,环境变量不会被滥用或篡改。
  5. 密码验证:sudo命令通常需要用户输入自己的密码来验证身份。这增加了安全性,确保只有授权的用户可以执行特权命令。
sudo apt install net-tools
sudo dmesg
sudo lshw

/etc/sudoers文件介绍

root@bsp-PowerEdge-R6525:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

  1. Defaults env_reset: 这个行指定了默认的环境变量重置规则,当用户使用sudo命令时,环境变量将被重置为默认值。
  2. Defaults mail_badpass: 这个行指定了当用户输入错误密码时,系统会发送邮件通知。
  3. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin": 这个行指定了sudo命令的安全路径,即sudo命令可以在这些路径下执行。
  4. root ALL=(ALL:ALL) ALL: 这个行指定了用户root可以在任何主机上以任何用户身份执行任何命令。
  5. %admin ALL=(ALL) ALL: 这个行指定了admin组的成员可以在任何主机上以任何用户身份执行任何命令。
  6. %sudo ALL=(ALL:ALL) ALL: 这个行指定了sudo组的成员可以在任何主机上以任何用户身份执行任何命令。
  7. #includedir /etc/sudoers.d: 这个行是一个注释,指示可以使用#include指令来包含其他sudoers文件的路径。在这个例子中,它指定了/etc/sudoers.d目录下的文件将被包含进来。

visudo修改/etc/sudoers文件

如何给用户添加sudo权限

修改/etc/sudoers
在下面添加
# User privilege specification
root ALL=(ALL:ALL) ALL

+++
arron ALL=(ALL:ALL) ALL
arron ALL=(ALL:ALL) ALL: 这个行指定了用户arron可以在任何主机上以任何用户身份执行任何命令。

添加输出密码提示

修改/etc/sudoers
+++
Defaults  badpass_message="Password is wrong, please try again"

添加重试次数

修改/etc/sudoers
+++
Defaults   passwd_tries=5 

sudo生效持续时间(默认5分钟)

timestamp_timeout Number of minutes that can elapse before sudo will ask for a passwd again. The timeout may include a fractional component if minute granularity is insufficient, for example 2.5. The default is 15. Set this to 0 to always prompt for a password. If set to a value less than 0 the user's time stamp will not expire until the system is rebooted. This can be used to allow users to create or delete their own time stamps via “sudo -v” and “sudo -k” respectively.

修改/etc/sudoers
+++
Defaults timestamp_timeout =10

等待用户输入时间

passwd_timeout Number of minutes before the sudo password prompt times out, or 0 for no timeout. The timeout may include a fractional component if minute granularity is insufficient, for example 2.5. The default is 0.

修改/etc/sudoers
+++
Defaults   passwd_timeout=2

sudo log设置

Logging

sudoers can log both successful and unsuccessful attempts (as well as errors) to syslog(3), a log file, or both. By

default, sudoers will log via syslog(3) but this is changeable via the syslog and logfile Defaults settings. See LOG

FORMAT for a description of the log file format.

Defaults@SERVERS log_year, logfile=/var/log/sudo.log

修改/etc/rsyslog.conf文件
+++
local2.debug                           /var/log/sudo.log

修改/etc/sudoers
+++
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog

创建日志文件
touch /var/log/sudo.log
systemctl restart rsyslog

su介绍

su命令是在Unix和类Unix系统上使用的命令,用于切换用户身份。下面是su命令的一些常见用法和功能:

1. 切换用户:su命令可以让当前用户切换到另一个用户的身份,例如从普通用户切换到root用户。默认情况下,su命令会切换到root用户,但也可以指定其他用户。

2. 执行命令:su命令可以在切换用户后,直接执行命令。例如,可以使用su命令切换到root用户,然后执行需要root权限的命令。

3. 环境变量:su命令可以在切换用户时,保留原用户的环境变量。这对于需要在新用户身份下执行命令,但需要使用原用户的环境变量的情况非常有用。

4. 密码验证:su命令通常需要用户输入目标用户的密码来验证身份。这增加了安全性,确保只有授权的用户可以切换到目标用户的身份。

su命令用法:

1. 切换到root用户:

```

su

```

执行上述命令后,系统会提示输入root用户的密码。输入密码后,即可切换到root用户身份。

2. 切换到其他用户:

```

su username

```

执行上述命令后,系统会提示输入目标用户的密码。输入密码后,即可切换到目标用户身份。

3. 切换并执行命令:

```

su -c "command"

```

执行上述命令后,系统会提示输入root用户的密码。输入密码后,系统会以root用户身份执行指定的命令。

4. 切换并保留原用户的环境变量:

```

su -m username

```

执行上述命令后,系统会提示输入目标用户的密码。输入密码后,系统会切换到目标用户身份,并保留原用户的环境变量。

5. 切换并指定shell:

```

su -s /bin/bash username

```

执行上述命令后,系统会提示输入目标用户的密码。输入密码后,系统会切换到目标用户身份,并使用/bin/bash作为shell。

root@admin:/home# adduser arron-build
Adding user `arron-build' ...
Adding new group `arron-build' (1010) ...
Adding new user `arron-build' (1010) with group `arron-build' ...
Creating home directory `/home/arron-build' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for arron-build
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] 
root@admin:/home# 
root@admin:/home# 
root@admin:/home# 
root@admin:/home# 
root@admin:/home# visudo 
root@admin:/home# 
root@admin:/home# su arron-build
arron-build@admin:/home$

su和sudo区别

1. su命令需要目标用户的密码,而sudo命令需要当前用户的密码。使用su命令切换到目标用户身份时,需要输入目标用户的密码。而使用sudo命令执行需要root权限的命令时,需要输入当前用户的密码。

2. su命令切换到目标用户身份后,会保留原用户的环境变量。而sudo命令执行命令时,默认情况下会清除原用户的环境变量,只保留少量的安全环境变量。

3. su命令切换到目标用户身份后,会一直保持该身份,直到使用exit命令退出。而sudo命令执行完命令后,会自动返回原用户身份。

4. su命令需要使用root用户或具有sudo权限的用户才能使用。而sudo命令只需要当前用户具有sudo权限即可使用。

总的来说,sudo命令更加灵活和安全,因为它只需要输入当前用户的密码,而且执行命令时会清除大部分环境变量,从而减少了潜在的安全风险。但是,在需要长时间使用root权限的情况下,su命令更加方便,因为它可以一直保持目标用户身份,而不需要反复输入密码。

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

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

相关文章

企业软件项目成果-图像识别

下面图像识别仅仅使用了OpenCV库而已,并没有涉及深度学习、机器学习。 整盘样本的拍照识别结果(识别准确率达100%): 宫颈刷图像识别的测试结果(识别准确率达100%):

基于51单片机的智能烘干机设计

基于51单片机的智能烘干机设计[proteus仿真] 温湿度检测系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的智能烘干机设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2¥&#x…

基于springboot在线学习平台源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台的网络应用,在外国学习平台已经是很普遍的方式,不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台采用ja…

jetson-inference----docker内运行分类任务

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 文章目录 系列文章目录前言一、进入jetson-inference的docker二、分类任务总结 前言 继jetson-inference入门 一、进入jetson-inference的docker 官方运行命令 进入jetson-inference的docker d…

C++PythonC# 三语言OpenCV从零开发(2):教程选择

文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程: OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …

使用Ollama本地部署大模型

Ollama 是一个简明易用的本地大模型运行框架,目前已经有 32 K star。随着围绕着 Ollama 的生态走向前台,更多用户也可以方便地在自己电脑上玩转大模型了,使用 Ollama 本地部署大模型在 mac 上尤其简单 GitHub地址:https://github…

[每日一题] 01.25 - 子数整数

子数整数 k int(input()) flag False for i in range(10000,30001):a,b,c [int(str(i)[j:j 3]) for j in range(3)]if a % k 0 and b % k 0 and c % k 0:print(i)flag Trueif not flag:print(No)

文旅AI交互数字人,提升景区数字化导览服务体验

随着数字化的普及,文化旅游逐渐走向数字化,通过数字人技术手段对文化旅游资源进行整合与开发。 AI交互数字人可以部署于交互式终端设备和移动端,可以为游客提供“面对面”的语音交互,提供路径规划、游览路线推荐、景点讲解等服务&…

[小程序]页面跳转

一、页面跳转 1.声明式导航 使用<navigate>组件实现&#xff08;固定式&#xff09;&#xff0c;需要指定url属性(跳转位置)和open-type属性(跳转方式) ①跳转tabBar页面 open-type属性必须指定类型为switchTab <navigator url"/pages/index/index" open-t…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

将本地项目打包成docker镜像的流程

前置条件&#xff1a; docker 守护进程已经开启 Python3 项目已经编写完成&#xff0c;且可以在本地正常运行 生成docker images 生成项目需引用的包 pip freeze > requirements.txt 确认目录结构配置dockerfile FROM python:3.9.6#代码添加当前目录所有内容到code文件…

无限学模式-“科研创新的加速器:全面掌握ChatGPT,推动研究方法和工作模式现代化!“

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

前端面试题:topK算法

当面试官问你&#xff0c;在不考虑数字越界的情况下&#xff0c;有1亿条搜索数据&#xff0c;让你从中找到前100条频率高的数据你会怎么实现&#xff1f; 当时&#xff0c;我的第一印象是把数据分组&#xff0c;分别求前多少条&#xff1f;但是没法保证每组的前100条或者多少条…

jQuery语法遍历(过滤)

1、.eq&#xff08;&#xff09;: 减少匹配元素的集合为指定的索的哪一个元素。&#xff08;定位一个元素&#xff09; 法一 <script> $(document).ready(function(){ $("li").eq(1).css("background","red"); …

蓝桥杯备赛 week 1 —— DP 背包问题

目录 &#x1f308;前言&#x1f308;&#xff1a; &#x1f4c1; 01背包问题 分析&#xff1a; dp数组求解&#xff1a; 优化&#xff1a;滚动数组&#xff1a; &#x1f4c1; 完全背包问题 &#x1f4c1; 总结 &#x1f308;前言&#x1f308;&#xff1a; 这篇文章主…

在使用springboot框架式的的script无法通过${}来获取值

今天使用springboot框架做项目&#xff0c;想着来实现一下搜索的下拉框回显功能&#xff0c;然后就一直在报错误&#xff0c;关键是报的错误牛头不对马嘴&#xff0c;检查了一下后端代码&#xff0c;发现没什么问题&#xff0c;就把目光聚焦了.jsp页面的代码 <script type&…

shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章&#xff1a; 6.shared_ptr与unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p6&vd_sourcea934d7fc6f47698a29dac90a922ba5a3我的往期文章&#xff1a; 独占指针&#xff1a;unique_ptr 与 函数调用-CSDN博客https://blog.csdn.n…

长度计算方法----sizeof与strlen的对比

sizeof sizeof是用来计算内存大小的一种操作符&#xff0c;它只计算内存的大小&#xff0c;无论内存中存放的是什么类型的数据。 单位&#xff1a;字节 举例&#xff1a; #inculde <stdio.h> int main() {int a 10;printf("%d\n", sizeof(a));//a的括号可…

API、DOM、获取元素、事件、文本节点、属性操作

单线程 进程 cpu 资源分配的最小单位一个进程可以有多个线程 线程 cpu调度的最小单位线程建立在进程的建立基础上的一次程序的运行单位 线程分为&#xff1a;单线程 多线程 单线程&#xff1a;js是单线程 &#xff08;同一个时间只能完成一个任务&#xff09;多线程&…

SRPC 框架服务端源码解析

0. RPC Context 保存某些必要的上下文信息&#xff1b; 某端独有功能&#xff1a;Client 获取请求成功或失败 1. RPCBuffer const 和 constexpr 变量的主要区别是&#xff1a;const 变量的初始化可以被推迟到运行期&#xff0c;constexpr 必须在编译期初始化&#xff1b;所…