3 回答
TA贡献1811条经验 获得超5个赞
但是问题是,我应该如何实现我的程序在后台运行,并且系统管理员可以很高兴地对其进行设置和管理过程?
这里有几点想法。
提供软件包和存储库
安装软件是一回事,维护和运行软件则是另一回事。当然,我可以下载一个zip文件,将其解压缩,将文件放入正确的目录中(请注意,程序包通常分散在整个文件系统中),创建一个系统用户来运行守护程序,并设置相应的权限。但这很乏味,容易出错(这将导致大量票证涌入,例如“ Bah!无法运行!请修复它!”),并且如果要在许多系统上安装该软件,则几乎不可行。
因此,我们需要一个解决方案来降低采用的障碍。为这些软件包提供存储库通常不是火箭科学,并且使安装和/或更新变得更加容易。“下载->分发->安装/更新”与单个命令/服务器(例如,
$ awesomePm update coolApplication
至少为基于RedHat和Debian的系统提供软件包。就个人而言,我会选择CentOS(它将使您的软件包与几乎所有RHEL衍生版本兼容)和基本的Debian。后者也应该使为Ubuntu提供软件包变得轻而易举。由于我不再使用Debian或衍生产品,因此我不太确定它们是否真正兼容,因此我上次构建时存在启动问题.deb
。
提供适当的文档。记录安装的内容,安装的位置和原因。提供指向相应文档的链接。联机帮助中对依赖项的引用就足够了。这样,您甚至可以让最没有经验的管理员来配置您的程序包。
使用防御性最强的默认值。
关于golang的特别说明:默认情况下,大多数软件包构建工具都会剥离软件包中包含的二进制文件。Go不支持该功能,因此请在这里保重。
完成
没有比完整的软件包更令人讨厌的了。
尽可能使用syslog并遵守约定。这样,您的日志将被放置在系统管理员期望的位置,并且如果自动过时它们会得到照顾,以防止您的应用程序导致磁盘已满。如果系统管理员希望对您的应用程序日志进行特殊处理,他将以这种方式进行配置。
不要通过应用程序轮换日志。这是用户选择如何处理它们的选择(这可能与他们的SLA有关)。即使您可以配置日志的轮换方式,管理员也必须学习如何配置日志-这会引入不必要的冗余。
如果必须写入日志文件,请遵循目标系统的日志记录策略并提供日志轮换配置文件。您不希望仅由于计算机磁盘空间不足而导致应用程序宕机,是吗?
使用系统工具,而不是重新发明轮子。如果您的应用程序需要进行一些维护,请不要在应用程序内部使用调度程序。编写维护专用工具(单片应用程序为00)并加以利用cron
。专门将相应的文件添加到/etc/cron*
目录之一。
提供适当的初始化脚本!这样,管理员可以使用众所周知的工具systemctl
来管理应用程序的启动和关闭。当您必须对su
用户使用或sudo -u
在启动时使用它来调用Shell脚本时,这很烦人。即使调用此脚本,也会@onboot
与标准背道而驰。仅仅因为启动方法有效,并不意味着应该使用它。
添加SE-Linux配置文件的加分点!
不用说,但是我经常看到配置错误的软件包,因此:测试您的软件包!从目标操作系统的最小安装开始,安装您的软件包并确保它按预期运行。检查您提供的每个配置。
如果您打算将软件包放入Debian的官方仓库中,您应该计划一些时间:Debian之所以稳定的原因是软件包的要求非常严格,即使您满足了所有要求,也必须去做所有事情。从不稳定的测试到稳定的测试方法。
精确一点
不要仅仅因为方便而使用现有用户。如果创建Web应用程序,请不要重复使用“ apache”或“ www”用户。创建一个专用于您的程序包的用户,并将该用户添加到相应的组中。
遵循最少必要权限的原则。几乎没有理由拥有二进制世界可执行文件,而没有世界可写文件(这将是一个极端的安全漏洞)。如果没有运行应用程序,您经常会在SO上看到将权限设置为[0] 777的建议,这使每个用户都可以对文件进行任何修改。实际上,几乎没有理由使二进制文件可写给任何用户:无论如何进行更新的root用户始终可以写任何东西。所以权限应该是0550
对于二进制文件。该原理也适用于数据目录等。在这里投入一些时间和精力。您不希望您的应用成为成功攻击的载体,是吗?甚至潜在的安全风险也往往会反击您和您的声誉。我倾向于将所有数据文件设置0600
为应用程序的系统用户需要写入的0400
文件,只读文件和0500
二进制文件。然后,我进行了细化的分析,组权限应该是什么。例如:一组可能会更改Web应用程序的各个模板,但很可能不会更改资源目录子树的目录结构。
如果您为安全性付出努力,则将增加信任度。请注意,在决定采用软件包之前,通常会先检查软件包的安全性影响。
遵守FHS(!!)!即使这样:仅仅因为您可以在之下执行任何操作/opt/yourapplication
,所以这样做也不总是一个好主意。而是分别安装到/usr
和中/var
(假设在启动时不需要您的应用程序)。
如果您有依赖项,请定义它们。不要仅假设存在包装。
如果您有本地SMTP服务器的依赖项,请不要对声明依赖项postfix
。管理员可能更喜欢sendmail(无论出于何种原因)。因此,请改为定义对mail-transport-agent
(Debian)或mta
(RH,iirc)的依赖。
结论
我期望这是一款优秀的软件–与现有软件完美集成,并使其易于安装,维护,配置和运行,而无需学习冗余配置。如果我看到一个软件包的SELinux配置文件,那确实给供应商带来了好处-除非配置文件非常草率,否则表明供应商非常重视安全性。
- 3 回答
- 0 关注
- 433 浏览
添加回答
举报