gpt4 book ai didi

javascript - 通过node.js登录Linux

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:56 25 4
gpt4 key购买 nike

我目前正在构建一个(实验性)Web 应用程序来登录和控制 Node.js 中的(Linux)服务器(特别是用于监控)。为了进行身份验证,我想使用 linux 用户。

无论是通过/etc/passwd/etc/shadow,读取信息效果都很好,但我无法验证(cryptobcrypt不起作用),通过child_process.exec我可以执行openssl passwd,这只生成md5(1),但密码存储在/etc中/shadow 使用 SHA512 (6) 加密。有什么办法让我错过吗?

我尝试的另一种方法是使用login命令(通过child_process.spawn)。但这总是以代码 1 退出。所有其他命令(例如apt-get update)均按预期工作。

PS:我的服务器在root上运行,所以权限应该没有问题。

感谢您的帮助

编辑:正如我已经指出的,这是一个实验项目,所以我不打算在生产中使用它,我只是对它感到好奇。有点类似于PCMonitor

我知道以 root 身份运行它不是一个好主意,这也不是我在生产应用程序中使用的方式。

澄清:我的问题更多的是,为什么除了 login 之外,为什么每个命令(到目前为止我已经尝试过)都可以与 child_process.spawn 配合使用。以及我如何生成带有盐的 SHA512 密码(与 /etc/shadow

中的密码完全相同)

最佳答案

这个问题相当老了,但我偶然发现了一个类似的问题,根据系统用户数据库验证输入的密码。也许这可以帮助其他有相同任务的人。

我终于通过 expect 做到了工具。
所以我想出了这个期望脚本:

#!/usr/bin/expect

set username [lindex $argv 0];
set password [lindex $argv 1];
set timeout 5

puts "$username $password"

if {[file exists /usr/bin/su]} {
spawn /usr/bin/su $username
}
if {[file exists /bin/su]} {
spawn /bin/su $username
}

expect -exact "Password:"
send "$password\n"

expect {
-ex "su: " {
puts "login failed"
exit 1
}
-ex "@" {
puts "login successful"
send "exit\n"
exit 0
}
timeout {
puts "login failed (timeout)"
exit 1
}

default {
puts "login failed (unknown reason)"
exit 1
}
}

如果将此脚本保存为 pw_check.sh,则可以在 Nodejs 中像这样调用它

var child = execFile(
'/path/to/pw_check.sh',
[username,password],
{stdio: ['pipe', 'pipe', 'pipe']});

child.on('exit', function(code, signal) {
if (code === 0) {
//pw check was successful
} else {
console.log("Authentication error.")
//pw check failed
}
});

我必须承认这不是一种非常安全的方法,但我还没有找到更好的方法。创建单独的用户数据库对我来说是没有选择的。

关于javascript - 通过node.js登录Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com