K-12 学校系统账户管理
K12Admin 是一款专门为 K-12 学校系统设计的账户管理系统。它可以用于从中央位置管理各个学校 Linux 服务器上的账户。该系统的界面是基于网络的。学校中被授予账户管理权限的教师将能够在其所在学校内创建学生和教职工账户、删除账户、创建/删除本地组、修改本地和全局组成员资格以及更改密码。
K12Admin 在加拿大不列颠哥伦比亚省的海岸山脉学区开发。它最初用于管理 NT 域中的账户。我们需要一种方法,允许一所学校的教职工为其学校创建账户,而不会意外地干扰其他学校的账户。Web 界面和数据库在 Linux 机器上运行,账户更改通过 TCP/IP 连接在 NT 主域控制器上进行。此后不久,我们在每个城镇都设置了一台 Linux 服务器,用作身份验证代理服务器。这些服务器上的 Squid 日志被复制到主账户管理计算机,并通过扫描 URL 中的关键词列表来分析潜在的不当使用行为。
在我们为账户管理设置 Linux 服务器之前,许多账户已经在 NT 系统上创建,因此我们没有这些账户的 UNIX 密码。为了解决这个问题,我们修改了 Squid 代理服务器的源代码,以便在代理身份验证失败时,将用户重定向到一个页面,他们可以在该页面“注册”他们的账户。他们在此处输入用户名和密码,然后与 NT 服务器上运行的 POP 服务器进行核对,然后再添加到 Linux 服务器上的密码数据库中。
一旦我们拥有所有用户的 UNIX 密码,就可以在学校中使用 Linux 服务器了。
创建账户时,姓名列表会被键入或粘贴到文本框中。唯一的用户 ID 是使用用户的姓名创建的。K12Admin 目前有两种不同的用户 ID 创建方案。一种方案使用名字的一部分和完整的姓氏。在这种方案下,我的用户 ID 可能是 stonnesen、sttonnesen、stetonnesen 等,直到找到唯一的用户 ID。第二种方案使用名字和姓氏的首字母。在这种方案下,我的用户 ID 可能是 stevet、stevet2 或 stevet3,直到找到唯一的用户 ID。如果您的学区关注保护儿童隐私,则第二种方案可以创建更匿名的用户 ID。
创建账户时,管理员可以为每个用户 ID 分配单独的密码,可以为所有创建的账户分配相同的默认密码,也可以为每个账户生成随机密码。目前,生成的随机密码由一个三个字母的单词、一个数字以及另一个三个字母的单词组成(例如,far6yet)。使用我使用的单词列表,这将产生略低于 2,000,000 个密码的密码空间。这并不是您能要求的最佳安全性,尤其因为我的三个字母单词列表现在已相当公开。我正在考虑添加一个选项来生成真正随机的密码(例如 “a5Tr43Zp”),但这些密码对于学生来说很难记住。最好还是指导学生(和教职工)良好的密码选择技术,并让他们立即更改分配的密码。K12Admin 具有系统范围的全局组,这些组授予用户特殊访问权限
Web 用户:成员可以使用代理服务器进行身份验证以访问 Web。
拨号用户:成员可以访问拨号池。
账户管理员:成员可以管理其所在学校的账户。
应用程序管理员:成员对其所在学校服务器上的应用程序共享具有读/写访问权限。
图书馆管理员:成员对其所在学校服务器上的图书馆软件共享具有读/写访问权限。
学校管理员:成员可以访问学校管理软件的共享。

图 3. 学校管理员看到的账户管理菜单
Web 管理员:成员可以访问学校 Web 服务器的根目录。
域管理员:成员可以访问系统中的所有学校,并且可以设置系统范围的配置选项。
除了全局组之外,还可以创建本地组,这些组对于每个学校都是唯一的。这些组可以用于创建班级组(七年级、四/五年级、14 班等)或其他逻辑分组(年鉴社、计算机社等)。
账户可以由账户管理员或用户修改。用户可以更改密码、查看其账户的安全审计,或查看其账户可能不当的 Web 使用行为。账户管理员可以更改密码以及将用户添加到组/从组中删除用户。
在本文的其余部分,我将提到三种不同的类型的计算机。k12admin-server 将是学区的中央账户管理计算机。k12admin-client 计算机通常是学校中的 Linux 服务器,它们从 k12admin-server 计算机更新其账户信息。这些计算机很可能用作 Web 代理、文件服务器、Web 服务器、电子邮件服务器等。最后,我将把我们的用户使用的计算机称为 工作站。
K12admin-client 计算机每小时运行一次更新。更新使用 rsync 和 ssh 安全快速地从 k12admin-server 复制文件,并运行一个名为 “setup” 的脚本,该脚本是这些文件的一部分。客户端上的密码文件(passwd/group、shadow/gshadow、smbpasswd、squid.auth、apache.auth)此时会更新。每小时更新还会对学校服务器进行一些审计。具体来说,它会扫描日志文件,并生成已使用哪些账户以及何时使用的概要。此信息被发送回 k12admin-server 计算机,在那里它被插入到用户可以查询的审计数据库中。这允许用户确定他们的账户是否被不当使用。

图 6. 用户 “demoteacher” 的账户使用情况审计
还会扫描 k12admin-client 计算机上的 Squid 代理日志文件,以查找潜在的不当使用行为。日志文件会扫描关键词列表中的关键词。这些关键词可以分为不同的类别(色情、聊天室、游戏、可执行文件下载),并且可以按学校或按服务器启用或禁用。同样,此信息会传输到 k12admin-server 上的数据库,学校管理人员可以随时查看。每周还会向学校管理人员发送概要电子邮件。
可以从网页上配置各个 k12admin-client 服务器,并提供多种选项。它们可以连接到一个或多个学校。您也可以将多个服务器连接到同一所学校。这允许您为通过以太网连接的两所小学校使用一台服务器,或者在一所大学校中使用多台服务器。服务器可以配置为更新 passwd/group 文件、更新 smbpasswd 文件、更新 Squid 身份验证文件、更新 Apache 身份验证文件、为新账户创建主目录以及清理旧主目录,可以通过直接删除它们或将它们移动到临时保留区域来清理。
K12Admin 系统目前的功能已经相当完善。但是,我的目标是创建一个服务器设备,可以放置在学校中,并完全通过 K12Admin 界面进行管理。我现在在学校看到的情况是,会给老师“释放”时间来维护学校的网络。当各个学校的老师投入大量时间学习如何运行他们选择的网络操作系统并设置他们的网络时,试图“同质化”网络是很困难的。为了使 K12Admin 成为可行的替代方案,我认为需要克服一些障碍
服务器管理必须易于学习。由于 K12Admin 专门针对 K-12 环境而设计,因此它应该比普通的、开箱即用的网络操作系统更具优势。
服务器必须足够灵活,以满足 K-12 环境中所有用户的需求。由于我只了解一个学区的工作方式,因此我需要其他用户的反馈,以确定满足他们的需求所需的选项。
当问题确实发生时,应该易于诊断,无论是对于技术人员还是学校的用户。我已经有一些问题诊断工具,用于监控磁盘空间、交换空间和“卡住”的打印机后台处理程序。这些工具需要扩展。我曾希望整合 “Big Brother” 网络监视器来处理其中的一部分,但许可证过于严格。
以下是计划添加到 K12Admin 的列表
在客户端服务器上创建默认共享(由 Samba、Netatalk、NFS、Coda 等导出)
应用程序:客户端计算机使用的通用应用程序,无论是 Macintosh、Windows、Linux 还是其他任何系统。当然,每种类型的客户端计算机都将有单独的共享。
图书馆:用于图书馆管理软件的共享。
管理:用于学校管理软件的共享。
本地组:共享为学校内创建的每个本地组保留一个目录,只有该组的成员才能访问。此共享将包含一个教师具有写入权限的班级文件夹、一个投递箱和一个每个人都可以写入的公共文件夹。这使得与您的班级或其他逻辑组的成员共享文件变得容易。
HTML:Web 服务器根目录。
CD:一个可以复制 CD 以便共享回客户端计算机的共享。
默认:用于创建新用户主目录的骨架文件放置在此处。
重建:用于存储客户端工作站映像以进行重建的共享。
更多服务器配置选项,例如配置应在特定服务器上运行的服务(即,dhcpd、Samba、Netatalk、Apache、Squid 等)的能力。
监控已配置为在每个服务器上运行的服务的状态。如果许可证允许,可能会集成 “Big Brother” 网络监控工具。
与 Bruno Vernier 的 EDUML 标准集成。
可能与 Roster 项目集成。Roster 是一个为大学/学院应用程序设计的服务器配置系统。它包含更新 Linux 以外的服务器类型的方法。
模块化(OOP!)数据层(Roster 已经有这个,可能可以使用)。
扩展 Squid 代理扫描以扫描 Squid 缓存中的 HTML 文件,使用 Squid 日志将文件与 URL 匹配。
能够将用户添加到多个学校。对于在两所学校兼职教学的教职工或可能在学区所有学校工作的学区教职工很有用(后一种情况很特殊,可能应该区别对待)。
系统文件的通用配置,例如 Samba 配置、Squid 配置、Netatalk 配置、网络配置(dhcpd、IP 伪装等,使用私有 IP 地址)。
支持拥有“备份” k12admin-server 机器,这些机器将其数据库与主 k12admin-server 同步,并且可以用于自动故障转移保护。
提供了用于在 Debian 和 Red Hat 系统上安装的软件包。还有一个 tar 存档文件,用于在其他系统上安装。
有两个软件包:k12admin-server 和 k12admin-client。k12admin-server 软件包应仅安装在将作为您学区的主账户管理计算机的计算机上。k12admin-client 软件包应安装在每台将从 k12admin-server 计算机更新的机器上。
k12admin-server 软件包包含使用机器作为中央账户管理服务器所需的文件。通常,您只想在您学区的一台机器上安装 k12admin-server。可以将 k12admin-client 软件包安装在与 k12admin-server 软件包相同的机器上,尽管出于安全原因,这可能不是理想的做法。最好手动管理服务器计算机上的账户,这样学生和教职工在服务器上没有账户,也不太可能尝试在那里捣乱。
通过运行以下命令安装 k12admin-server 软件包
dpkg -i k12admin-server*deb
或
rpm -i k12admin-server*rpm(如果是升级,请使用 -U 代替 -i)在您存储软件包的目录中。如果是首次安装,您将被告知以 root 身份运行 k12admin-server.setup 以创建 MySQL 数据库。此文件在安装软件包时放置在 /usr/bin/ 目录中,因此它应该在您的路径中。
如果您从 tar 文件安装软件包,请解压缩存档,转到 (cd) k12admin-server* 目录并运行 make install 以安装软件包。
为了创建 MySQL 数据库,您需要输入 MySQL 服务器的 root 密码。请注意,MySQL root 密码不是与您的普通 root 密码相同。当安装该软件包时,您应该已被提示输入 MySQL 服务器的密码。该脚本将允许您不断尝试密码,直到成功为止。如果您的 MySQL root 密码为空,只需按 ENTER 键即可。如果是这种情况,k12admin-server 软件包将提示您输入新密码,因为拥有空的 MySQL 密码存在严重的安全风险。
k12admin-server.setup 要求的第二个密码是 k12 MySQL 用户的密码。脚本使用此用户连接到 MySQL 数据库。您无需记住此密码,因为它存储在 /etc/k12admin.MySQL.pass 文件中,该文件仅可由 k12admin 和 www-data 用户读取。您可以随时通过重新运行 k12admin-server.setup 程序来更改此密码。
现在您必须配置 Apache,以便它知道 k12admin 文件位于何处。配置并重新加载 Apache 后,您应该能够通过以下网址访问账户管理系统http://您的服务器机器/k12admin/从任何 Web 浏览器。使用用户名 demoteacher 和密码 demopass 登录。
我强烈建议使用 apache-ssl (http://www.apache-ssl.org/) 来加密 Web 浏览器和 k12admin-server 之间的数据包。如果可能有人嗅探正在传输的数据包,则尤其如此。HTTP 标准中包含的基本身份验证未加密,如果您不使用安全服务器,则可以轻松地从每个传出的 Web 请求中获取您的密码。
您必须编辑 Apache 配置文件以启用账户管理系统。将以下行添加到 Apache 的 access.conf 文件的底部
Alias /k12admin/ /var/k12admin/web/ ScriptAlias /k12admin-cgi/ /var/k12admin/webscripts/ <Directory /var/k12admin/> AllowOverride AuthConfig </Directory>
您可能还需要更改 Apache Web 服务器进程的用户和组。默认情况下,它可能设置为 “nobody”。Web 服务器进程必须有权访问包含敏感账户信息的数据库。访问数据库的密码存储在 /etc/k12admin.MySQL.pass 中,并且只能由 www-data 用户和 k12admin 组读取。因此,必须让 Apache 进程以 www-data 身份运行。如果 www-data 账户尚不存在,则在安装 k12admin-server 时会创建该账户。
要设置 Apache 进程的用户和组,请更改 Apache 的 httpd.conf 文件中的以下行
User www-data Group www-data
在进行这些更改后重新加载 Apache。在 Debian 系统上,通过运行以下命令重新加载 Apache
/etc/init.d/apache reload或
/etc/init.d/apache-ssl reload在 Red Hat 上,运行
/etc/rc.d/init.d/httpd reload
k12admin-client 软件包包含使用来自 k12admin-server 机器的信息更新机器所需的文件。
通过运行以下命令安装 k12admin-client 软件包
dpkg -i k12admin-server*deb
或
rpm -i k12admin-server*deb(如果是升级,请使用 -U 代替 -i)在您拥有软件包的目录中。如果是初始安装,您将被要求以 root 身份运行 k12admin-client.setup。
如果您从 tar 文件安装软件包,请解压缩存档,转到 (cd) k12admin-client* 目录并运行 make install 以安装软件包。
系统将要求您提供 k12admin-server 的名称和该机器的 root 密码。k12admin-server 的名称可以是 IP 地址或主机名(只要主机名可以解析为 IP 地址,当然)。一旦您提供服务器的主机名,安装后脚本将尝试使用 ssh 连接到服务器,以通知服务器它有一个新客户端,并将客户端的 ssh 密钥复制到服务器。ssh 程序将要求您提供服务器机器的 root 密码。root 密码不会由安装后脚本存储在任何位置。如果您希望将 k12admin-client 计算机连接到不同的 k12admin-server 机器,只需重新运行 k12admin-client.setup 程序即可。
安装后脚本完成后,服务器最多需要五分钟才能注意到新客户端并注册新的 ssh 密钥。使用 Web 浏览器访问账户管理系统来配置新客户端。从主菜单中,选择 “域工具”,然后选择 “编辑服务器”。您的新客户端应出现在服务器列表中。选择您的新客户端服务器,然后单击 编辑服务器 按钮,然后进行相应的配置。
每五分钟,服务器上 MySQL 数据库中的数据都会转换为纯文本文件,这些文件可以复制到客户端并用于更新其本地文件。此过程由 /var/k12admin/scripts/server/k12.updateserver 脚本完成。此脚本由 cron 每五分钟以 k12admin 用户身份运行。它也可以手动运行,但必须由 k12admin 用户而不是 root 用户运行。当此脚本运行时,它会在 /var/k12admin/serverdata/ 目录中生成客户端使用的多个文件。此脚本还在 /var/k12admin/lock/ 目录中使用锁定文件,以防止 k12.updateserver 的多个实例同时运行,并防止客户端在文件仍在生成时执行更新。
在 /var/k12admin/serverdata/ 目录中还有另一个关键文件,名为 “setup”。此文件包含用于更新和审计客户端的所有代码。此文件在客户端更新之前复制到客户端,因此如果您尝试添加新功能,请不要在客户端上编辑此文件,而是在服务器上编辑它。
在客户端机器上,更新每小时执行一次。执行更新的脚本是 /usr/bin/k12.updateclient。由于此脚本必须修改关键系统文件,因此它以 root 身份从系统 crontab 文件运行。
如果以交互方式运行,此脚本将执行 /var/k12admin/clientdata/setup,不带命令行参数。为了避免菜单出现延迟,不会执行 rsync。如果需要来自服务器的最新数据,菜单上的一个选项是执行 rsync。
如果使用命令行参数运行,该脚本首先运行 rsync(使用 ssh 作为传输代理)将服务器上 /var/k12admin/serverdata/ 目录中的所有文件同步到客户端上的 /var/k12admin/clientdata/ 目录,然后使用它接收到的相同命令行参数执行 /var/k12admin/clientdata/setup。
如果脚本在没有参数的情况下运行,它将进入交互模式并显示一个选项菜单供您选择。它还会显示在批处理(非交互式)模式下不显示的进度信息。在批处理模式下,可以提供以下参数
k12.updateclient auto:执行所有客户端更新例程。
k12.updateclient passwd:更新所有密码文件(passwd/group/shadow/gshadow/smbpasswd/ squid.auth/apache.auth)。
k12.updateclient audit:对客户端执行安全审计。生成的信息被复制到服务器,并在服务器中插入到数据库的审计表中。
k12.updateclient homedirs:创建新的主目录并清理旧的主目录。
The setup 程序包含以下子例程
auto:运行 passwd、homedirs 和 audit 子例程。这是从 crontab 文件调用的子例程。
rsync:将服务器上 /var/k12admin/serverdata/ 目录中的数据同步到客户端上的 /var/k12admin/clientdata/ 目录。当以交互方式运行 setup 时,此同步不会在菜单显示之前完成,因此如果您需要来自服务器的最新数据,请首先选择此选项。
passwd:根据服务器的配置,更新 passwd、group、shadow、gshadow、smbpasswd、squid.auth 和 apache.auth 文件。
homedirs:创建新的主目录并清理旧的主目录。旧的主目录可以保持不变、删除或移动到临时保留区域 (/var/k12admin/oldhomedirs/),在其中它们会在 30 天后被删除。
audit:在本地服务器上运行安全审计。这将检查各种日志文件并确定已使用了哪些账户。此信息被复制到服务器,并在服务器中添加到数据库的审计表中,以便任何用户都可以查看其账户在何处以及何时被使用。
atalktable:生成 AppleTalk 节点到 AppleTalk 计算机名称的映射。
squid:Squid 代理身份验证文件的审计。
apache:对任何经过身份验证的 Apache Web 服务器访问进行审计。
netatalk:对 AppleTalk 服务的访问进行审计(从 Macintosh 计算机登录)。
samba:对 Samba 服务的访问进行审计(从 Windows 工作站登录)。
ssh:ssh(安全外壳)连接的审计。
squidmonitor:实际上不是安全审计,它在代理日志中搜索任何可能不当的 Web 浏览行为,并将此信息发送回服务器计算机,供学校教职工审核。
Steve Tonnesen (tonnesen@cmsd.bc.ca) 在加拿大不列颠哥伦比亚省黑泽尔顿的海岸山脉学区工作。海岸山脉学区有 30 所学校和 5,000 名学生。