是否可以停止创建 .sudo_as_admin_successful?

Ash*_*Ash 68 bash sudo

每次我使用 执行命令时sudo.sudo_as_admin_successful都会在我的主目录中创建一个名为的文件。据我所知,它存在的唯一目的是禁用 bash 在启动时打印的消息:

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
Run Code Online (Sandbox Code Playgroud)

可以通过注释掉 中的相关部分来停止该消息/etc/bash.bashrc,但sudo仍会在我的主目录中创建一个烦人的文件。

此网页建议您可以通过将自己从admin组中删除来停止创建文件,但我不在任何此类组中,admin也不在/etc/group.

有没有办法阻止这个文件被创建?


我相信这不是这个问题的重复,因为那是问是否有可能使 bash 打印的通知消失,而不是是否有可能停止由sudo.

ste*_*ver 52

根据plugins/sudoers/sudoers.c源代码文件的以下部分,如果不重新编译sudo、取消定义USE_ADMIN_FLAG预处理器宏,就不可能。

另外,还要注意它的检查两个组成员admin sudo。我没有检查过更改日志,但我怀疑后一个检查是在sudo成为特权用户的默认组时添加的- 也许文件名仍然是admin为了兼容性。

1229 #ifdef USE_ADMIN_FLAG
1230 static int
1231 create_admin_success_flag(void)
1232 {
1233     struct stat statbuf;
1234     char flagfile[PATH_MAX];
1235     int len, fd = -1;
1236     debug_decl(create_admin_success_flag, SUDOERS_DEBUG_PLUGIN)
1237
1238     /* Check whether the user is in the admin group. */
1239     if (!user_in_group(sudo_user.pw, "admin") &&
1240         !user_in_group(sudo_user.pw, "sudo"))
1241         debug_return_int(true);
1242
1243     /* Build path to flag file. */
1244     len = snprintf(flagfile, sizeof(flagfile), "%s/.sudo_as_admin_successful",
1245         user_dir);
1246     if (len <= 0 || (size_t)len >= sizeof(flagfile))
1247         debug_return_int(false);
1248
1249     /* Create admin flag file if it doesn't already exist. */
1250     if (set_perms(PERM_USER)) {
1251         if (stat(flagfile, &statbuf) != 0) {
1252             fd = open(flagfile, O_CREAT|O_WRONLY|O_EXCL, 0644);
1253             if (fd != -1)
1254                 close(fd);
1255         }
1256         if (!restore_perms())
1257             debug_return_int(-1);
1258     }
1259     debug_return_int(fd != -1);
1260 }
1261 #else /* !USE_ADMIN_FLAG */
1262 static int
1263 create_admin_success_flag(void)
1264 {
1265     /* STUB */
1266     return true;
1267 }
1268 #endif /* USE_ADMIN_FLAG */
Run Code Online (Sandbox Code Playgroud)

  • 当然,无需重新编译 `sudo` 也是可能的!只需退出`objdump -d`,跟踪该检查中涉及的逻辑,然后使用您可信赖的十六进制编辑器(甚至`hexdump` 和常规文本编辑器会在紧急情况下进行)进行一些手术。什么可能出错? (18认同)
  • 根据 https://github.com/sudo-project/sudo/issues/56,在较新版本的 sudo 中,可以更改路径或在 sudoers 文件中禁用功能。值得更新答案以包括这一点 (6认同)

小智 13

看来这个问题现在正在处理: https://github.com/sudo-project/sudo/issues/56

来自 sudo 项目合作者:

在 sudo 1.9.6 中,可以使用sudoers 文件中的admin_flag设置来更改路径或禁用该功能。

该消息来自/etc/bash.bashrc文件,该文件查找$HOME/.sudo_as_admin_successful并显示消息(如果不存在)。如果您告诉 sudo 不要创建管理标志文件(并且它尚不存在),那么您将始终从 bash 收到该消息,除非您修改/etc/bash.bashrc.

  • 令人烦恼的是,这并不能解决 Ubuntu 上的问题。Ubuntu 不使用最新版本的 sudo(它确实解决了这个问题),而是使用了修改后的旧版本,但问题仍然存在。除非您想自定义安装 sudo,否则我们将不得不等待未来的 Ubuntu 版本,其中使用较新的 sudo 版本。 (3认同)
  • @MestreLion我只是向任何可能认为“正在修复”意味着他们可以修复它的人解释这一点......并不是声称这是 sudo 独有的。 (2认同)