💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# htdbm - 操作DBM密码数据库 `htdbm`用于操作由`mod_authn_dbm`提供的HTTP基本认证所使用的保存用户名和密码的DBM数据库文件。参见`dbmmanage`文档以获得这些DBM文件的更多信息。 ## 语法 `**htdbm** [ -**T**DBTYPE ] [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] [ -**x** ] filename username` `**htdbm** -**b** [ -**T**DBTYPE ] [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] filename username password` `**htdbm** -**n** [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] username` `**htdbm** -**nb** [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] username password` `**htdbm** -**v** [ -**T**DBTYPE ] [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] filename username` `**htdbm** -**vb** [ -**T**DBTYPE ] [ -**c** ] [ -**m** | -**d** | -**p** | -**s** ] [ -**t** ] [ -**v** ] filename username password` `**htdbm** -**x** [ -**T**DBTYPE ] [ -**m** | -**d** | -**p** | -**s** ] filename username` `**htdbm** -**l** [ -**T**DBTYPE ]` ## 选项 `-b` 使用批处理方式。也就是直接从命令行获取密码而不进行提醒。使用这个选项需要特别注意,因为命令行中的密码是**清晰可见**的。 `-c` 创建passwdfile文件。如果passwdfile已经存在,那么将被清空并改写。该选项不能和 `-n` 同时使用。 `-n` 在标准输出上显示结果而不是更新数据库。这个选项改变了命令行语法,因为passwdfile参数(通常是第一个)被忽略了。该选项不能和 `-c` 同时使用。 `-m` 使用MD5加密密码。在Windows, Netware, TPF上这是默认方法。 `-d` 使用`crypt()`对密码进行加密。在Windows, Netware, TPF以外的平台上这是默认方法。虽然有可能在所有的平台上被`htdbm`支持,但是在Windows, Netware, TPF上,该方法不能被`httpd`所支持。 `-s` 使用 SHA 对密码进行加密。这种方法易于通过LDAP目录交换格式和Netscape server进行交换。 `-p` 使用明文密码(不加密)。虽然`htdbm`在所有平台上都支持这种方法,但是`httpd`只能在Windows, Netware, TPF上支持这种方法。 `-l` 在标准输出上显示每一个用户名以及对应的注释。 `-t` 将最后一个参数解释为注释。指定这个选项可以在命令行中添加一个额外的字符串,这个字符串可以被存储在数据库中对应用户名的"Comment"字段中。 `-v` 校验用户名和密码。程序将会显示一个密码是否正确的信息。如果密码不正确程序退出时的错误代码将是"3"。 `-x` 删除用户。如果指定的用户名存在与数据库中,则删除该用户。 `filename` DBM文件的文件名。通常不包含 `.db`, `.pag`, `.dir` 后缀。如果同时使用了 `-c` 选项,若DBM文件已存在则更新它,若不存在则创建它。 `username` 在passwdfile中添加或更新记录。若username不存在则添加一条记录,若存在则更新其密码。 `password` 将要被加密存储的明文密码。仅与 `-b` 一同使用。 `-TDBTYPE` DBM文件的类型(SDBM, GDBM, DB, "default")。 ## Bugs 实际上存在有许多不同的DBM文件格式,你的系统中也可能存在不止一种的支持库,常见的有SDBM, NDBM, GNU GDBM, Berkeley/Sleepycat DB 2/3/4 。麻烦的是,所有这些库都使用了不同的文件格式,因而你必须确保filename所采用的格式能够为`htdbm`所接受。目前,`htdbm`无法自己确定所查找的文件的DBM类型。如果使用了错误的格式,则简单返回nothing ,或者建立一个不同名称的不同的DBM文件,而最坏的情况是,在试图写入这个文件时,可能会破坏该DBM文件。 在大多数Unix系统中,都可以用`file`程序来查看DBM文件的格式。 ## 返回值 `htdbm`仅在用户名和密码被成功存入数据库或成功更新的情况下返回"`0`"。若访问文件发生错误则返回"`1`";若命令行语法错误则返回"`2`";若密码验证失败则返回"`3`";若正在进行中的操作被打断则返回"`4`";若值(username, filename, password, 计算结果)长度超标则返回"`5`";若用户名包含非法字符(参见[限制](#calibre_link-108))则返回"`6`";若指定的文件不能被正确识别则返回"`7`"。 ## 示例 ``` htdbm /usr/local/etc/apache/.htdbm-users jsmith ``` 添加或修改用户`jsmith`的密码。密码将被提示输入。在Windows平台上,密码将使用Apache修改过的MD5算法进行加密;在其它平台上将使用`crypt()`进行加密。如果指定的文件不存在,`htdbm`将只返回一个错误代码,而不做其它任何事。 ``` htdbm -c /home/doe/public_html/.htdbm jane ``` 创建一个新文件并在其中添加一条用户`jane`的记录。密码将被提示输入。如果文件存在但是不能被读取或写入,则不会有任何记录被修改,同时`htdbm`将会显示一个错误信息并返回一个错误代码。 ``` htdbm -mb /usr/web/.htdbm-all jones Pwd4Steve ``` 将来自命令行的密码(`Pwd4Steve`)使用MD5算法加密,并将其存入指定的文件。 ## 安全方面的考虑 Web密码文件(比如由`htdbm`管理)_不应当_存在于网络空间中,即不能被客户端有机会访问。 我们反对使用 `-b` 选项,因为密码将以明文的形式出现在命令行中。 ## 限制 在Windows和MPE平台上,用`htdbm`加密的密码最大长度是`255`字符。超出部分将被截断。 `htdbm`使用的MD5加密算法已经被Apache修改过了,仅能够被Apache识别,不能被其它Web服务器识别。 用户最大长度是`255`字节,并且不能包含冒号(`:`)。