每周工作一天?


10

我是我老板的自愿者,是我们生产Redhat服务器的系统管理员。他要求我加强安全措施,以避免rm -f *不久前发生的不幸事件。

目前,我们有53位用户在机器上打气,这是审核的噩梦。我想知道是否可能只允许用户在一周的特定日期访问。

例如,是否可以让用户“ Joe”仅在星期二和星期四登录,而仅允许“ Jane”在星期日登录?可以etc/sudoers定制以允许这样做吗?

有没有比使用sudoers更好的方法?


10
我建议不要阅读手册页。参见xkcd#1343
user60684 2014年

3
不,我告诉他不要阅读该手册,因为不可能阅读恕我直言。如果OP易于阅读,则可能会在手册页中找到答案。
user60684 2014年

10
您可以执行此操作,但请记住,用户只要在拥有root的任何一天都可以将自己的全部sudo访问权限还给他们。
Nick Matteo 2014年

2
@ Mark0978如果您知道公司的名称,您可能会笑起来而死。在生产服务器上允许它是可耻的。
克里斯

3
这似乎很愚蠢。这仅仅意味着比尔将必须等待他星期三早上的时段播出rm -rf /
迈克尔·汉普顿

Answers:


21

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

因此,您应该能够使用pam_time.so它。

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

account    requisite  pam_time.so

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

然后编辑/etc/security/time.conf以设置您的限制。服务名称应为sudo。例如,要允许Fred sudo仅在星期五的下午3点至下午5点之间使用:

sudo;*;fred;Fr1500-1700

(注意:我尚未对此进行测试。)

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


PAM实施起来似乎很复杂,但也允许对谁在何时何地执行操作进行更严格的控制。接受并投票赞成。谢谢。
克里斯(Chris

2
我认为鼓励他不是正确的答案,IMAO对这个问题的正确答案是“跑山!!! 1!1!1!1!”
o0'。

这真的有效吗?我可以使用pam_time.so控制各种登录机制,例如“登录”,“ ssh”,“ gdm”,“ su”,但是不适用于sudo。我想防止任何人在办公时间以外通过任何正常机制生根。(我意识到这不是防弹措施,有人可以提前准备好setuid外壳或后门,但我不希望在这种情况下会发生这种情况。)
Sam Watkins

20

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

您是否可以使用组权限(或什至更高级的ACL)来使人们访问完成工作所需的文件,也许使用一些setuid或sudo'ed脚本或二进制文件来使他们执行重启服务之类的事情?(请注意,编写安全的setuid / sudo脚本很困难,因此,诚实的人要诚实得多。)

即使您可以将某人限制为每周有一天进行sudo访问,但仍然有53个人在一周的时间内拥有sudo访问权限,因此这对解决您的核心问题并没有真正的帮助。

就此而言,我想问是否有那么多用户需要访问生产服务器?您可以将日志或需要的任何数据/文件运送到非生产计算机吗?


或者,您可以发布对它们可能需要的日志文件的某种访问权限,一种chroot监禁的sftp设置。
boatcoder 2014年

@Johnny在此主机上完成的大部分工作是创建/编辑和运行Shell脚本。不允许用户使用vi/cp/mv/rm。只有cdmore。没有其他的。
克里斯

@Johnny如果我在目录上设置了ACL,默认情况下该目录中的文件是否继承了ACL的属性?
克里斯(Chris

@Chris是,如果您为目录设置了默认ACL。
迈克尔·汉普顿

这应该是评论,而不是答案。不管OP的方案是否明智,其他人在某些时候都需要为某些用户锁定“ sudo”。
山姆·沃特金斯

7

最简单的方法是使用suders.d(通过inludedir)进行配置。然后,您可以拥有cron作业,这些作业可以将每个用户的规则放入您所需时间的目录中。

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

#includedir /etc/sudoers.d

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来直接编辑文件。

当您希望joe具有访问权限时,将出现/etc/sudoers.d/joe,您只需删除文件即可取消访问权限。


1
我的用户特定的sudoers文件存在问题:“ sudoers.user1”等。您对“〜”和“。”进行了评论。人物解决了我的问题。我很高兴您阅读了手册!谢谢。

0

您可以添加crontab将用户放入sudo组,然后添加第二个crontab将该用户删除。

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.