![如何让 Mac 操作系统记住之前的身份验证。从我的可执行文件](https://linux22.com/image/139083/%E5%A6%82%E4%BD%95%E8%AE%A9%20Mac%20%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E8%AE%B0%E4%BD%8F%E4%B9%8B%E5%89%8D%E7%9A%84%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E3%80%82%E4%BB%8E%E6%88%91%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6.png)
我正在编写一个小型的 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 将来识别可执行文件,这样我只需单击可执行文件并轻松更改日期即可。
哦,我只选择了日期,因为它通常需要密码,但这当然可以推广到其他管理员指令。
我考虑过的事情:
- 使用 root 超级用户,但这似乎有点矫枉过正 - 必须有另一种方法
- 直接将密码写入 .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 the
sudo”配置允许他们使用其他命令)。