想使用rust开发一个调用su - root切换到root用户的命令程序。已知root用户密码,但是不知道如何实现。

想使用 rust 开发一个调用 su - root 切换到 root 用户的命令程序。已知 root 用户密码,但是不知道如何实现。
希望谁能帮忙提供具体的代码实现。

谢谢!

讨论数量: 12
长日将尽

su 不是 Linux 系统本身的命令吗?

1个月前 评论

是的。就是要用 rust 调用 su - root 代输入密码,不像每次都输入密码。

1个月前 评论
长日将尽 1个月前

不一样的。因为root用户不能直接登录,而且root密码特别复杂,每次都需要登录到普通用户再切换。 所以很头疼。如果您知道怎么用rust实现的话,请指教

谢谢!

1个月前 评论
长日将尽

我没有用 rust 实现过,手上也没有测试环境。从思路上说,rust 有 Command 结构体用来模拟命令调用,而且提供了与父进程通信的方法,应该可以实现,只要父进程等待 Command 子进程结束就行,而后续的命令则都在 su 子进程中执行。

是我的话,我会选择使用 shell 脚本来解决这个问题,网上可以搜到了。

1个月前 评论
长日将尽 (作者) 1个月前

只需要rust完成用户权限切换,不用实现shell功能,切换用户权限之后,需要把shell权限交还回去。rust完成用户切换之后,就不需要存在了撒。

1个月前 评论
长日将尽

这个我不知道怎么做,我目前了解到的,可以用 Command 模拟命令切换到子 shell,但是我不知道切换用户的原理是什么。这跟你的需求正好反了:laughing: 。如果不切换到有权限的用户就没有意义了。我在网上搜到的也是建议使用 shell 脚本:python脚本切换用户

1个月前 评论

就是不知道具体用 rust 如何实现 :joy:。 use std::process::Command; use std::process::Stdio; use std::io::Write;

fn main() { let mut root_password = String::from("root"); println!("{root_password}"); let output = Command::new("sh") .arg("-c") .arg("su - root") .output().unwrap_or_else(|e| { panic!("failed to execute process: {}", e) });

if output.status.success() {
    let s = String::from_utf8_lossy(&output.stdout);

    print!("rustc succeeded and stdout was:\n{}", s);
} else {
    let s = String::from_utf8_lossy(&output.stderr);

    print!("rustc failed and stderr was:\n{}", s);
}

}

1个月前 评论
mengling2012 (作者) (楼主) 1个月前
长日将尽 1个月前
  • 可以试试这个库:github.com/redox-os/termion
  • 一个比较底层的库,比较适合嵌入到自己的项目中。也许能参考这个库实现你的功能哈~
    • 他可以实现从rust控制终端输入密码并且隐藏输入,
    • 还能实现颜色自定义,光标移动等。
1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!