背景
複数のエンジニアが共有するLinuxを実行する複数のRaspberry PI 3デバイスがあります。簡潔にするために、各Linuxボックスには、私たちが開発するソフトウェアをテストするために同じデフォルトのユーザー名/パスワード(つまり、誰もがrootとしてログインします)があります。これは硬い要件(つまり、変更できない)
質問
時々、2人のユーザー(通常は1人はオフィスで働き、もう1人はVPNを介してリモートで働いています)が同時に同じデバイスにログインし、両方のユーザーが利得を獲得したいソフトウェアを実行すると、お互いに問題を引き起こす可能性があります。権限。ボックスに接続されたハードウェアへの排他アクセス。また、ユーザーがシステムを再起動して他の開発者を迷惑にすることもあります。私たちは排他的なアクセススケジュールを実装しようとしますが、誰かが「ただちに確認を完了する必要がある場合」、これらのスケジュールはしばしば無視されます。
質問
どのような方法がありますか?オンデマンド(つまり、この「機能」を常に有効にしたくはありません)SSH_CLIENT
。できるようにします。個人?たとえば、BobとAliceの両方がdarkstar
ユーザー名を使用してホストにログインしたいとしますroot
。 Bobが最初にログインすると、彼のIPアドレスはです192.168.1.100
。 Bobは10分間のシングルアクセスを必要とするため、その10分間にdarkstar
特別なコマンド(例:)を実行します。bash /opt/mine_for_10_mins.sh
- Bobは、同じ送信元IPアドレス(またはここに保存されているすべてのもの)から来る限り、他の対話型/非対話型SSHインスタンス(たとえば、、などを介したログイン)を作成でき
ssh
ますscp
。sftp
192.168.1.100
SSH_CLIENT
- そのIPからログインしようとしているAliceが
10.10.0.200
10分以内にログインできないか、Bobがログアウトします。理想的には両方を持ちたいと思い、ボブが1箱を48時間保管し、週末に残して人々がログインできなくなることがないように制限を設定したいと思います。Bobは早くやめたいと思いますが、一度に10分(または12時間)以上の約束をとることはできません。
理想的には、タイマーを使用してこれを実行したいのですが、実用的でないか難しい場合は、Bobがすべてのログインセッションを終了したときに「保留」を終了したいと思います192.168.1.100
。
これまで働く
touch
'ing'を試してみましたが、/etc/nologin
エンジニアがリモートで作業している場合(柔軟な在宅勤務の設定)、自動削除を保証する方法が見つからず、誰もがボックスからロックしたくありません。誰かがリモートでデバイスを修正しない限り(私たちはこの問題を解決するためにネットワークサポートKVMを開発しています)。
インスタンスをシャットダウンして定期的に(たとえば5秒ごとに)他のIPで他のユーザーを自動的に起動するスクリプトを実行することもできますが、人々が非sshd
対話型で実行するのは非常に一般的なので、ログインを完全にブロックしたいと思います。同じLinuxシステム上の他のユーザーを妨げる可能性のあるスクリプトを含むセッションとssh
ポーリングベースの方法は、これを防ぐことはできません。
ありがとうございます。
答え1
あなたの例では、iptablesを使用してAliceのSSHアクセスを明示的にブロックし、BobのIPアドレスからのSSHトラフィックを許可します。コマンドラインで次の内容を入力するか、スクリプトを作成する必要があります。
BobのIP(192.168.1.100)がSSHを介してデフォルトポート22に接続できるようにする
$ sudo iptables -I INPUT -s 192.168.1.100 -p tcp -m tcp --dport 22 -m comment --comment "Allow Bob to SSH" -j ACCEPT
AliceのSSHアクセスをブロックします。
$ sudo iptables -I INPUT -s 10.1.0.200 -p tcp -m tcp --dport 22 -m comment --comment "Block Alice from using SSH to login" -j DROP
Aliceのブロックを解除するには、--listオプションと--line-numbersオプションを指定してiptablesコマンドを使用して、AliceのIPアドレスを含む行を見つけて、テーブルからその行を削除できます。
$sudo iptables -L --line-numbers | grep 10.1.0.200
num target prot opt source destination
1 DROP tcp -- 10.1.0.200 anywhere tcp dpt:ssh /* Do not allow Alice to SSH in */
$ sudo iptables -D INPUT 1
または、単一のコマンドで同じ操作を実行します。
$ sudo iptables -L --line-numbers | grep "10.1.0.200" | awk '{print $1}' | xargs -i iptables -D INPUT {}
そして、同じコマンドを使用してAliceのIPをBobのIPに置き換えて、BobのIPの明示的な「許可」ルールを削除します。
台本は皆さんにお任せいたします。 10分タイマーを有効にする最良の方法を知りたい場合は、教えてください。