如何让 Mac 操作系统记住之前的身份验证。从我的可执行文件

如何让 Mac 操作系统记住之前的身份验证。从我的可执行文件

我正在编写一个小型的 unix 可执行文件,它可以手动更改我的 macbook 的系统时间。当然,这需要密码,因此我使用 system() 函数与终端交互并使用 echo 和 sudo 更改日期。

见下文:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

    // Retrieve password:
    printf("Enter Sudo Password:\n");

    char *pswrd;
    pswrd = getpass("Password: ");
    char strA[512];

    // Instruction to manually change the date:
    char *strA1 = "echo \"";
    char *strA2 = "\" | sudo -S date 020821002014";

    // Stitch fields into one string:
    strcat(strA, strA1);
    strcat(strA, pswrd);
    strcat(strA, strA2);

    // Run string in Terminal:
    system(strA);
}

您可以创建一个 Unix 可执行文件来测试。

在终端行中,它相当于:Sudo date 020821002014

> 无论如何,我的问题是:

我不喜欢每次运行可执行文件时都必须输入密码。有谁建议输入一次管理员密码并让我的 MacBook 将来识别可执行文件,这样我只需单击可执行文件并轻松更改日期即可。

哦,我只选择了日期,因为它通常需要密码,但这当然可以推广到其他管理员指令。

我考虑过的事情:

  1. 使用 root 超级用户,但这似乎有点矫枉过正 - 必须有另一种方法
  2. 直接将密码写入 .c 代码,但这听起来很粗略,并且对于多个用户来说不容易扩展

答案1

另一种方法(不会留下密码,也不会将其暴露给各种进程列表和诊断工具)是NOPASSWD在配置文件中设置一个条目sudo,仅允许date运行命令,可能是一个确切的date命令:

fixmeyourusernamehere ALL=(root) NOPASSWD: /bin/date 020821002014

将其设置在文件底部/etc/sudoers(不过最好使用 进行编辑sudo visudo),那么用户fixmeyourusernamehere应该能够运行“sudo date 020821002014 without a password, but not any other commands (unless thesudo”配置允许他们使用其他命令)。

相关内容