Linuxシステムでのリモートサポート、トラブルシューティング、および/またはパフォーマンスチューニングを提供するという奇妙な要求がときどきあります。
大企業は、ベンダー/サプライヤーへのリモートアクセスを提供するための十分に確立された手順をすでに持っていることが多く、それらに準拠するだけで済みます。 (良かれ悪しかれ。)
一方、小さな会社や個人は、私を立ち上げるために何をする必要があるかを常に指示するよう私に頼ります。通常、サーバーはインターネットに直接接続されており、既存のセキュリティ対策はLinuxディストリビューションが何であってもデフォルトで構成されています。
ほとんどの場合、ルートレベルのアクセス権が必要になります。アクセス権を設定する人はエキスパートシステム管理者ではありません。私は彼らのルートパスワードを望んでいないし、私のアクションが悪意のあるものではないことも確信していますが、合理的に簡単な指示は何を与えるべきですか:
(そして、はい、私は知っています。悪意のあるアクションを非表示にすることは管理アクセス権を持っていると簡単ですが、監査証跡の作成に積極的に参加して非表示にするものは何もないと仮定します。)
以下の手順で何を改善できますか?
アカウントを設定し、資格情報を安全に交換する
私はパスワードハッシュを提供し、自分のアカウントにその暗号化されたパスワードを設定するように依頼します。そのため、クリアテキストのパスワードを送信する必要はありません。パスワードを知っているのは私だけであり、予測可能な弱いパスワード。
_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
_
頭に浮かぶのは、adduser
呼び出しに--expiredate
を追加することだけです。
これにより、お客様はアクセスが一定の日付で自動的に期限切れになることを知っています。
あなたはrootアクセス権を持っているため、彼はまだあなたを信頼する必要があり、それでも期限切れフラグを削除することができます。
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公開鍵ですでにログインしているので、パスワードハッシュを指定しない場合は少し厳しくなります。代わりに、そのアカウントのadduser --disabled-password
と実質的に同等のuseradd -p '!'
(同等のPasswordAuthentication no
)を使用するようにユーザーに伝えます。パスワードハッシュを強制し、あなたとしてログインします。
公開鍵/秘密鍵を使用するときに、なぜパスワードを提供するのか。
公開鍵は共有されることを意図しているため、これは、ハッシュされたパスワードではなく、資格情報を安全に交換するために使用すべきものです。
_Sudo useradd --disabled-password hbruijn
_
公開鍵を送信するときは、電話などの2番目のチャネルで指紋を確認します。これにより、途中で誰もそれを変更していないことがわかります。
Sudoを使用するためのパスワードがなくなったので、sudoersファイルの行も次のように変更する必要があります。
hbruijn ALL=(ALL) NOPASSWD:ALL
Sudoのパスワードがないことに慣れておらず、本当にパスワードが必要な場合でも、ハッシュされたパスワードを送信する必要はありません。パスワードなしでアカウントを作成し、公開鍵を設定します。 ssh経由でログインしてpasswd
を実行し、独自のパスワードを設定できます。