Linux:为远程系统管理员设置

HBr*_*ijn 51 security linux audit root sudo

我不时收到奇怪的请求,要求在 Linux 系统上提供远程支持、故障排除和/或性能调整。

较大的公司通常已经制定了完善的程序来提供对供应商/供应商的远程访问,我只需要遵守这些程序。(不论结果好坏。)

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

我几乎总是需要 root 级别的访问权限,而为我设置访问权限的人不是专家系统管理员。我不想要他们的 root 密码,而且我也很确定我的行为不会是恶意的,但是我应该给出什么相当简单的说明:

  • 设置帐户并安全地交换凭据
  • 设置 root (sudo) 访问权限
  • 限制对我帐户的访问
  • 提供审计追踪

(是的,我知道并总是警告那些客户,一旦我拥有管理员访问权限,隐藏任何恶意操作都是微不足道的,但让我们假设我没有什么可隐藏的,并积极参与创建审计跟踪。)

以下步骤可以改进什么?


我目前的指令集:

设置帐户并安全地交换凭据

我提供了一个密码哈希,并要求我的帐户设置了该加密密码,因此我们不需要传输明文密码,我将是唯一知道密码的人,我们不会从可预测的弱密码。

sudo useradd -p '$1$********' hbruijn
Run Code Online (Sandbox Code Playgroud)

我提供了一个公钥 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 
Run Code Online (Sandbox Code Playgroud)

设置 root (sudo) 访问权限

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

hbruijn ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

限制对我帐户的访问

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

Match user hbruijn
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

根据客户端的不同,我将通过单个堡垒主机路由我的所有 SSH 访问,以始终提供单个静态 IP 地址(例如 192.168.1.2)和/或提供我的 ISP 使用的 IP 地址范围(例如 10.80.80.2)。 0.0/14)。如果 SSH 访问受到限制,客户端可能需要将这些添加到防火墙白名单中(尽管 ssh 通常未过滤)。

你已经看到那些IP地址作为from=限制的在~.ssh/authorized_keys文件中的限制从我的钥匙可用来访问他们的系统的主机。

提供审计追踪

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

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

默认情况下,所有特权操作都将被记录到系统日志(和/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
Run Code Online (Sandbox Code Playgroud)

我基本上放弃了自定义我的工作环境,我唯一真正做的就是在~/.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
Run Code Online (Sandbox Code Playgroud)

fak*_*ker 24

唯一想到的是添加--expiredateadduser呼叫中。
这样,客户就知道您的访问权限将在固定日期自动过期。

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


use*_*517 15

您可以使用script(1)实用程序记录您的会话。

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log
Run Code Online (Sandbox Code Playgroud)

那么一切都在 session.log 中。


zwo*_*wol 7

由于您已经使用 SSH 公钥登录,因此如果您不提供密码哈希,事情会稍微紧张一些;而是告诉他们使用adduser --disabled-password(等效地,useradd -p '!'我认为),这实际上等效PasswordAuthentication no于该帐户,另外,窥探您电子邮件的人不可能暴力破解密码哈希并以您的身份登录。

  • 将`Match user hbruijn \n PasswordAuthentication no` 添加到 sshd_config 应该可以防止任何人使用我的解密密码远程登录(可能本地用户可以将它与 `su - hbruijn` 一起使用)但据我所知我仍然需要有一个有效的密码用于 `sudo` 目的。也许我应该在登录后简单地重置密码? (3认同)
  • 是否可以通过让客户端在 sudoers 文件中添加一行如 `hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn` 来解决该薄弱环节? (3认同)