如何编辑 Sudoers 文件

2023-11-19

介绍

权限分离是 Linux 和类 Unix 操作系统中实现的基本安全范例之一。普通用户以有限的权限进行操作,以减少对自己环境(而不是更广泛的操作系统)的影响范围。

一个特殊的用户,称为root, has 超级用户特权。这是一个管理帐户,没有普通用户的限制。用户可以使用超级用户或root以多种不同方式享有特权。

在本文中,我们将讨论如何正确、安全地获取root特权,特别关注编辑/etc/sudoers file.

我们将在 Ubuntu 20.04 服务器上完成这些步骤,但大多数现代 Linux 发行版(例如 Debian 和 CentOS)应该以类似的方式运行。

本指南假设您已经完成了初始服务器设置在这里讨论。正常登录您的服务器,非root用户并继续下面。

Note:本教程深入探讨权限提升和sudoers文件。如果您只想添加sudo用户的权限,请查看我们的如何创建新的启用 Sudo 的用户快速入门教程Ubuntu and CentOS.

如何获取root权限

基本有以下三种获取方式root特权,其复杂程度各不相同。

以 root 身份登录

最简单直接的获取方法root权限是直接登录到您的服务器root user.

如果您要登录本地计算机(或使用虚拟服务器上的带外控制台功能),请输入root在登录提示符处作为您的用户名并输入root当询问时输入密码。

如果您通过 SSH 登录,请指定root用户位于 SSH 连接字符串中的 IP 地址或域名之前:

  1. ssh root@server_domain_or_ip

如果您尚未设置 SSH 密钥root用户,输入root出现提示时输入密码。

Using su成为根

直接登录为root通常不建议这样做,因为很容易开始使用系统执行非管理任务,这是危险的。

获得超级用户权限的下一个方法是让您成为root用户可以根据需要随时使用。

我们可以通过调用来做到这一点su命令,代表“替代用户”。获得root权限,类型:

  1. su

系统将提示您输入root用户的密码,之后,您将进入root外壳会话。

当你完成了需要的任务后root权限,通过输入以下命令返回到普通 shell:

  1. exit

Using sudo以 root 身份执行命令

最后的获取方式root我们将讨论的特权是sudo命令。

The sudo命令允许您执行一次性命令root特权,无需生成新的 shell。它是这样执行的:

  1. sudo command_to_execute

Unlike su, the sudo命令将请求密码current用户,而不是root密码。

由于其安全隐患,sudo默认情况下,不会向用户授予访问权限,必须先进行设置,然后才能正常运行。看看我们的如何创建新的启用 Sudo 的用户快速入门教程Ubuntu and CentOS了解如何设置sudo- 启用的用户。

在下一节中,我们将讨论如何修改sudo配置更详细。

什么是维苏多?

The sudo命令是通过位于的文件配置的/etc/sudoers.

Warning:切勿使用普通文本编辑器编辑此文件!始终使用visudo命令代替!

因为语法不正确/etc/sudoers文件可能会让您的系统损坏,无法获得提升的权限,因此使用visudo命令来编辑文件。

The visudo命令像平常一样打开文本编辑器,但它会在保存时验证文件的语法。这可以防止配置错误阻塞sudo操作,这可能是您获得的唯一途径root特权。

传统上,visudo打开/etc/sudoers文件与vi文本编辑器。不过Ubuntu已经配置了visudo使用nano改为文本编辑器。

如果您想将其改回vi,发出以下命令:

  1. sudo更新替代方案--config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

选择与您想要做出的选择相对应的数字。

在 CentOS 上,您可以通过将以下行添加到您的~/.bashrc:

  1. export EDITOR=`which name_of_editor`

获取文件以实施更改:

  1. .~/.bashrc

配置完成后visudo,执行命令访问/etc/sudoers file:

  1. sudo visudo

如何修改 Sudoers 文件

您将看到/etc/sudoers文件在您选择的文本编辑器中。

我从 Ubuntu 20.04 复制并粘贴了该文件,并删除了注释。 CentOS系统/etc/sudoers文件还有更多行,其中一些我们不会在本指南中讨论。

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

让我们看看这些行的作用。

默认线路

第一行,Defaults env_reset,重置终端环境以删除任何用户变量。这是一项安全措施,用于清除潜在有害的环境变量。sudo会议。

第二行,Defaults mail_badpass,告诉系统邮寄不良通知sudo尝试配置的密码mailto用户。默认情况下,这是root帐户。

第三行,开头为Defaults secure_path=...,指定PATH(操作系统将在文件系统中查找应用程序的位置)将用于sudo运营。这可以防止使用可能有害的用户路径。

用户权限线

第四行,规定root user’s sudo特权,与前面几行不同。我们来看看不同字段的含义:

  • root ALL=(ALL:ALL) ALL The first field indicates the username that the rule will apply to (root).

  • root ALL=(ALL:ALL) ALL The first “ALL” indicates that this rule applies to all hosts.

  • root ALL=(ALL:ALL) ALL This “ALL” indicates that the root user can run commands as all users.

  • root ALL=(ALL:ALL) ALL This “ALL” indicates that the root user can run commands as all groups.

  • root ALL=(ALL:ALL) ALL The last “ALL” indicates these rules apply to all commands.

这意味着我们的root用户可以使用运行任何命令sudo,只要他们提供密码。

团体特权线

接下来的两行与用户权限行类似,但它们指定sudo团体规则。

以a开头的名字%表示组名。

在这里,我们看到admin组可以以任何主机上的任何用户身份执行任何命令。同样,sudogroup 具有相同的权限,但也可以作为任何组执行。

包含 /etc/sudoers.d 行

乍一看,最后一行可能看起来像一条注释:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

It does以一个开始#,通常表示注释。然而,这一行实际上表明文件在/etc/sudoers.d目录也将被获取和应用。

该目录中的文件遵循与/etc/sudoers文件本身。任何不以以下结尾的文件~并且没有.其中将被读取并附加到sudo配置。

这主要是为了让应用程序改变sudo安装时的权限。将所有关联规则放在一个文件中/etc/sudoers.d目录可以让您轻松查看哪些权限与哪些帐户关联,并轻松地反转凭据,而无需尝试操纵/etc/sudoers直接归档。

/etc/sudoers文件本身,您应该始终在/etc/sudoers.d目录与visudo。编辑这些文件的语法是:

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

如何授予用户 sudo 权限

用户在管理时最希望完成的操作sudo权限是授予新用户一般sudo使用权。如果您想授予帐户对系统的完全管理访问权限,这非常有用。

在设置有通用管理组的系统(例如本指南中的 Ubuntu 系统)上执行此操作的最简单方法实际上是将相关用户添加到该组。

例如,在 Ubuntu 20.04 上,sudo组拥有完整的管理员权限。我们可以通过将用户添加到组中来授予用户相同的权限,如下所示:

  1. sudo usermod -aG sudo username

The gpasswd还可以使用命令:

  1. sudo gpasswd -a username sudo

这些都会完成同样的事情。

在 CentOS 上,这通常是wheel组而不是sudo group:

  1. sudo usermod -aG wheel username

或者,使用gpasswd:

  1. sudo gpasswd -a username wheel

在 CentOS 上,如果将用户添加到组不能立即生效,您可能需要编辑/etc/sudoers文件取消注释组名称:

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

如何设置自定义规则

现在我们已经熟悉了文件的一般语法,让我们创建一些新规则。

如何创建别名

The sudoers通过使用各种“别名”对事物进行分组,可以更轻松地组织文件。

例如,我们可以创建三个不同的用户组,并具有重叠的成员资格:

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

组名称必须以大写字母开头。然后我们可以允许成员GROUPTWO更新apt通过创建如下规则来数据库:

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

如果我们不指定要运行的用户/组,如上所述,sudo默认为root user.

我们可以允许成员GROUPTHREE通过创建“命令别名”并在规则中使用它来关闭并重新启动计算机GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

我们创建一个名为的命令别名POWER其中包含关闭和重新启动机器的命令。然后我们允许成员GROUPTHREE执行这些命令。

我们还可以创建“Run as”别名,它可以将规则中指定用户执行命令的部分替换为:

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

这将允许任何成员GROUPONE执行命令作为www-data用户或apache user.

请记住,当两者之间存在冲突时,后面的规则将覆盖前面的规则。

如何锁定规则

您可以通过多种方式更好地控制sudo对呼叫做出反应。

The updatedb与相关的命令mlocate软件包在单用户系统上相对无害。如果我们想允许用户执行它root特权without必须输入密码,我们可以制定如下规则:

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD是一个“标签”,意味着不需要密码。它有一个名为的配套命令PASSWD,这是默认行为。标签与规则的其余部分相关,除非稍后被其“孪生”标签推翻。

例如,我们可以有这样的一行:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

另一个有用的标签是NOEXEC,可以用来防止某些程序中的一些危险行为。

例如,有些程序,例如less,可以通过在其界面中键入以下命令来生成其他命令:

!command_to_run

这基本上执行用户给它的任何命令,其权限与less正在下面运行,这可能非常危险。

为了限制这一点,我们可以使用这样的行:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

杂项信息

还有一些信息在处理时可能有用sudo.

如果您在配置文件中指定了“运行身份”的用户或组,则可以使用以下命令以这些用户身份执行命令-u and -g标志分别为:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

为了方便起见,默认情况下,sudo将在一个终端中保存您的身份验证详细信息一段时间。这意味着在计时器耗尽之前您无需再次输入密码。

出于安全目的,如果您希望在运行完管理命令后清除此计时器,您可以运行:

  1. sudo -k

另一方面,如果您想“启动”sudo命令,以便稍后不会提示您或更新您的sudo租赁,您可以随时输入:

  1. sudo -v

系统将提示您输入密码,该密码将被缓存以供稍后使用sudo使用直到sudo期限到期。

如果您只是想知道为您的用户名定义了什么样的权限,您可以输入:

  1. sudo -l

这将列出中的所有规则/etc/sudoers适用于您的用户的文件。这可以让您清楚地了解您将或不被允许做什么sudo作为任何用户。

很多时候,当你执行一个命令时,它会失败,因为你忘记在它前面加上sudo。为了避免重新输入命令,您可以利用 bash 功能,这意味着“重复上一个命令”:

  1. sudo !!

双感叹号将重复最后一个命令。我们在它前面加上sudo快速将非特权命令更改为特权命令。

为了一些乐趣,您可以将以下行添加到您的/etc/sudoers文件与visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

这会导致sudo当用户输入错误的密码时返回愚蠢的侮辱sudo。我们可以用sudo -k清除以前的sudo缓存的密码来尝试一下:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

结论

您现在应该对如何阅读和修改sudoers文件,并掌握可用于获取的各种方法root特权。

请记住,超级用户权限不会授予普通用户是有原因的。了解执行的每个命令的作用非常重要root特权。不要掉以轻心。了解针对您的用例使用这些工具的最佳方法,并锁定任何不需要的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编辑 Sudoers 文件 的相关文章

  • Java中如何确保String对象被销毁?

    我公司的一名员工需要通过我编写的程序修改 SQL Server 数据库中的数据 该程序首先使用 Windows 身份验证 我要求 DBA 授予该特定用户对所述数据库的写入权限 他们不愿意这样做 而是授予了写权限myWindows 用户帐户
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • 为什么需要 JsonRequestBehavior?

    Why is Json Request Behavior needed 如果我想限制HttpGet对我的动作的请求我可以用 HttpPost 属性 Example HttpPost public JsonResult Foo return
  • 还记得我的 Cookie 最佳实践吗?

    我读到了许多关于这个论点的老问题 我认为最好的做法是设置一个 cookieusername user id和一个随机令牌 相同 cookie 的数据在 cookie 创建时存储在数据库中 当用户拥有 cookie 时 它 们会进行比较 co
  • 为什么这个 JavaScript 可以在 Safari 上运行,但不能在 Firefox 上运行?

    我有 HTML 文件 我在 Safari 上尝试了该代码 运行良好 但是当我在 Firefox 上尝试这个时 它不起作用 任何人都可以建议如何使其在 Firefox 上工作吗 单击撤消按钮时 我想从 jsp 文件中检索内容 当我在 mac
  • Python 应用程序需要 init.d 脚本

    我有一个基于 python 的应用程序 它的工作方式类似于 feed 聚合器 并且需要成为 init d 脚本的一部分 以便我可以使用启动 停止 重新启动选项来控制执行 另外 我希望将 init d 脚本设置为 cron 作业 我在这里有示
  • ASP.NET MVC 3 文件夹结构

    在了解了传统 ASP NET Webform 的背景后 我正在学习 MVC 框架 我正在开发一个典型的示例电子商务网站 该网站具有公共域 然后能够注册提供对安全会员区域的访问的服务 我有几个问题 在 ASP NET 中 私有成员页面通常与公
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 卸载 SSL 时保护表单身份验证 Cookie

    我正在尝试使用 ASP NET MVC 2 0 和表单身份验证来保护我当前正在开发的网站 为了保护表单身份验证cookie 我想将requiresSSL 属性设置为true 以便浏览器仅在连接处于SSL 下时才发送cookie 并且显然确保
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • Eclipse Kepler 在 64 位 ubuntu 上冻结

    几天前我刚刚将 Ubuntu 升级到 14 04 并在此过程中从 32 位切换到 64 位 从那时起 Eclipse 就变得非常不稳定 运行几分钟后 它将开始随机冻结越来越长的时间 特别是在代码完成时 已经必须禁用它 而且在剪切 粘贴时 偶
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客
  • 如何在 Java Gnome/GTK 程序中使用 Glade UI(.glade 文件)?

    我在 Internet 上进行了一项研究 寻找教程 文档来解释如何在 Java Gnome 项目中使用 Glade 中设计的 UI 但没有成功 我已经知道如何使用 Java Gnome GTK 从代码创建 UI 不管怎样 我想使用我在 Ja
  • 密码盒和 MVVM

    我们有以下场景 MVVM 用户界面 用户可以在其中输入密码 实际上是一个PasswordBox 应该做一些工作的服务器 服务器连接到一些需要身份验证的数据库 我已经读过这个关于MVVM中PasswordBox的问题 https stacko
  • 登录代码示例已通过 SQL 注入被黑客攻击,尽管 mysql_real_escape_string...

    我使用 CodeIgniter 但在黑客攻击方面遇到了麻烦 是否可以对以下登录代码进行 SQL 注入 function process login username mysql real escape string this gt inpu
  • Ubuntu 上的 Tomcat8 .log.gz 已存在且未覆盖

    在我们的 Tomcat 服务器上 我经常看到如下警告 etc cron daily tomcat8 gzip var log tomcat8 app1 app1 log gz already exists not overwritten g
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可

随机推荐

  • Spring Boot @SpringBootApplication,SpringApplication 类

    春季启动 SpringBootApplication注解 春季启动 SpringBootApplication注解用于标记一个配置类 该类声明了一个或多个 Bean方法和触发器auto configuration和组件扫描 这与声明一个类相
  • 如何在 Ruby 中使用字符串

    介绍 A string是一个或多个字符的序列 可以由字母 数字或符号组成 Ruby 中的字符串是对象 与其他语言不同 字符串是mutable 这意味着可以就地更改它们 而不用创建新字符串 您几乎会在编写的每个程序中使用字符串 字符串允许您使
  • 有用的 Bash 别名和函数简介

    介绍 在命令行上操作的越多 您就越会发现您使用的大多数命令只是可用命令的很小的子集 大多数任务都是习惯性的 您可能每天都以相同的方式运行这些任务 虽然许多最常见的命令实用程序的制造商试图通过使用缩写名称来消除无关的输入 想想通过输入 ls
  • 在 Ubuntu 14.04 上使用 Consul(服务发现系统)简介

    介绍 Consul是一个分布式 高可用 数据中心感知的服务发现和配置系统 它可用于在灵活而强大的界面中呈现服务和节点 使客户端始终能够了解其所属基础设施的最新视图 Consul 提供了许多不同的功能 用于提供有关您的基础设施的一致且可用的信
  • 如何在 Ubuntu 22.04 上使用 uWSGI 和 Nginx 为 Flask 应用程序提供服务

    介绍 在本指南中 您将使用FlaskUbuntu 22 04 上的微框架 本文的大部分内容将讨论如何设置uWSGI应用服务器以及如何启动应用程序和配置Nginx充当前端反向代理 先决条件 在开始本指南之前 您应该 安装了 Ubuntu 22
  • 如何使用 Nginx、Let's Encrypt 和 Docker Compose 保护容器化 Node.js 应用程序

    介绍 有多种方法可以增强您的灵活性和安全性Node js应用 用一个反向代理 like Nginx为您提供负载平衡请求 缓存静态内容和实施传输层安全 TLS 在服务器上启用加密 HTTPS 可确保与应用程序之间的通信保持安全 在容器上使用
  • Python 中的 numpy.append()

    Python numpyappend 函数用于合并两个数组 该函数返回一个新数组 原数组保持不变 NumPy append 语法 函数语法为 numpy append arr values axis None The arr可以是类似数组的
  • 如何使用 Apache 和 Nginx 创建临时和永久重定向

    介绍 HTTP 重定向或 URL 重定向是一种将一个域或地址指向另一个域或地址的技术 重定向有很多用途 并且需要考虑几种不同类型的重定向 每当站点需要将请求一个地址的人定向到另一个地址时 就会使用重定向 当您创建内容和管理服务器时 您经常会
  • eclipse.ini vm 参数 - eclipse.ini 文件位置 Mac、Windows

    eclipse ini是用于控制Eclipse启动的配置文件 我们可以使用 Xms Xmx 参数配置 Eclipse VM 参数 例如要使用的 JDK eclipse ini vm permgen 空间 最大和最小堆大小 eclipse i
  • 如何在 Java 中将字符串转换为数组

    有时我们不得不分开字符串到数组基于分隔符或某些正则表达式 例如 读取 CSV 文件行并解析它们以将所有数据获取到字符串数组 在本教程中 我们将学习如何在 Java 程序中将字符串转换为数组 Java 中的字符串到数组 字符串类split S
  • Java优先级队列

    我们时不时地需要以特定的顺序处理队列中的项目 优先级队列是一种完成这项工作的数据结构 Java优先级队列与 普通 不同queue 它不是 先进先出 而是按优先级顺序检索项目 Java优先级队列 The java util PriorityQ
  • Java 中的 CallableStatement 示例

    java中的CallableStatement用于从java程序中调用存储过程 存储过程是我们在数据库中为某些任务编译的一组语句 当我们处理复杂场景的多个表时 存储过程很有用 我们可以将所需的数据发送到存储过程 并在数据库服务器本身中执行逻
  • Docker 详解:如何容器化并使用 Nginx 作为代理

    Status 已弃用 本文已弃用 不再维护 Reason 本文中的技术已经过时 可能不再反映 Docker 最佳实践 请参阅 Docker 生态系统 常用组件简介 如何在 Ubuntu 14 04 上的 Docker 容器中运行 Nginx
  • 如何在 Ruby 中使用字符串方法

    介绍 Ruby strings有许多内置方法可以轻松修改和操作文本 这是许多程序中的常见任务 在本教程中 您将使用字符串方法来确定字符串的长度 索引和拆分字符串以提取子字符串 添加和删除空格和其他字符 更改字符串中字符的大小写以及查找和替换
  • Python 字符串包含

    Python String 类有 contains 我们可以使用它来检查它是否包含另一个字符串的函数 Python 字符串包含 Python字符串 contains 是一个实例方法 根据字符串对象是否包含指定的字符串对象 返回布尔值 Tru
  • 如何在 Ubuntu 14.04 上使用 Docker 和 Docker Compose 配置持续集成测试环境

    文章来自Docker 介绍 持续集成 CI 是指开发人员的实践整合尽可能频繁地编写代码 并且每次提交在合并到共享存储库之前和之后都会经过测试自动构建 CI speeds up your development process and min
  • Android BroadcastReceiver 示例教程

    今天我们将讨论并实现Android BroadcastReceiver 它是Android Framework中非常重要的组件 Android 广播接收器 Android BroadcastReceiver是android的一个休眠组件 用
  • 蟒蛇集

    In this tutorial we are going to learn Python Set In our previous article we learnt about Python String You can learn it
  • 如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

    介绍 Python 是 Linux 上默认提供的流行命令处理器 我们之前已经介绍过如何在Ubuntu 12 10 x64上安装Nagios监控服务器 这次 我们将扩展这个想法并使用 Python 创建 Nagios 插件 这些插件将在客户端
  • 如何编辑 Sudoers 文件

    介绍 权限分离是 Linux 和类 Unix 操作系统中实现的基本安全范例之一 普通用户以有限的权限进行操作 以减少对自己环境 而不是更广泛的操作系统 的影响范围 一个特殊的用户 称为root has 超级用户特权 这是一个管理帐户 没有普