我刚刚遇到服务器房间里有东西在燃烧; 我怎么能快速识别它是什么? 。 在评论中,我发现了下面的引用:
you don't let a developer anywhere near your root passwords
作为一名开发人员,还有一些对系统pipe理员非常感兴趣的人,我想知道这个短语是否对每个人都是标准呢?也就是说,不要放弃密码? 评论者指出,这在系统pipe理员社区中是相当常见的知识。 是吗?
我并不是说系统pipe理员是完美的,但是有很多开发者的例子甚至不应该是开发者。 更不用说被允许对具有关键任务数据的系统进行root访问。
但无论如何,主要是要对所做的改变承担责任。 对于许多系统pipe理员来说,开发人员似乎会在服务器上执行任务,然后他们不对他们所做的事情承担责任。 开发人员往往只专注于获取他们正在进行的单一程序/任务,而没有花时间去思考他们正在接触的系统的大局或长期状态。 他们没有学习如何安全地做出改变的习惯。
对于所有的开发人员来说都不是这样的,当然也有一些优秀的开发人员可以维护系统。 在95%的时间里,这似乎是正确的。
习惯如下:
由于生产系统的操作责任通常与系统pipe理员相关,因此只有系统pipe理员应具有对系统的完全pipe理访问权限 – 就像这样简单。
现在,你可能会说: “好吧,有时我们需要修改代码,需要重新configuration系统,我们是不是应该重新configuration系统呢?”
如果你的代码改变需要重新configuration系统,你应该能够向系统pipe理员解释你有什么要求。 这样,系统pipe理员可以检查您的更改要求,如果作为开发人员可能没有预见到操作含义,则停止更改。
作为对@NathanLong的回应,我意识到,在小企业中,情况有时是这样的。 在这些情况下,pipe理员和开发人员是同一个用户,另一种方法是在多人之间划分系统所有权,并确保没有人 – 我的意思是没有人 – 推动他们自己的configuration更改。 让另一个开发人员检查你的改变,让第三个人进行重新configuration。
无论什么时候出现疑问,从改变计划和审查开始 – 其他任何事情都会导致可怕的变更pipe理
我会尝试用一个比喻来解释(我是一个开发人员,偶尔会做系统pipe理员的东西)。
画家和室内装饰
比方说开发商是一个画家,并创造了很多奇妙的画作。 好吧,也许他们不是太棒了,但他做了他的雇主要求他做的。 他擅长的,所以所有的画都很好。
现在这些画需要放在各自的build筑物内。 画家知道关于油漆的一切,但是不知道如何在墙上正确安装东西。 如果画家无论如何决定尝试(因为他可以),室内devise师(系统pipe理员)可能会在几个星期后回来,回答如下:“这里发生了什么? “一切都歪曲了,这……这必须放在天花板上!这是怎么连接到洼地的!这是否是胶着!?”
不用说,室内devise师可以做得更好。 他知道把什么放在哪里,以及如何安装它。 他一直使用相同的螺丝和偶尔的电线。 他已经做了一千次,几乎可以闭上眼睛。
长话短说:系统pipe理员知道如何处理他的钻机比开发人员(至less他应该)。 他会保持他的系统清洁和组织,并知道整个事情是如何工作的。 另外,很多开发者习惯于做系统pipe理员(比如在家里), 如果可以的话,他们会尽量自己去做,因为这样可以节省时间。
当然,情况是一个人同时做的,但是他们很可能是在相对简单的环境里,或者经理看不到他真的需要两个人的地方。
我build议把它转过来,把自己置于对方的位置。
所以,在这个方面:
为什么系统pipe理员不能完全访问修改源代码?
对我来说,它的长短不一,就是开发者不应该拥有root权限,因为他们不一定知道他们从系统pipe理的angular度做了什么,也不需要(或不应该)需要它,所以给根就会增加造成问题的风险,没有任何好处。 pipe理系统是别人的工作。
就像系统pipe理员不应该改变代码一样,出于同样的原因。
这个build议有点过时了, 它来自一个有root密码的调皮开发人员进入现场系统进行修改的时代。
现在, 没有人应该改变现场系统,不pipe是开发人员还是系统pipe理员。 在服务器上进行更改是诸如Chef或Puppet之类的系统的工作。 我们的行业超越了可以在几年前手工configuration的单一服务器的概念。 现在我们需要能够同时configuration多个相同configuration的服务器 ,或者至less能够在任何时候可靠地重build任何单个服务器。 这就排除了有root密码的用户对服务器所做的更改,无论他们拥有什么帽子。
所以,回到问题:开发者是否应该拥有root密码? 是! 系统pipe理员应该有root密码吗? 是! 为什么? 因为复杂的系统不能被有效地诊断,因为如果没有智能的多才多艺的人来理解他们,或者至less有一个由开发人员和系统pipe理员组成的团队。 而部分诊断不能在没有login服务器的情况下完成,并且有权检查正在发生的事情(例如,开发人员可能需要运行strace或dtrace来了解Web服务器实际上正在进行的操作)。只要记住 – 看,别碰!
我曾经和很多开发人员合作,他们对系统pipe理员没有兴趣 – 他们只是想让他们的软件工作。 他们将采取最快的路线,这往往需要例如固定权限错误与chmod 777 -R .
不用说,这是一件坏事。
我不能说系统pipe理员社区,但我可以从经验。
虽然他们似乎知道他们的东西,他们似乎并没有注意到所需的细节和随机东西安装/更改,例如,在另一个月,我发现我们的生产Web服务器之一安装了KVM / QEMU!
另一件让我恼火的事情是他们倾向于混合使用服务器angular色,所以Hypervisor主机会突然变成监控服务器和Web服务器。 也似乎缺乏一致性,例如3个服务器执行相同的angular色,应该以相同的方式设置,将以3种完全不同的方式进行设置。
当然,评论者可能只是意味着他们应该使用SSH密钥而不是密码:)
通常是为了分离担忧。 为了安全起见,在某些环境中需要实施这样的限制。 它可以通过提供有关不可用的应用程序的信息来提供业务价值。
职责分离和变更控制。
职责分离意味着你从来没有一个人负责单一的任务。 实现它的最好方法是确保没有一个人可以单独执行一项任务。
至于更改控制,为了正确实施,您必须确保对生产系统的所有更改都有完整的logging。 实现这个目标的最好方法是让开发人员向系统pipe理员提供一份讲义,给他们代码和文档,让他们执行部署。
这是IT行业常见问题的过度简化。 任何一个人都知道所有的事情太多了,所以人们专门化了他们的知识。 理想情况下,只有那些具有专业知识才能完成任务的人应该这样做。
在现实世界中,我们经常被要求由pipe理结构“戴多种帽子”,他们仍然不知道IT如何工作的复杂性,并处理公司经营和财务状况的复杂性(通常是IT人员没有)。
这常常导致OP中两个IT领域重叠时所要求的态度。 就像这种态度一样,作为一个networking人员,我知道对系统pipe理员有类似的想法是多么容易,因为系统pipe理员经常被要求pipe理networking。
在相对较less的情况下,他们做得很好,在另一个相对较less的情况下,他们做了一件可怕的工作。 大多数时候,他们在两者之间的某个地方干得不错。 然而,这并不是记住的伟大的工作,它是可怕的工作,在较小的程度上记住了体面的工作。
当一个networking人员被混为一谈(或者是某个特定原因/项目的顾问,或者是因为IT人员已经扩大了,现在已经包含了一个),他们往往会发现被忽视的推荐最佳实践,错误configuration,安全漏洞等。大部分时间都在努力弄清楚这些空白的事情是如何实现的,排除不应该发生的问题,并修复错误的configuration和问题。
但这是双向的,包括一些重叠的学科。 具体到我的例子,我知道作为一个networking人,我不能像知识渊博的系统pipe理员那样快速地build立一个服务器,并且/或者可能会有一些我会忽视或做错的事情(或者至less不是最好的办法)。 给我足够的时间,我至less可以做一个相当体面的工作,但是工作/工作往往不会给那个时间。 如果我有select的话,我很喜欢把它交给一个好的系统pipe理员。