每周 1 天 Sudoers?

Chr*_*ris 10 security permissions sudo

我的老板自愿让我担任我们生产 redhat 服务器的系统管理员。他让我加强安保,避免rm -f *不久前发生的类似事故。

现在,我们有 53 个用户 sudo-ing 进入机器,这是一个审计噩梦。我想知道是否可以只允许用户在一周中的特定日期访问。

例如,我可以让用户“Joe”仅在周二和周四登录,“Jane”仅在周日登录吗?可以etc/sudoers自定义以允许这样做吗?

有没有更好的方法而不是使用 sudoers?

der*_*ert 21

sudo 通过 PAM 进行身份验证,就像 Linux 机器上的几乎所有其他内容一样。

所以你应该能够使用它pam_time.so来做到这一点。

至少在 Debian 上,默认情况下,该模块未启用。您需要添加如下所示的行:

account    requisite  pam_time.so
Run Code Online (Sandbox Code Playgroud)

要么/etc/pam.d/sudo只为 sudo 启用,要么/etc/pam.d/common-account(在 pam-auth-update 块之后)为系统上的所有程序启用。

然后编辑/etc/security/time.conf以设置您的限制。服务名称应该是sudo. 例如,要让 Fredsudo仅在周五下午 3 点到 5 点之间使用:

sudo;*;fred;Fr1500-1700
Run Code Online (Sandbox Code Playgroud)

(注意:我没有测试过这个。)

编辑:明确地说,我同意其他答案和各种评论者,您似乎有太多人以 root 身份运行太多命令,您确实需要解决这个问题。当然,如果他们可以成为 root,他们可以编辑 pam 配置...

  • 我不认为鼓励他是正确答案,IMAO这个问题的正确答案是“RUN FOR THE HILLS!!!!!!1!1!!1!1” (2认同)

Joh*_*nny 20

我会质疑为什么 53 个用户需要 sudo 来完成他们的日常工作——对于大多数用户(甚至是开发人员)来说,sudo 应该是一个罕见的例外,而不是一个有人会随便运行一个sudo rm -rf *命令的例行程序。

您能否使用组权限(甚至更高级的 ACL)让人们访问他们完成工作所需的文件,也许使用一些 setuid 或 sudo 脚本或二进制文件让他们执行诸如重新启动服务之类的操作?(请注意,很难编写安全的 setuid/sudo 脚本,因此更要让诚实的人保持诚实)。

即使您可以将人们限制为每周一天的 sudo 访问权限,但一周内仍有 53 人具有 sudo 访问权限,因此它并不能真正帮助您解决核心问题。

就此而言,我会质疑是否有那么多用户需要访问生产服务器——你能将日志或他们需要的任何数据/文件发送到非生产机器吗?


小智 7

最简单的方法是使用 sudoers.d 目录(通过 containsir)进行配置。然后,您可以使用 cron 作业将每个用户的规则放置在您想要的目录中。

#includedir 指令可用于在 /etc/sudoers 中创建一个 sudoers.d 目录,您可以将 sudoers 规则作为规则的一部分放入其中。例如,给定:

#includedir /etc/sudoers.d
Run Code Online (Sandbox Code Playgroud)

sudo 将读取 /etc/sudoers.d 中的每个文件,跳过以“~”结尾或包含“.”的文件名。字符以避免导致包管理器或编辑器临时/备份文件出现问题。文件按排序的词法顺序进行解析。也就是说,/etc/sudoers.d/01_first 将在 /etc/sudoers.d/10_second 之前被解析。请注意,因为排序是词法的,而不是数字的,/etc/sudoers.d/1_whoops 将在 /etc/sudoers.d/10_second 之后加载。在文件名中使用一致数量的前导零可以避免此类问题。

请注意,与通过 #include 包含的文件不同,visudo 不会编辑 #includedir 目录中的文件,除非其中一个包含语法错误。仍然可以使用 ?f 标志运行 visudo 以直接编辑文件。

/etc/sudoers.d/joe 当您希望 joe 具有访问权限时会出现,您可以简单地删除该文件以取消访问权限。