本文介绍Webmin的Custom Command模块,它可以用于创建按钮来运行经常使用的shell命令。

内容

一、Custom Commands模块

大多数系统管理员喜欢创建shell脚本来执行常见任务,如备份数据库或者添加一个某类新用户。因为每个系统和组织不同,将总有像Webmin的通用工具不能容易像一个简单自定义脚本做的任务。在命令行中运行的脚本对一个没有经验用户要使用不容易。

自定义命令模块允许你为shell脚本和命令创建一个简单的web接口,因而从Webmin内能够用一个按钮的点击运行它们。它也允许你为每个命令定义各种类型参数,这些参数可以由用户输入并且被替换到shell命令。取决于在运行它前用户做的选择,这可以用于提供参数或输入给要被运行的脚本。

这个模块的另一个特性是能够定义文件编辑器,因而能够通过Webmin的web接口编辑经常被更改的文件。你也可以定义在文件被编辑前后要被运行的命令,因而可以在编辑前验证,复制或者备份它。

这个模块可能最有用的特性是其访问控制支持。你可以授权其它webmin用户使用某些或所有命令和编辑器,而只给自己和其它受信管理员创建和编辑命令命令的权限。这意味着其它用户只能执行你允许它们执行的脚本和编辑你允许它们编辑的文件,但不带完全的root特权。

不同于大部分其它模块,这个模块不处理某个单独的服务器或服务的配置。因而它在所有Webmin能够所运行的Unix版本上有完全相同的用户接口和功能。

当你从Tools类别进入这个模块时,它的主页显示所有已有自定义命令和文件编辑器以及它们的参数。如果你之前没有使用这个模块,这页将是空的。

你可以通过点击在这个主页上显示的命令的按钮运行这个命令。但如果这个命令有参数字段或者选项,在运行它前,你必须填入它们或者进行合适的选择。当按下这个按钮时,将向你显示一个页面,其显示来自这个命令的输出,因而你可以看到它成功或失败。

要使用一个文件编辑器,只要在这个主页上点击它的按钮。这向你显示一个显示当前文件内容的编辑表单,你可以自由地修改图它。当结束时,点击这个文本框下面的save按钮来写出此新文件内容。

二、创建一个新命令

要创建一个能够被这个模块主页上一个按钮运行的新命令,按照这些步骤:

1) 点击已有按钮上或下的*Create a new custom command*链接。这将产生一个以下图片中显示的创建表单。

2) 在Description字段中为你的命令输入一个简短描述。你输入的任何文本将显示在这个主页上命令的按钮上。你也可以输入更多文本(包括HTML标签)到它之下的更大文本框,被显示在这个按钮下面。

3) 在Command字段中,输入你想要执行的shell脚本或者命令。所有标准元字符{| border="1" |-都被支持,诸如||, &, <和>。要输入多个命令,|} 用;或&&分开它们。如果你的命令有参数(在第10步设置),当运行这个命令时,它们将被转换成环境变量。所以,如果你有一个名为foo的参数,在命令字符串中所有出现$foo的地方将被用户为那个参数输入的东西替代。例如,一条允许用户finger系统上任何用户的命令看起来像$user。

4) 默认,命令将在将在对应这个模块的Webmin目录中运行。要更改这个,取消选择对应Run in directory字段的Default并且输入一个不同路径到它旁边的文本框中。

5) 在Run as user字段中,输入以哪个用户运行这个命令的Unix用户名。你可以选择Webmin用户来替代,这将使得它以运行它的Webmin用户有相同名称的Unix用户来运行。当执行这个命令时,如果他通过telnet或SSH登录,这个命令通常不能访问这个Unix用户有的相同环境变量。但如果你勾选了Use user's environment选项,则在这个用户的.profile, .cshrc和其它登录文件中设置的所有变量将可用。Webmin用su运行这个命令,这切换到这个用户,执行它的shell并且执行这条命令。

6) 如果当你的命令被运行时,它产生了你想要在浏览器中显示的HTML输出,更改*Command outputs HTML?*字段为Yes。否则Webmin将转义输出中所有HTML标签,这对于只产生普通文本的命令是要做的正确事情。

7)要控制在这个模块首页上新命令的位置,为Ordering on main page选项输入一个数值。命令被排序,使得最大数值首先出现。如果选择了Default,取排序号为0。如果你未为任何你自定义命令设置排序号,将按它们被创建的顺序显示它们。

8) 要防止用户在点击按钮时看到正在被运行的实际shell命令,设置*Hide command when execting*字段Yes。如果你的命令包含你想要对用户隐藏的密码或者其它敏感信息,这是一个好办法。

9) 要使得这个命令在Usermin的自定义命令模块中显示,更改Available in Usermin?字段为Yes。

10)如果你想要你的命令具有用户能够在这个主页上设置的参数,你需要填入Command parameters部分。在这部分中表格中每行定义一个参数,为每行必须输入以下信息。

  • Name:对应这个参数的简单唯一名称,它可以被用于Command字段(以一个$为前缀)来表示由用户输入值的地方应该被替换。这个名称应该只由字母、数字和_字符组成。
  • Description:此文本将在这个模块主页上用作这个参数的标签。这可以包含任何字符,包括HTML标签,但不应该太长。
  • Type:这个菜单控制在这个模块主页上如何显示这个参数,以及允许什么输入。最常见选项是Text,但所有可用选项和它们的含义在以下参数类型部分中讨论。
  • Quote parameter?:如果设置成Yes,用户输入的只将在替代前用"字符引用。当创建一个新命令时,用于输入单个参数的仅一个空行可用。要添加更多,你需要在保存它后再次编辑这个命令。

11) 最终,当你完成输入你新命令的详情时,点击Create按钮。只要在表单中没有错误,你将返回这个模块的主页,新命令按钮将在这个主页上可见。

 点击以上的ooutallfiles按钮,将会显示以下输出:

 一旦创建了一个命令,你可以通过点击这个模块主页上与创建命令按钮同一行最右侧的Edit Command链接,编辑它。以上描述的所有字段可以被更改,并且能够添加其它参数。当你完成更改后,点击这页底部的Save按钮。或者呀删除一个命令,点击右下角的Delete按钮。

参数类型:对于在一条命令中每个参数,你可以从Type列下菜单选择一个类型。可用选项和它们的含义是:

  • Text:文本输入字段。args [用于文本字段的默认文本]
  • User:用户名输入字段 args [用于这个用户字段的默认用户名]
  • UID:用户id输入字段 args [用于UID字段的默认userID]
  • Group:组名输入字段 args[用于组字段的默认名称]
  • GID:组id输入字段 args [用于GID字段的默认groupID]
  • File:文件(服务器端)选择输入字段。args[默认/path/to/server/file]
  • Directory:目录(服务器端)选择输入字段。args[默认/path/to/server/directory]
  • Option..:yes|no布尔字段。args["如果选择Yes,要传递的值"]
  • Password:密码输入字段。args[默认密码]
  • Menu..:选项选择菜单输入字段。args[/path/to/options/file.txt] 在一个文件中列出了菜单选项。在Type参数args字段中提供了路径和文件名/path/to/myMenu_options.txt文件。myMenu_options.txt文件以每行"key" "value"包含一个选项。"key"是被传递给你自定义命令脚本的东西。"value"是被显示给用户的东西。
  • Upload:文件(用户端)选取输入字段。args [默认path/file]
  • Text box:文本区输入字段。args [用于文本框的默认文本]
  • Multi menu..:嵌套的选项选取输入字段。类似Menu类型的args,但允许多个选取。
  • Large multi menu..:复杂的嵌套选取输入字段。args与Multi Menu相同,但显示所有选项足够高。
  • Left-right menu..:左<->右小窗口。args功能上与Multi Menu相同,但在左边显示选项,在右边显示被选取的值。
  • Date:日期选取输入字段。args [默认日期以YYYY-MM-DD格式]
  • Submit button:提交命令按钮。args 仅一个按钮。

三 创建一个新的文本编辑器

要添加一个新按钮到这个模块主页用于编辑一个文件,你必须按照这些步骤:

1) 点击已有按钮上或下的Create a new file editor链接。这将产生在以下窗口中显示的编辑器创建表格。

2) 在Description字段中输入一个用于待被编辑文件的简单描述。你输入的任何文本将在这个主页上编辑器按钮上显示。你也可以输入其它文本(包括HTML标签)到其下更大的文本框,在这个按钮下显示。

3) 向*File to edit*字段输入待被编辑文件的完整路径。这个文件不是必须存在。

4) 当保存它时,要更改这个文件的所有者,设置*File ownership*字段为User并且输入一个Unix用户名和组名到它旁边的字段。当编辑一个还不存在的文件时,这尤其有用,因而合适地设置了新创建文件地所有者。如果你保留这个字段设定为Leave as it,当保存它时将不更改文件的所有者。新创建的文件将由root所有。

5)要在保存文件时更改它的访问权限,设置File Permission字段为Set to octal并且输入权限(如700或664)到它旁边的字段。要对,选择Leave as it,在保存它时将不更改这个文件的权限。新创建文件的权限取决于Webmin进程的掩码。

6) 要只在用户保存文件前运行一条命令,填入*Command to run before saving*字段。这对产生一个备份,从RCS中检查出文件或者你会遇到的其它任何事情有用。

7) 类似的,要在这个文件保存后运行一条命令,填入*Command to run after saving*字段。对于验证文件内容有效性,复制它到另一个系统有用。

8) 要控制在模块首页上新编辑按钮的位置,为*Ordering on main page*输入一个数值。命令和编辑器都被排序,使得有最大数值的那些首先显示。如果选择Default,取排序号为0。如果你没有为你任何文件编辑器设置排序号,按创建它们的顺序显示它们。

9) 要使编辑器在Usermin的自定义命令模块中显示,更改Available in Usermin?字段为Yes。

10) 最后,点击Save按钮。如果在表单中没有错误,你将返回到这个模块的主页,它将包括对应这个新编辑器的按钮。

一旦创建了一个编辑器,你可以通过点击这个模块主页上*Edit file editor*链接编辑它。一旦你完成了修改,点击本页底部的Save按钮。或者要删除这个编辑器,点击右下角的Delete按钮。

点击产生的编辑按钮后,显示一个文本编辑器:

四 模块访问控制

在Custom Commands模块中的访问控制选项被设计成允许一个主Webmin用户赋给一些其它用户允许所选命令的权限,但不能编辑或者创建它们。从安全视角,赋给一个不受信任用户创建它自己自定义命令的权限是没有意义的,因为那将使他能够以root运行任何命令,并且因而破坏了整个系统的安全。一旦你创建了能够访问Custom Commands模块的用户或组,按照这些步骤限制他的访问:

1) 在Webmin Users模块中,点击你想要授权给的用户或组的名称下Available Webmin模块下tools类别下Custom Commands模块。

2) 更改*Can edit module configuration?*字段为No。

3) 除非你想要这个用户能够运行所有命令和使用所有编辑器,否则设置*Commands this user can run *为Selected,并且从下面列表选择允许他使用的那些命令或编辑器。另外,你可以选择*

All except selected.. *并且从列表中选择不允许他使用的命令。所有其它命令对他可用。

4) 更改*Can create and edit commands?*字段为No。

5) 点击Save按钮。访问控制设置将被激活并且你将返回到Webmin Users模块的主页。

如果你想要授权所选的自定义命令和编辑器到非常多的用户,一个更好的方法是安装Usermin,它允许任何Unix user登录。Available in Usermin?字段设为Yes的任何命令将在Usermin的自定义命令模块中可见,并且用完全相同方式运行。有关Usermin和如何配置它来限制哪些Unix用户可以运行自定义命令的更多信息见Usermin Configuration。

Webmin -- Custom Commands模块相关推荐

  1. python commands执行不连续_[Python] 利用commands模块执行Linux shell命令

    用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...

  2. python commands用法_python之commands模块(执行Linux Shell命令)

    commands模块 用于执行Linux shell命令,要获得shell命令的输出只需要在后面参数写入('命令')就可以了. 需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块c ...

  3. source Insight常用自定义命令( custom commands )

    在Source Insight中添加自定义功能的步骤如下: 1.Source Insight中,Options->Custom Commands...->Add...,New Comman ...

  4. python中commands模块

    commands模块是python的内置模块,他共有三个函数,使用help(commands)可以查看到. 注:在3.x版本总,getstatus()方法被移除,getoutput()和getstat ...

  5. Python资料之commands模块

    commands模块是python的内置模块,他共有三个函数,使用help(commands)可以查看到. 注:在3.x版本总,getstatus()方法被移除,getoutput()和getstat ...

  6. python commands模块_python之commands和subprocess入门介绍(可执行shell命令的模块)

    一.commands模块 1.介绍 当我们使用Python进行编码的时候,但是又想运行一些shell命令,去创建文件夹.移动文件等等操作时,我们可以使用一些Python库去执行shell命令. com ...

  7. python commands.getoutput_Python3中用什么替换commands模块的getstatusoutput()

    先翻译一段文章:https://stackoverflow.com/questions/11344557/replacement-for-getstatusoutput-in-python-3 在最后 ...

  8. Cypress系列(63)- 使用 Cypress.Commands 完成 Custom Commands 自定义命令

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Custom Commands 自定义命 ...

  9. 自动化测试框架[Cypress Custom Commands]

    Custom Commands是替代PageObject模式非常好的选择,使用Custom Commands可以创建自定义命令或替换现有命令,自定义命令默认存放在/cypress/support/co ...

最新文章

  1. Java中AudioFileStream_AudioFileStream学习
  2. 79期:Faceu的分布式数据库实战访谈
  3. c# 模拟window 操作鼠标|winapi
  4. 如何从零规划一个产品?
  5. 小程序 --- 项目小练手Ⅰ
  6. 【渝粤题库】广东开放大学 文化产业经济学 形成性考核
  7. Zookeeper默认占用8080端口问题以及常见启动错误的解决
  8. 数据集转换_为什么LSTM看起来那么复杂,以及如何避免时序数据处理差异和混乱...
  9. VS LNK2001--链接器工具错误
  10. 什么是云计算和大数据?他们之间的区别是什么?
  11. ajax、php、json异步数据处理
  12. OCI--学习OCI编程
  13. Web课程设计高校物资管理系统
  14. Coding and Paper Letter(七十六)
  15. oracle 手工创建数据库
  16. 微信搜索刷关键词推广方法
  17. 【长按图片保存到相册】Vue移动端H5页面实现长按图片保存到手机功能
  18. yield关键字用法
  19. 半路出家当程序员容易吗?怎样才能拿高薪?
  20. java包的创建、使用和导入操作教程

热门文章

  1. 世界著名大学开放课程
  2. 针对呼叫中心的主动外呼方案的研究
  3. 更新后的 PHP: 现代 PHP 中的密码安全性
  4. JavaScript常用的几种字符串方法
  5. html4三种版本,bootstrap4有哪些版本?
  6. HamonyOS真机调试的步骤(基于DevEco Studio)
  7. 华为hcia网络课程
  8. javascript的100个常用技巧收集
  9. c语言中不能将字符串赋值给字符数组
  10. Java 泛型方法详解