用户管理器软件
对于每位系统管理员(无论是否使用 Linux),最耗时的任务之一就是用户帐户维护。无论是添加或删除帐户,甚至是偶尔的暂停或启用,这绝对是可以由 root 用户以外的用户完成的事情。当最初编写工作订单的人可以轻松完成时,为什么还要花费时间翻阅办公桌上堆积如山、需要修改的一千个用户帐户的文件呢?
现在您可能会问:“这些人应该如何完成这项工作?我可不会泄露 root 密码!” 嗯,为了绕过密码问题,我有一个非常简单的回应:使用 sudo(发音为 soo-doo)。您可以从 http://www.courtesan.com/sudo/ 获取这个简洁的小工具。sudo 允许授权用户以超级用户身份执行命令(实际和有效 UID 设置为 0,GID 设置为密码文件中设置的 root 组 ID)。使用像这样的实用程序,您可以允许某些用户运行某些程序,例如 adduser 脚本或 chfn 命令。尽管必须进行某些健全性检查,但我发现 sudo 是保持 root 密码安全的可行解决方案。
为了解决让其他人处理用户帐户的问题,我创建了 User Manager(用户管理器)。现在我很少花时间处理用户帐户。用户管理由技术人员、计费部门和销售人员完成。User Manager 主要是一个 Korn shell 脚本,它可以完成所有这些工作。(Korn shell 可以从 ftp://ftp.cs.mun.ca/pub/pdksh/ 获取。)
User Manager 脚本是您系统的框架,可以自定义以添加 RADIUS 支持、多宿主支持和域名管理。例如,我设置的一个系统构建了所有 DNS、Web 和统计软件包配置,并为多宿主 Web 客户设置了用户帐户。向脚本添加此支持相当简单,并且它为系统自动化提供了很好的学习基础。
User Manager tar 归档文件可以在 ftp://ftp.inetinc.net/pub/usrmgr/usrmgr.tgz 找到。它包括 usrmgr Korn shell 脚本、一个 C 程序和一个简单的 Perl 脚本、一个 README 文件、一个 INSTALL 文件和一个 ASCII 欢迎屏幕。C 程序 newpass.c 帮助加密新用户密码,Perl 脚本 loginterp.pl 从 User Manager 运行时记录的信息生成报告。
为了配置 User Manager 软件,您应该知道系统上几个常用实用程序的位置。其中一些包括 finger、sed、edquota、sort 和 mail。您可以在侧边栏 “程序及其位置” 中查看完整列表。在运行脚本之前,请确保所有这些都在 usrmgr 中正确设置。如果未正确设置,脚本将无法正确执行——可能会遗漏步骤。
一旦设置了程序的位置,您还需要做出一些选择。您希望日志文件放在哪里?您希望脚本驻留在哪里?哪些管理员将接收到记录用户操作的电子邮件消息?以下是我在设置系统时给出的答案
日志文件 -> /usr/local/adm/usrmgr.logfile
脚本驻留位置 -> /usr/local/usrmgr
管理员 -> brw,matt,billing@inetinc.net
请注意,管理员可以是本地用户名和/或完整的 Internet 电子邮件地址。对于多个条目,只需用逗号分隔每个地址,不要留空格。
User Manager 的 Perl 脚本生成的报告可能非常有帮助,不仅对于您的系统管理团队,而且对于您公司的计费和管理人员也是如此。安装 sudo 后,报告会列出每个运行 User Manager 的用户的用户名,而不仅仅是将所有内容都记录为 root。列表 1 和列表 2 显示了两种不同的报告格式。
列表 1 中的简单日志是针对系统管理员的摘要信息。它列出了每个用户执行的 添加、暂停、启用 和 删除 的数量,可用于跟踪任何可能滥用 User Manager 的不受欢迎或未经授权的用户。如果您将系统设置为仅允许管理员通过 sudo 访问 User Manager,您可以轻松地通过检查 root 在做什么来跟踪恶意活动。如果我获得列表 1 数据的机器是一台生产机器,我会对 root 完成的一次 添加 非常警惕,并会检查详细日志以获取更多信息。
列表 2 显示了一个更详细的报告,可以通过在 loginterp.pl 脚本中将 verbose 设置为 0 或 1 来打开或关闭。我的个人建议是保持开启状态,以便您可以将这些报告发送给您的计费和帐户管理人员。它也有助于调查可能在摘要报告中显示的任何恶意活动。
例如,摘要报告中的一个条目检测到 root 正在向用户记录中添加内容
Function Performed: User Added Done by: root Login: jhanish Password: ilovesouthpark UID: 1003 GID: 1003 Real Name: Joe Hanish Home: /home/jhanish Shell: /bin/tcsh Date: 07.29.1998
人们可能会推断,可能存在安全漏洞,现在系统已添加了一个新用户 jhanish。因此,我们查看 /etc/passwd 条目,看看还发生了什么。
jhanish:x:0:1003:Joe Hanish:/home/jhanish:/bin/tcsh在这种情况下,在将自己添加到系统后,他创建了一个后门,以便在他愿意时以 root 身份访问系统。当然,一个熟练的黑客不会留下这样的痕迹,但只是随便玩玩的人很容易被抓住。
您可能希望设置一个 cron 作业,每周或每月运行 loginterp.pl 以生成报告文件,并通过电子邮件自动发送给管理员。例如
6 0 1 * * root /usr/local/bin/loginterp.pl | mail -s UserMGRLogs root,billing
User Manager 构建为所有用户管理功能的基本 shell。作为系统管理员,我意识到每个系统都有独特的功能、操作系统和系统管理员的管理风格。User Manager 为您提供了一个平台,您可以在此平台上创建一个自定义软件包来处理您在管理用户时所做的一切。这将使您有时间做更多有趣的任务,而不必担心是否遗漏了流程中的某个步骤。
此脚本的另一个应用可以是添加 Web 托管支持。托管网站的 ISP 可以自动执行将客户添加到其系统所需的所有步骤。为此,请从 User Manager 框架开始,并添加其他步骤。
例如,我熟悉的一个系统是一家小型 Web 托管公司,它有两个主要服务器。第二个服务器实际上只是一个备份邮件假脱机系统和一个辅助 DNS。即使这只是 User Manager 中添加功能的简单示例,但该概念可以应用于无数的服务器和/或位置。
User Manager 软件位于主系统上。添加 Web 客户后,脚本会外出并构建 DNS 记录,动态重建辅助名称服务器上的 /etc/named.boot 文件,并将配置传递给辅助名称服务器,并重建其 /etc/named.boot 文件。构建完所有配置后,它会重新加载每个名称服务器的数据库。
完成所有 DNS 后,它会处理 /etc/sendmail.cw 文件(此步骤总是给我带来问题),并向 sendmail 发送 HUP 信号,使其识别更改。完成该操作后,它实际上会添加用户帐户。然后,它会动态构建 httpd 配置以及 stats 软件包配置。
