3个不稳定版本
0.2.1 | 2023年5月18日 |
---|---|
0.2.0 | 2023年5月18日 |
0.1.0 | 2023年5月18日 |
#549 in 身份验证
29KB
302 行
pwcheck
为Linux、MacOS和Windows提供一个单独的函数来检查和验证本地用户账户的密码。
由于https://github.com/1wilkens/pam/issues/25,目前不支持在Linux上使用musl。将会导致SIGSEGV!
安装
[dependencies]
pwcheck = "0.2"
依赖项
- 在
Linux
上,此库利用PAM绑定,因此需要PAM开发者头文件。- Debian/Ubuntu:
apt install libpam0g-dev
- Fedora/CentOS:
dnf install pam-devel
(如果您遇到“stddef.h not found”,您可能还需要dnf install clang
)
- Debian/Ubuntu:
- 在
MacOS
上,此库利用dscl
,不需要额外的任何东西。 - 在
Windows
上,此库利用windows-rs,不需要额外的任何东西。
用法
use pwcheck::*;
fn main() {
// Check if some username/password combo is valid
match pwcheck("username", "password") {
PwcheckResult::Ok => println!("Correct username & password!"),
PwcheckResult::WrongPassword => println!("Incorrect username & password!"),
PwcheckResult::Err(x) => println!("Encountered error: {x}"),
}
}
工作原理
Linux
在Linux平台上,此库利用PAM与登录服务以非交互式方式通过用户名和密码执行身份验证。
您可以使用Linux模块的实现指定不同的服务
use pwcheck::PwcheckResult;
fn main() {
#[cfg(target_os = "linux")]
{
use pwcheck::linux::{Method, pwcheck};
match pwcheck(Method::Pam {
username: "username",
password: "password",
service: "my-service",
}) {
PwcheckResult::Ok => println!("Correct username & password!"),
PwcheckResult::WrongPassword => println!("Incorrect username & password!"),
PwcheckResult::Err(x) => println!("Encountered error: {x}"),
}
}
}
请注意,PAM身份验证仅适用于用户名和密码,如果以下任一条件成立:
a. 用户名与执行身份验证的用户匹配 b. 执行身份验证的用户具有提升的权限
换句话说,普通用户不能验证其他用户的用户名和密码。这将返回一个关于密码错误的错误。
MacOS
在MacOS平台上,此库利用执行dscl
来使用本地目录的数据源 "." (.) 验证用户。
您可以使用MacOS模块的实现指定不同的数据源
use pwcheck::PwcheckResult;
fn main() {
#[cfg(target_os = "macos")]
{
use pwcheck::macos::{Method, pwcheck};
match pwcheck::macos::pwcheck(Method::Dscl {
username: "username",
password: "password",
datasource: "/Login/Default",
timeout: None,
}) {
PwcheckResult::Ok => println!("Correct username & password!"),
PwcheckResult::WrongPassword => println!("Incorrect username & password!"),
PwcheckResult::Err(x) => println!("Encountered error: {x}"),
}
}
}
Windows
在Windows平台上,此库利用LogonUserW函数尝试将用户登录到本地计算机。
您可以直接执行以下Windows模块实现:
use pwcheck::PwcheckResult;
fn main() {
#[cfg(windows)]
{
use pwcheck::windows::{Method, pwcheck};
match pwcheck::windows::pwcheck(Method::LogonUserW {
username: "username",
password: "password",
}) {
PwcheckResult::Ok => println!("Correct username & password!"),
PwcheckResult::WrongPassword => println!("Incorrect username & password!"),
PwcheckResult::Err(x) => println!("Encountered error: {x}"),
}
}
}
请注意,此功能要求运行程序具有设置在SeTcbPrivilege 权限,以便以除启动程序的用户以外的用户身份登录。因此,可以安全地使用此功能来验证运行此程序的用户账户,但否则需要非常高级的权限来验证密码,通常是运行程序时以管理员身份出现时可以看到的权限。
许可证
此项目根据您的选择许可如下:
Apache License, Version 2.0, (LICENSE-APACHE 或 apache-license) MIT 许可证 (LICENSE-MIT 或 mit-license)。
依赖项
~0–38MB
~534K SLoC