是否有可能停止创建 .sudo_as_admin_successful?

是否有可能停止创建 .sudo_as_admin_successful?

每次我用 执行命令时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,但我不在任何这样的组中,也不admin在中/etc/group

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


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

答案1

根据以下部分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 */

答案2

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

来自 sudo 项目合作者:

在 sudo 1.9.6 中,可以使用以下命令更改路径或禁用该功能:管理标志sudoers 文件中的设置。

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

答案3

admin可以为或以外的账户创建不同的组sudo。例如,可以使用 的经典管理组名称wheel。该组是否已存在?

getent group wheel

如果不是,则将该组创建为系统组。(系统组是 GID 在 中指定的范围内的组/etc/login.defs。)

 sudo groupadd -r wheel

当该组存在时,将您的帐户与该wheel组分组。

sudo usermod -aG wheel your_username

/etc/sudoers然后使用该程序修改该文件visudo

visudo 

为组成员添加一行wheel

%wheel ALL=(ALL:ALL) ALL

保存文件。注销。重新登录,这样您的帐户现在就在该wheel组中。确保您的帐户在该wheel组中。

id

如果您的帐户确实在该组中,请从或组wheel中删除您的帐户- 无论哪种方式适用于您的系统。sudoadmin

gpasswd --delete your_username sudo

或者...

gpasswd --delete your_username admin

注销。重新登录,这样您的帐户就不再是sudoadmin组的成员。删除文件.sudo_as_admin_successful

rm ~/.sudo_as_admin_successful

尝试另一个命令,sudo并注意该文件不再出现。

相关内容