我们公司的一些人在生产服务器上拥有root权限。 我们正在寻找一个很好的方法,使我们在进入时非常清楚。
我们有一些想法是:
你们用什么技术来区分生产系统?
红色提示是一个好主意,我也使用。
另一个诀窍是在/etc/motd
文件中放置一个大的ASCII艺术警告。
有这样的事情,当你login时问候你应该引起你的注意:
_______ _____ _____ _____ _____ _____ | __ __ | | | | _ _ | / ____ | | _ _ | / ____ | / \ | | | | __ | | | | | (___ | | |(___ / \ | | | __ | | | \ ___ \ | | \ ___ \ / / \ \ | | | | | | _ | | _ ____)| _ | | _ ____)| / ____ \ | _ | | _ | | _ | _____ | _____ / | _____ | _____ / / _ / \ _ \ ______ ____ ___ ___ ___ ___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | __ \ | __ \ / __ \ | __ \ | | | | / ____ | __ __ | _ _ / __ \ | \ | | | | __)| | __)| | | | | | | | | | | | | | || | | | \ | | | ___ / | _ / | | | | | | | | | | | | | | || | | | 。 `| | | | | \ \ | | __ | | | __ | | | __ | | | ____ | | _ | || | __ | | | \ | | _ | | _ | \ _ \ \ ____ / | _____ / \ ____ / \ _____ | | _ | | _____ \ ____ / | _ | \ _ | __ __ _____ _ _ _____ _ _ ______ | \ / | / \ / ____ | | | | _ _ | \ | | ____ | | \ / | / \ | | | | __ | | | | | \ | | | __ | | \ / | | / / \ \ | | | __ | | | | 。 `| __ | | | | | / ____ \ | ____ | | | | _ | | _ | | \ | | ____ | _ | | _ / _ / \ _ \ _____ | _ | | _ | _____ | _ | \ _ | ______ |
你可以在这个网站上产生这样的警告,或者你可以使用figlet
命令。
就像尼古拉斯·史密斯(Nicholas Smith)在评论中提到的那样,你可以使用cowsay
命令来与一些龙或其他动物进行调味。
不用/ etc / motd文件,你也可以在.profile
文件中调用cowsay
或者figlet
。
不完全相同的事情,但是这个网站build议让你的开发者在改变生产系统的时候穿一件粉色的阔边帽。 你也许可以有一个类似的规则来进入他们。
我使用的最大的是一个离散的命名scheme,其中prod系统被命名明显不同于test / dev实例。 这使“用户名@主机名:”样式提示明显不同。 显而易见,我的意思不仅仅是不同的词汇,也有不同的格式:
例如:PRD-WEB001与DEVEL-BOB-WEB001
这有几件事情要做:
最重要的是,为了避免Oops错误,它不需要专门的生产terminalconfiguration。
以我的经验,你想要的东西是一个不断提醒你在哪里。 像谜语这样的login方法大约需要10秒,直到你忘记哪个窗口是哪个。 所需要做的只是在错误的目录中做一个ls
,将不祥的login标志滚动出去,将浏览器窗口下的terminal窗口隐藏在search窗口中,同时将标签返回到错误的窗口,随后发生混乱。 最好有一个像一个明显不同的命令提示一些不断的视觉提示。
有一点你需要记住的是,这需要一个持久的提醒,而不仅仅是login时的一个指标。 很多时候,有人会在不同的标签中同时运行几个shell,并在它们之间移动。 一些将会开发,一些生产。 所以当你运行一个命令的时候,你需要有一个指示器。 所以有一个特殊的提示是最好的方法,根据我的经验,修改标题/标签栏是一个很好的补充,这很容易find正确的窗口/标签。
所以我build议有一个彩色提示(红色是显而易见的select)和主机名的所有大写,与用户类似的行为(特权与非特权)为您的提示。 一些例子:
通常类似
set prompt = "%{\033[1;44m%}`whoami`@`hostname -s`#%{\033[0m%} "`
在你的shell启动文件中。 这一个是蓝色的。 用41
红杉代替44
,绿色代替44
41
。 其他颜色和野生图案也可用 。
这些是我的build议:
1)确保生产环境中的大多数命令(rm,chown,chmod,/etc/init.d/*)都需要sudo访问
2)使用PS1 / PS2来指示用户在Prod服务器中
bash-3.2$ export PS1="[\u@\h \W]\$ "
这将显示命令提示符
[sridhar@prodappserver901 conf]$
3)如果使用Putty / SSH客户端,您可以随时设置独特的背景颜色/configuration文件,使生产服务器脱颖而出。
只要考虑到你的第二个和第三个想法在初始连接的时候是有帮助的,但是当你有多个terminal打开并且从一个移动到另一个terminal的时候没有任何价值 sysadmin1138的使用命名的想法是可以应用的,但有很多的情况下是不可能的。
我发现唯一真正值得的是一个彩色的提示。 我非常喜欢绿色开发/testing,红色生产,蓝色非军事区机器。 这样,即使我有两台相同名称的机器(不同的networking),比如在准备replace机器时,我仍然可以轻松地知道我正在使用哪一台机器。
红色/特殊命令提示符是好的。 另一件事可能是在使用TMOUTvariables的机器上更快地自动注销。 如果你打开了很多窗户,生产的窗户将会更快地消失。
这应该导致不同的行为:
使用纯粹的root帐户在生产机器上工作永远不是一个好主意。
有一个完整的sudo权限的帐户。 不允许保存sudo会话。 禁止sudo su。 使用单独的密码(不是你的开发机器)。 可能会调整sudo以在执行命令(通过别名)之前通知shell的生产标识。
这会使意外错误变得相当困难。 而红色的提示永远不会伤害。
虽然我不知道你的IT设置是什么样的,但是一个可能有效的解决scheme是有一个特殊的空间,你必须以root身份去SSH生产服务器。 如果你有一个数据中心,这可能是服务器机房本身,但有一个单独的物理位置,“正常”的工作没有完成,将非常有效地提醒你正在访问生产机器。
我用红色提示的想法去了,发现find工作的bashrc代码非常繁琐。
所以这里是我的版本,准备包含在.bashrc中 – https://github.com/RichVel/nicer-bash-prompt 。 它完全由主机名驱动,只要你有一个合适的模式生产主机名(如xyprod01,02等),它可以很好地工作,你可以在所有环境中使用相同的.bashrc。
它看起来像这样:
这会在生产主机上创build一个更好的bash提示,其中包括红色提示 – 还会显示当前的git分支以及$ PWD中的最后两个目录。 当在bash(最近更新)中执行Ctrl / R(反向search)时,需要注意避免搞乱显示。
还包括一个可选的function,沿着这个答案的行,跨所有的terminal窗口同步你的bash历史。 这很好,但不是每个人都想要它,所以它默认是禁用的。
只是对上述build议进行调整。 我使用CDE作为我的unix桌面以及我通过.dt / dtwmrc中的菜单访问的所有生产系统。 在所有的开发和UAT系统我保持我的正常的配色scheme,但在产品系统我设置terminal有一个红色的背景。 我不喜欢这样的外观,但是这是一个重点。
埃塔 – 错过了卡罗尔的build议基本上是一回事
当我login到一台生产机器时,会有一段文字告诉我这是一台生产机器,还有一小段指南。 如果我不认为我可以安全地执行我的任务,那么我可以拨打UNIX支持号码,这提醒我们炸毁一台生产机器可能会使我的工作耗费巨大,并且提醒我所做的一切都会被logging下来。
编辑:我在运输行业工作。
在PuTTY中,您可以将窗口的标题更改为特定保存会话的默认值以外的内容。 无论你在窗口内做什么,这总是保持在窗口上。 这也显示在任务栏中。
展开窗口,单击行为。 在窗口标题中input如下内容:
* * * * * * * * * * * * PRODUCTION * * * * * * * * * * * * PRODUCTION * * * * * * * * * * * *
简单的答案? 在shellconfiguration中将shell的颜色更改为红色。 这将是显而易见的build立死亡。 不仅如此,而且与服务器头文件不同,在键入一些命令后它不会消失。
我的团队使用visionapp远程桌面 (2017年编辑:看起来像产品重新命名,但我认为是相同的)到RDP到Windows机器和SSH到Linux的。 我们的连接按层分组到文件夹中,并分配了选项卡颜色。
所以每当我们打开一个生产连接 – 巴姆! – 我们脸上有一些鲜红的:
如果你是一家大型的Windows商店,并且依赖RDP,这绝对是一个值得的投资。 我敢打赌,如果你需要的只是SSH,还有其他很棒的工具。
除了独特的提示(这似乎是最可靠的解决scheme)之外,如果您从同一个工作站login,则可以为SSH会话使用不同的configuration文件。
例如,我有生产系统的红色背景,绿色的开发,蓝色的基础设施(路由器等)和白色的本地工作站。
如果您使用GNOME,可以使用所需的configuration文件启动SSH连接:
gnome-terminal --window-with-profile=production -e 'ssh [email protected]'
主要的缺点 – 它是客户端,所以如果您访问不同地点的服务器,特殊提示仍然是最好的select。
另一种清楚表明你在生产系统上的方法是在生产系统上设置TMOUT(自动注销)function。
由于在特定行业工作时需要广泛的监pipe要求,因此每个人的活动都是未来争议的关键。 由于这一点,访问也受到限制,你必须跳过几个“菜单”,让你作为less数可信任的用户之一访问一台机器。 通过build立这个系统,人员必须有意识地selectPRODUCTION或QA环境,然后从列表中select他们想要访问的主机。 这也有一个超时期限,所以你不会遇到login到产品主机的情况,并忘记你在第二天的环境。
这是我在我的Mac上做的。 对于每个服务器,我在〜/ .ssh / config文件中添加一个条目,例如
Host app13 HostName server.example.com User tom PermitLocalCommand yes LocalCommand osascript %d/bin/change_terminal_colours.scpt 12 35 35
这个Applescript在SSH会话build立之后被触发。 它将terminal背景颜色设置为提供的RGB值(如果没有提供颜色值,则将其设置为默认值)。 可能棘手的部分是拦截SSH会话的结束以将颜色设置回默认值。 为此,我创build了下面的shell脚本作为〜/ bin / ssh以覆盖默认的ssh命令。 这基本上拦截并封装对SSH命令的任何调用。 我尝试使用别名和function,但这个解决scheme效果最好:
#!/bin/bash /usr/bin/ssh $@ osascript ~/bin/change_terminal_colours.scpt
以下是change_terminal_colours.scpt脚本的来源。 把这个放在你的〜/ bin目录下:
on run argv tell application "Terminal" # NOTE: Color values range from 0 to 65535. if (count of argv) > 0 then set backgroundColor to {(item 1 of argv) * 256, (item 2 of argv) * 256, (item 3 of argv) * 256} else set backgroundColor to background color of default settings end if try set background color of (selected tab of front window) to backgroundColor end try end tell end run
我一个星期前写了这个解决scheme,从那以后一直在使用它。 我希望别人觉得有价值。 我发现它比我在Google上find的任何解决scheme都更好。
我在这里使用提示更改像其他人一样。 它的快速和讨厌,但为我的目的正常工作。 它将使您在生产系统上以普通用户身份发红,在产品系统上以红色大写字母为根。
它可以写在较less的行,但我这样做,所以我可以调整其他2例(非根非刺激),如果我想。
我们假设生产服务器不使用DHCP,但是可以使用其他方法来确定它是否为prod系统。 无论什么对你有用。
productionSrv = 1 grep -qi bootproto = dhcp / etc / sysconfig / network-scripts / ifcfg- * 如果[“$?” -eq 0]; 然后 productionSrv = 0 科幻 主机名=`hostname` 的userName =`whoami` 如果[$ userName ==“root”] 然后 如果[“$ productionSrv”== 1] 然后 hostName =`echo $ hostName | tr [:lower:] [:upper:]` PS1 ='[\ E [0;31米] \ U [\ E [0米] @ [\ E [0;31米] $主机名[\ E [0米] [$] [\ E [0;31米] [\ W] [\ e [0m] [\ e [0; 31m] \ $ [\ e [0m]:' 其他 PS1 ='[\ E [0;31米] \ U [\ E [0米] @ [\ E [0;35米] $主机名[\ E [0米] [$] [\ E [0;31米] [\ W] [\ e [0m] [\ e [0; 31m] \ $ [\ e [0m]:' 科幻 PATH = $ PATH:/ sbin目录/ 其他 如果[“$ productionSrv”== 1] 然后 PS1 ='[\ E [0;32米] \ U [\ E [0米] @ [\ E [0;31米] $主机名[\ E [0米] [$] [\ E [0;31米] [\ W] [\ e [0m] [\ e [0; 32m] \ $ [\ e [0m]:' 其他 PS1 ='[\ E [0;32米] \ U [\ E [0米] @ [\ E [0;35米] $主机名[\ E [0米] [$] [\ E [0;31米] [\ W] [\ e [0m] [\ e [0; 32m] \ $ [\ e [0m]:' 科幻 科幻
在生产机器上有一个不同的(也许更长的)根密码。
您可以制作一个特殊的sudo(或sudo包装),以便为生产机器输出特殊的消息。
在这里,我们有默认的腻子configuration,使整个屏幕的前景色呈现为粉红色。
它工作得很好,但我喜欢这里的其他想法。
在.bashrc / .bash_profile中
echo " THIS IS THE PRODUCTION SYSTEM. BE RESPONSIBLE.. " ..