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


51

我时不时地收到奇怪的请求,要求在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 -isudo 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

8
您可以登录(事实发生后很容易更改),甚至可以在中共享会话screen,因此在极端情况下,您的客户可以实时观看您的操作。
斯文

如果您想添加更好的审核记录,则应指示他们启用远程日志记录(如果可能的话)
Fredi

Answers:


24

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

他仍然需要信任您,因为您具有root用户访问权限,并且仍然可以删除expire标志。


15

您可以使用script(1)实用工具记录会话。

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

然后一切都在session.log中。


您是否建议在启动与远程系统的ssh会话之前在自己的主机上运行该会话,或者将其作为我的配置文件的一部分包含在远程系统上?
HBruijn

1
我想您可以做任何事情-我只用过一次,大多数人并不在乎。
user9517支持GoFundMonica16

7

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


3
Match user hbruijn \n PasswordAuthentication nosshd_config 添加到sshd_config应该可以防止任何人使用我的解密密码远程登录(可能本地用户可以将其与一起使用su - hbruijn),但据我所知,尽管如此,我仍然需要有效的密码sudo。也许我应该在登录后简单地重设密码?
HBruijn

哦,关于须藤的好处。我不确定是否--disabled-password可以通过passwd从该帐户运行来为处于状态的帐户提供密码。
zwol

还有什么会阻止任何人监听您提供的密码哈希?这部分是一个薄弱环节,会破坏使用ssh密钥的功能,在此情况下,如果您的公共密钥被拦截,则无关紧要。
JamesRyan

3
是否可以通过让客户端还在sudoers文件中添加一行来解决弱链接hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn
Dezza

2

当您要使用公用/专用密钥时,为什么要完全提供密码。

公钥是要共享的,因此这是用于安全交换凭据(而不是哈希密码)的方法。

sudo useradd --disabled-password hbruijn

发送公钥时,请通过第二个通道(例如电话)验证指纹,以便您知道没人在途中对其进行了更改。

由于您现在没有使用sudo的密码,因此您还需要将sudoers文件中的行更改为

hbruijn ALL=(ALL) NOPASSWD:ALL

如果您对没有用于sudo的密码感到不满意,并且确实想要密码,那么仍然不需要发送哈希密码,无需创建密码即可设置帐户,设置公钥,并且一旦设置后,您可以通过ssh登录并运行 passwd以设置自己的密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.