摘要
本文介绍 Korn shell 脚本的两个示例:getusers.ksh 和 makeusers.ksh。getusers.ksh 脚本示范如何从“网络信息服务 (NIS)”数据库中提取用户名,makeusers.ksh 脚本则示范如何从第一个脚本的输出文件创建 Windows 用户帐户。
| 简介 | |
| 提取用户名 | |
| 创建 Windows 用户 | |
| 结论 |
要在具有大量现有 NIS 用户的环境中成功实现 Microsoft® Windows® Services for UNIX 3.5 (SFU 3.5),您同样需要创建 Windows® 环境中的用户。如果现有的 NIS 服务器要继续为 UNIX 和 Linux 用户提供身份验证,则要将用户加入到 Windows 环境中就不能使用所提供的“NIS 迁移向导”。
两个示例脚本已创建,它们示范了管理员如何将 NIS 用户的当前列表提取到简单的文本文件中,然后使用该文本文件创建 Windows 环境中的用户。这两个脚本的名称分别为“getusers.ksh” 和“makeusers.ksh”。
这些脚本的运行环境为 Korn shell。它们使用了 Korn shell 的功能,因此在其他 shell(如 bash shell)中运行时需要进行修改。但是,在多数 UNIX 版本的 Korn shell 中、多种 Linux 平台上的 pdksh shell 中、以及 SFU 3.5 包含的 ksh shell 中,它们都应该能够正常运行。
注意:这些脚本并不是用来代替“NIS 数据迁移向导”的。“NIS 数据迁移向导”用于将 NIS Master 迁移到 Microsoft® Active Directory®。有关“NIS 数据迁移向导”的更多信息,请参见 Server for NIS 下的 SFU 3.5 帮助文件。
脚本getusers.ksh 用于从 NIS 数据库中提取用户名和与用户(通常是用户的全名)相关的备注字段的列表。该脚本默认只提取用户 ID (UID) 大于或等于 500、主要组 ID (GID) 大于或等于 100 的用户。UID 和 GID 的最大值都为 65532。两者的最小值和最大值都可以从命令行进行配置。
将脚本放在您选择的位置。它应该位于 NIS 客户端计算机上,可由拥有足够运行权限的任何帐户运行ypcat passwd. 工作文件和输出文件被写入 /tmp. 该脚本的默认输出文件为“/tmp/userlist.out”。该文件是一个用户名和与用户名相关的备注字段的列表,按照 UID 排序。但请注意,UID 没有包括在该输出文件中。
作为示范脚本,getusers.ksh 仅提取两个字段,不过需要时可以修改该脚本以提取更多字段。
脚本getusers.ksh 的语法如下:
getusers.ksh [-dh] [-f filespec] [–g n][–G n] [–u n] [–U n]
支持的选项有:
-d | 调试模式。启用此标志时,脚本会更加详细。 |
-h | 帮助 – 输出简短的帮助信息 |
-f filespec | 指定输出文件的名称和位置(默认为 /tmp/userlist.out) |
-g | 要提取的最小 GID |
-G | 要提取的最大 GID |
-u | 要提取的最小 UID |
-U | 要提取的最大 UID |
脚本getusers.ksh 使用了 Korn shell 函数支持,以将脚本划分为离散元素和自包含元素。由于函数必须在创建后才能使用,所以这些函数全部位于脚本的起始处。
脚本中的函数如下:
Usage() | 输出简单的帮助屏幕 |
Exceptions() | 回显所有错误消息并退出 |
Parse_cmd() | 处理命令行选项 |
Set_Inits () | 处理变量的初始化 |
Set_MinUID () | 设置最小 UID |
Set_MinGID () | 设置最小 GID |
Set_MaxUID () | 设置最大 UID |
Set_MaxGID () | 设置最大 GID |
Set_OutFile () | 设置输出文件的名称和位置 |
Create_tmpfile () | 创建临时工作文件 |
Create_awkfile () | 创建实际工作的 awk 命令文件 |
Get_Users () | 查询 NIS 数据库并按照 UID 对用户进行排序,同时将查询结果输出到临时工作文件 |
Print_Vars () | 输出变量的当前值(用于调试) |
Cleanup () | 若不在调试模式下,则清除工作文件 |
实际程序流如下:
基于 shell 环境设置初始 DEBUG 状态。如果 shell 环境定义了 DEBUG 变量并且值大于 0,那么 DEBUG 为“真”。 | ||||||||
分析命令行选项。
| ||||||||
将各变量设置为默认值或在命令行中输入的值。 | ||||||||
创建临时工作文件用以保存已排序的用户名列表。 | ||||||||
创建一个awk 命令文件,用以控制从数据库中实际提取哪些用户。 | ||||||||
从 NIS 数据库提取用户。 | ||||||||
处理用户列表,仅获取值在 UID 和 GID 的最小值和最大值之间的用户,将结果写入输出文件。 | ||||||||
除非 DEBUG 为“真”,否则清除所有工作文件。 |
脚本getusers.ksh 是使用了 Korn shell 函数的模块脚本。因此可以对它进行修改以满足您在特定环境中的需要。只需简单的修改就可以使用该脚本从/etc/passwd 而不是从 NIS 数据库中提取用户列表。需要的全部工作就是使用“cat /etc/passwd”更改Get_Users() 函数中的命令“ypcat passd”。
脚本makeusers.ksh 用于在当前 Active Directory 域上下文中创建新的 Windows 用户。要在该域中创建用户,脚本必须运行在 Interix Korn shell 中,并且必须由具有足够权限的用户运行。这意味着,在默认情况下,它必须在 Domain Admins 组的成员用户上下文中运行。此脚本取决于getusers.ksh 脚本(默认文件名为userlist.out)的输出文件或手动创建的类似文本文件。
将这个脚本放在您选择的位置,并把getusers.ksh 脚本的输出文件放在相同位置。应该在与 Active Directory 域控制器有良好连接性的计算机上运行脚本。输入文件是一个用户名和与用户名相关的备注字段的列表,按照 UID 排序,尽管 UID 并不包括在文件中。
作为示范脚本,makeusers.ksh 在创建新用户时仅使用了一个相对有限的字段集。使用 NET USER 命令会有更多可用字段,并且如果要求额外的灵活性,NET USER 还可使用其他的字段。假如每个帐户获得完全相同的初始密码 (InitialCreate),除非指定了“-e”标志,否则创建帐户时请将 /ACTIVE 标志设置为 NO,以防止交互式登录。
警告:使用已知密码和已启用的帐户创建用户,可能会有安全风险。
脚本makeusers.ksh 的语法如下:
makeusers.ksh [-dhef <filename>]
支持的选项有:
-d | 启用调试(详细)模式 |
-e | 用户帐户创建为 Active |
-f <infile> | 输入文件名(默认为:./userlist.out) |
-h | 输出简短帮助屏幕 |
脚本makeusers.ksh 使用了 Korn shell 函数支持,以将脚本划分为离散元素和自包含元素。因为函数必须在创建后才能使用,所以这些函数全部位于脚本的起始处。脚本中的函数如下:
Usage() | 输出简单帮助屏幕 |
Exceptions() | 回显所有错误消息并退出 |
Parse_cmd() | 处理命令行选项。 |
Set_Inits () | 处理变量的初始化。 |
Init_Log() | 创建并初始化日志文件。 |
Set_Inits () | 处理变量的初始化。 |
Set_Options () | 初始化将使用的 NET USER 选项。 |
Set_InFile () | 设置输入文件名和位置。默认值为:“./userlist.txt”。 |
Print_Vars () | 输出变量的当前值(用于调试)。 |
Create_User () | 执行创建用户的实际工作。将错误重定向到日志文件,以备以后验证。 |
实际程序流如下:
基于 shell 环境设置初始 DEBUG 状态。如果 shell 环境设置了 DEBUG 变量且值大于 0,则无论是否使用命令行开关,脚本都将在调试模式下运行。 | ||||||||||
初始化日志文件并屏蔽错误,将这些错误重定向到日志文件。 | ||||||||||
分析命令行选项。
| ||||||||||
将各变量设置为默认值或在命令行中输入的值。 | ||||||||||
创建用户。 |
和所有此类脚本一样,您可以修改makeusers.ksh 以满足您在特定环境中的需要。一个明显的更改就是为新用户设置额外选项。但请注意,要正确引用可能需要非常细心—在命令行中正确不一定在脚本中也如您期望的那样正确。在真正的用户使用前,请彻底地测试修改过的脚本。
在任何有许多用户的组织内,要创建与您现有的 NIS 基础结构相匹配的 Windows 用户,可能会是一个枯燥和费力的过程。但将这个过程编写为脚本,可使工作变得简单、直接并且高度可重复。每个新用户都通过一组相同的默认值创建,因此与其现有的 NIS 用户能够准确匹配。脚本getusers.ksh 和makeusers.ksh 是简单的示例脚本,它们使用与现有 NIS 帐户相同的用户名来创建 Windows 用户帐户。可以直接使用这些脚本,或根据您的环境对它们进行适当的和必要的修改后再使用。