web-dev-qa-db-ja.com

Linux:リモートsysadminのセットアップ

Linuxシステムでのリモートサポート、トラブルシューティング、および/またはパフォーマンスチューニングを提供するという奇妙な要求がときどきあります。

大企業は、ベンダー/サプライヤーへのリモートアクセスを提供するための十分に確立された手順をすでに持っていることが多く、それらに準拠するだけで済みます。 (良かれ悪しかれ。)

一方、小さな会社や個人は、私を立ち上げるために何をする必要があるかを常に指示するよう私に頼ります。通常、サーバーはインターネットに直接接続されており、既存のセキュリティ対策はLinuxディストリビューションが何であってもデフォルトで構成されています。

ほとんどの場合、ルートレベルのアクセス権が必要になります。アクセス権を設定する人はエキスパートシステム管理者ではありません。私は彼らのルートパスワードを望んでいないし、私のアクションが悪意のあるものではないことも確信していますが、合理的に簡単な指示は何を与えるべきですか:

  • アカウントを設定し、資格情報を安全に交換する
  • ルート(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 
_

ルート(Sudo)アクセスを設定する

_Sudo sudoedit_を使用するか、お気に入りのエディタを使用して_/etc/sudoers_に追加することにより、クライアントにSudoを設定するように依頼します。

_hbruijn ALL=(ALL) ALL
_

アカウントへのアクセスを制限する

通常、クライアントは引き続きパスワードベースのログインを許可します。少なくとも私のアカウントをSSHキーのみに制限するために、次の2行を_/etc/ssh/sshd_config_に追加するように依頼します。

_Match user hbruijn
PasswordAuthentication no
_

クライアントに応じて、すべてのSSHアクセスを単一の要塞ホスト経由でルーティングして、常に単一の静的IPアドレス(たとえば、192.168.1.2)を提供したり、ISPが使用するIPアドレス範囲(たとえば、10.80。 0.0/14)。 SSHアクセスが制限されている場合は、クライアントがファイアウォールのホワイトリストにそれらを追加する必要がある場合があります(多くの場合、sshはフィルタリングされません)。

これらのIPアドレスは、_from=_ファイルの_~.ssh/authorized_keys_制限としてすでに確認されています。これは、システムへのアクセスにキーを使用できるホストを制限します。

監査証跡を提供する

これまで、クライアントからそれを求められたことはありませんでした。また、次のこと以外に具体的なことをしてお尻をカバーすることはありません。

個々のコマンドで常に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
_
51
HBruijn

頭に浮かぶのは、adduser呼び出しに--expiredateを追加することだけです。
これにより、お客様はアクセスが一定の日付で自動的に期限切れになることを知っています。

あなたはrootアクセス権を持っているため、彼はまだあなたを信頼する必要があり、それでも期限切れフラグを削除することができます。

24
faker

script(1) ユーティリティを使用してセッションを記録できます。

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

次に、すべてがsession.logにあります。

15
user9517

SSH公開鍵ですでにログインしているので、パスワードハッシュを指定しない場合は少し厳しくなります。代わりに、そのアカウントのadduser --disabled-passwordと実質的に同等のuseradd -p '!'(同等のPasswordAuthentication no)を使用するようにユーザーに伝えます。パスワードハッシュを強制し、あなたとしてログインします。

7
zwol

公開鍵/秘密鍵を使用するときに、なぜパスワードを提供するのか。

公開鍵は共有されることを意図しているため、これは、ハッシュされたパスワードではなく、資格情報を安全に交換するために使用すべきものです。

_Sudo useradd --disabled-password hbruijn_

公開鍵を送信するときは、電話などの2番目のチャネルで指紋を確認します。これにより、途中で誰もそれを変更していないことがわかります。

Sudoを使用するためのパスワードがなくなったので、sudoersファイルの行も次のように変更する必要があります。

hbruijn ALL=(ALL) NOPASSWD:ALL

Sudoのパスワードがないことに慣れておらず、本当にパスワードが必要な場合でも、ハッシュされたパスワードを送信する必要はありません。パスワードなしでアカウントを作成し、公開鍵を設定します。 ssh経由でログインしてpasswdを実行し、独自のパスワードを設定できます。

2
Jens Timmerman