问题描述
每次我使用 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
仍然会在我的主目录中创建一个烦人的文件。
This webpage 建议您可以通过将自己从 admin
组中删除来停止创建文件,但我不在任何此类组中,并且 admin
不在 /etc/group
中。
有没有办法阻止这个文件被创建?
我相信这不是 this question 的副本,因为那是在询问是否可以使 bash 打印的通知消失,而不是是否可以停止由 sudo
创建的文件。
最佳答案
根据 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 */
次佳答案
看起来这个问题正在处理中:https://github.com/sudo-project/sudo/issues/56