是否可以停止创建.sudo_as_admin_successful?


46

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

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

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

该网页提示,你可以停止从删除自己创建的文件admin组,但我没有任何这样的组- id显示,我在joshadmcdromsudodipplugdevlpadminsambashare,和admin是不是在/etc/group

有没有办法阻止该文件的创建?


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


1
有什么好烦的呢?它几乎不占用任何空间。
edwinksl

12
@edwinksl当我尝试寻找其他东西时,这看起来很混乱。鉴于我永远不会修改它,因此我不必知道它的存在。
乔什(Josh)2013年

5
这就是为什么有一个。在前面。为什么在视图中包含隐藏文件?
林兹温德

11
至少此文件应将自己放在.config或.local中。我们经常需要浏览隐藏文件,尤其是在主目录中。这不是为什么发明.config / .local的原因,因为主目录的可笑重载,而该文件可能是最无用的示例?
NeilG '18

1
并不是要发动发行战争(这是在askubuntu.com上提出的),但我仔细检查了一下:这实际上是Ubuntu添加的东西,它在上游Debian发行版中不存在。它可能被添加为“用户友好的”,但我像OP一样,发现随机文件的存在令人讨厌。
Per Lundberg

Answers:


38

根据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 */

当然,无需重新编译就可以sudo!刚出去objdump -d,找出该检查所涉及的逻辑,然后请您值得信赖的十六进制编辑器(甚至hexdump普通文本编辑器会在紧要关头)进行一些手术。可能出什么问题了?
mtraceur
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.