Linux:设置远程系统pipe理员

我偶尔会收到奇怪的请求,在Linux系统上提供远程支持,故障排除和/或性能优化。

较大的公司通常已经build立了完善的程序来向供应商/供应商提供远程访问,我只需要遵守这些程序。 (无论好坏。)

另一方面,小公司和个人总是要求我指导他们做什么来build立我。 通常他们的服务器直接连接到互联网,现有的安全措施包括Linux发行版的默认设置。

几乎总是我需要根级别的访问权限,谁将设置访问我不是一个专家系统pipe理员。 我不希望他们的root密码,我也很确定我的行为不会是恶意的,但是我应该给出什么合理简单的指示:

  • build立一个帐户并安全地交换凭证
  • 设置root(sudo)访问权限
  • 限制访问我的帐户
  • 提供审计跟踪

(是的,我意识到并总是警告那些客户,一旦我有pipe理员访问隐藏任何恶意行为是微不足道的,但让我们假设我没有什么可以隐藏和积极参与创build审计跟踪。)

在下面的步骤可以改进什么?


我目前的指令集:

build立一个帐户并安全地交换凭证

我提供了一个密码哈希,并要求我的帐户是使用该encryption的密码设置的,所以我们不需要传输明文密码,我是唯一一个知道密码的人,而且我们不会以一个可预见的弱密码。

sudo useradd -p '$1$********' hbruijn 

我提供了一个公共密钥SSH(每个客户端的特定密钥对),并要求他们使用该密钥设置我的帐户:

 sudo su - hbruijn mkdir -p ~/.ssh chmod 0700 ~/.ssh echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys 

设置root(sudo)访问权限

我要求客户使用sudo sudoedit或使用他们最喜欢的编辑器为我设置sudo,并追加到/etc/sudoers

 hbruijn ALL=(ALL) ALL 

限制访问我的帐户

通常情况下,客户端仍允许使用基于密码的login,并要求他们将以下两行添加到/etc/ssh/sshd_config ,以至less将我的帐户限制为仅使用SSH密钥:

 Match user hbruijn PasswordAuthentication no 

根据客户端的不同,我将通过单个堡垒主机路由所有的SSH访问,以便始终提供单个静态IP地址(例如192.168.1.2)和/或提供ISP使用的IP地址范围(例如10.80。 0.0 / 14)。 如果SSH访问被限制,客户端可能需要将它们添加到防火墙白名单中(通常情况下ssh并不经过筛选)。

您已经在~.ssh/authorized_keys文件中将这些IP地址视为from=限制,限制了可以使用我的密钥访问其系统的主机。

提供审计跟踪

到目前为止,还没有客户要求我这样做,除了以下内容外,我没有做任何具体的事情来掩饰我的屁股:

我尝试一直使用sudo与单个命令,并尝试防止使用sudo -isudo su - 。 我尽量不使用sudo vim /path/to/file而是使用sudoedit

默认情况下,所有特权操作都将被logging到syslog(和/var/log/secure )中:

 Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml Sep 26 11:00:34 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages 

我大多放弃了定制我的工作环境,我真正做的唯一事情是在我的~/.bash_profile设置以下内容,增加bash历史logging并包含时间戳记:

 export HISTSIZE=99999999999 export HISTFILESIZE=99999999999 export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg" export HISTTIMEFORMAT='%F %H:%M:%S ' shopt -s histappend 

唯一想到的就是joinadduser调用。
因此,客户知道您的访问将在固定的date自动失效。

他仍然需要信任你,因为你有root权限,仍然可以删除过期标志。

您可以使用脚本(1)实用程序logging您的会话。

 $ script session.log Script started, file is session.log $ ls file1 session.log exit Script done, file is session.log 

那么一切都在session.log中。

由于您已经使用SSH公钥login,如果您没有提供密码哈希值,它会稍微收敛一些; 而是告诉他们使用adduser --disabled-password (相当于useradd -p '!' ,我认为),这实际上相当于该账户的PasswordAuthentication no ,再加上你的电子邮件没有被窥探的机会可能蛮力密码哈希和login为你。

当你打算使用公钥/私钥时,为什么要提供一个密码?

公钥是为了共享,所以这是你应该用来安全地交换凭证,而不是散列的密码。

sudo useradd --disabled-password hbruijn

在发送您的公钥时,请通过第二个通道validation指纹,如电话,所以您知道没有人在进行改变。

既然你现在没有密码来使用sudo,你还需要在sudoers文件中改变你的行

hbruijn ALL=(ALL) NOPASSWD:ALL

如果您对sudo没有密码并且确实需要密码感到不舒服,那么您仍然不需要发送哈希密码,让帐户创build时不需要密码,设置您的公钥,并且一旦您的帐户设置你可以通过sshlogin并运行passwd来设置你自己的密码。