我时不时地收到奇怪的请求,要求在Linux系统上提供远程支持,故障排除和/或性能调整。
大型公司通常已经建立了完善的程序来提供对供应商/供应商的远程访问,而我只需要遵守这些程序即可。(不论结果好坏。)
另一方面,小公司和个人总是向我求教,以指导他们建立我所需要做的事情。通常,它们的服务器直接连接到Internet,现有的安全措施包括Linux发行版的默认设置。
几乎总是需要root级访问权限,而为我设置访问权限的人都不是专家级的sysadmin。我不希望他们的root密码,而且我也很确定我的行为不会是恶意的,但是我应该给什么合理的简单指示:
- 设置一个帐户并安全地交换凭证
- 设置root(sudo)访问
- 限制访问我的帐户
- 提供审核跟踪
(是的,我知道并且总是警告那些客户,一旦我具有管理员访问权限,则隐藏任何恶意操作都是微不足道的,但是让我们假设我没有什么可隐藏的,可以积极参与创建审计跟踪。)
以下步骤可以改善什么?
我当前的指令集:
设置一个帐户并安全地交换凭证
我提供了一个密码哈希,并要求我使用该加密密码来设置我的帐户,因此我们无需传输明文密码,我将是唯一知道该密码的人,并且我们不会以可预测的弱密码。
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
限制访问我的帐户
通常,客户端仍然允许基于密码的登录,我要求他们添加以下两行以/etc/ssh/sshd_config
至少将我的帐户仅限制为SSH密钥:
Match user hbruijn
PasswordAuthentication no
根据客户端的不同,我将通过单个堡垒主机路由我的所有SSH访问,以始终提供一个静态IP地址(例如192.168.1.2)和/或提供ISP使用的IP地址范围(例如10.80)。 0.0 / 14)。如果SSH访问受到限制(尽管ssh经常不被过滤),客户端可能需要将这些添加到防火墙白名单中。
您已经from=
在~.ssh/authorized_keys
文件中看到了这些IP地址的限制,该限制限制了可以使用我的密钥访问其主机的主机。
提供审核跟踪
到目前为止,还没有客户要求我这样做,而且我还没有做过以下任何具体的事情来掩盖我的屁股:
我尝试始终使用sudo
单个命令,并尝试防止使用sudo -i
或sudo su -
。我尝试不使用sudo vim /path/to/file
而是使用sudoedit
。
默认情况下,所有特权操作都将记录到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历史记录并添加时间戳的过程中进行以下设置:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend
screen
,因此在极端情况下,您的客户可以实时观看您的操作。