su和sudo之间的区别以及如何在Linux中配置sudo

Linux系统比任何对手都要安全得多。在Linux中实现安全性的一种方式是用户管理策略,用户权限和普通用户无权执行任何系统操作。

如果普通用户需要执行任何系统更改,则需要使用' su '或' sudo '命令。

 - 本文更适用于基于Ubuntu的发行版,但也适用于大多数流行的Linux发行版。

'su'对比'sudo'

su '强制您将root密码分享给其他用户,而' sudo '则可以在不使用root密码的情况下执行系统命令。'sudo '可让您使用自己的密码执行系统命令,例如,无需root密码即可授权系统责任。

什么是'sudo'?

sudo '是一个根二进制setuid,代表授权用户执行root命令,用户需要输入自己的密码才能执行系统命令,然后执行' sudo '。

谁可以执行'sudo'?

我们可以运行' / usr / sbin / visudo '来添加/删除可以执行' sudo ' 的用户列表。

$ sudo / usr / sbin / visudo

/ usr / sbin / visudo '文件的屏幕截图如下所示:

须藤名单看起来像下面的字符串,默认情况下:

根ALL =(ALL)ALL

注意:您必须是root用户才能编辑/ usr / sbin / visudo文件。

授予sudo访问权限

在许多情况下,系统管理员,特别是新的领域找到字符串“root ALL=(ALL) ALL ”为他人这可能是可能非常有害的模板,并授予不受限制的访问。

编辑“ /usr/sbin/visudo’”文件类似下面的模式可能真的是很危险,除非你相信所有列出的用户完全。

root ALL=(ALL) ALL
adam ALL=(ALL) ALL
tom ALL=(ALL) ALL
mark ALL=(ALL) ALL

sudo的参数

正确配置的'sudo '非常灵活,需要运行的命令数量可以精确配置。

配置好的 ' sudo '行的语法是:

User_name Machine_name=(Effective_user) command

以上语法可以分为四个部分:

  1. User_name:这是' sudo '用户的名称。
  2. Machine_name:这是主机名,其中' sudo '命令有效。当你有很多主机时很有用。
  3. (Effective_user):允许执行命令的'有效用户'。此列允许您允许用户执行系统命令。
  4. Command:用户可以运行的命令或一组命令。

一些情况,以及他们相应的' sudo '行:

Q1。你有一个用户mark,它是一个数据库管理员。您应该只为他提供数据库服务器(beta.database_server.com)上的所有访问权限,而不是任何主机上的访问权限。

对于上述情况,' sudo '行可以写为:

mark beta.database_server.com=(ALL) ALL

Q2。 你有一个用户' tom ',该用户应该在上面Explained的同一个数据库服务器上以root用户身份执行系统命令。

对于上述情况,' sudo '行可以写为:

mark beta.database_server.com=(tom) ALL

Q3。你有一个sudo用户'cat ',它应该只运行命令'dog '。

为了实现上述情况,我们可以将'sudo'写为:

mark beta.database_server.com=(cat) dog

Q4。如果用户需要被授予几个命令会怎么样?

如果用户应该运行的命令的数量在10以下,我们可以将所有命令放在一起,它们之间有空格,如下所示:

mark beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3 ...

如果这个命令列表变化到了范围内,那么根本无法手动输入每个命令,我们需要使用aliases。别名!是Linux实用程序,其中一个长长的命令或一个命令列表可以被称为一个小而简单的关键字。

几个alias例子,它可以代替“条目来使用sudo 配置文件。

User_Alias ADMINS=tom,jerry,adam
user_Alias WEBMASTER=henry,mark
WEBMASTERS WEBSERVERS=(www) APACHE
Cmnd_Alias PROC=/bin/kill,/bin/killall, /usr/bin/top

可以指定一个代替用户的系统组(System Groups),属于该组,后缀只是后缀' %',如下所示:

%apacheadmin WEBSERVERS=(www) APACHE

Q5。如何在不输入密码的情况下执行' sudo '命令?

我们可以通过使用' NOPASSWD '标志来输入' sudo '命令而不用输入密码。

adam ALL=(ALL) NOPASSWD: PROCS

在这里,用户' adam '可以在“ PROCS ” 下执行aliased所有命令,而无需输入密码。

与“ su ” 相比,“ sudo ”为您提供了一个强大且安全的环境,并且具有很大的灵活性。而且“ sudo ”配置很容易。一些Linux 发行版默认启用了“ sudo ”,而今天的大多数发行版都需要您将其作为安全措施(Security Measure.)启用。

要将用户(bob)添加到sudo,只需以root身份运行以下命令。

adduser bob sudo

OK,张大发就先说到这儿。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

如何学python 第十九课 文件操作

今天我们来说说文件操作。文件操作在程序编写里有着举足轻重的作用。文件操作,主要包含文件的输入和输出。学会了文件操作,就可以写出更符合实际需求的脚本。 我会先介绍...

383110
来自专栏c#开发者

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方...

51880
来自专栏陈满iOS

iOS下载报错:App Transport Security has blocked a cleartext HTTP

以上方法虽然解决了HTTP不能正常使用的问题,但是苹果提供的安全保障也被关闭了,对于不支持HTTPS协议的网站,可以考虑白名单:

43540
来自专栏个人分享

HBase体系结构

HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器(HRegion Service)群和HBase Master服务器(HBase M...

18130
来自专栏java学习

面试题13(一个具有生命的线程有哪些状态)

考点:考察求职者对线程的理解 出现频率:★★★ 【面试题解析】线程的状态表示线程在某时间段内进行的活动和将要进行的任务程有创建、就绪、运行、阻塞、死亡5种状态。...

34550
来自专栏IT可乐

Java 多线程详解(五)------线程的声明周期

Java 多线程详解(一)------概念的引入:https://cloud.tencent.com/developer/article/1012542 Jav...

22550
来自专栏码洞

天下无难试之HTTP协议面试刁难大全

小编是一个非典型面试官,对于HTTP协议的第一个问题,一般人会问常用的状态码有哪些。小编不这么问,小编的问题是HTTP的全称是什么,把英语给我说出来!

11310
来自专栏HansBug's Lab

【前端】Ubuntu16下nodejs+npm+vue环境配置

笔者最近在学习vue.js,不过一直都是在runoob上面各种尝试。今天笔者在本机(Ubuntu16.04)尝试部署了nodejs+npm+vue开发环境,接下...

38050
来自专栏从零开始学自动化测试

Selenium+python自动化21-TXT数据参数化

前言 在17篇我们讲了excel数据的参数化,有人问了txt数据的参数化该怎么办呢,下面小编为你带你txt数据参数化的讲解 一、以百度搜索为例,自动搜索五次不...

36150
来自专栏用户2442861的专栏

高性能网络编程4--TCP连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。

11520

扫码关注云+社区

领取腾讯云代金券