
上司から、私は自社の Red Hat 実稼働サーバーのシステム管理者に志願しました。上司は、rm -f *
少し前に起こったような事故を避けるために、セキュリティを強化するよう私に依頼しました。
現在、53 人のユーザーがマシンに sudo でアクセスしており、監査が大変です。特定の曜日にのみユーザー アクセスを許可することは可能でしょうか。
たとえば、ユーザー「Joe」は火曜日と木曜日のみログインでき、「Jane」は日曜日のみログインできるようにできますか?etc/sudoers
これを許可するようにカスタマイズできますか?
sudoers を使用する代わりにもっと良い方法はありますか?
答え1
sudo
Linux ボックス上の他のほとんどすべてと同様に、PAM を介して認証を行います。
したがって、これを実行するには を使用できるはずですpam_time.so
。
少なくとも Debian では、そのモジュールはデフォルトで有効になっていません。次のような行を追加する必要があります。
account requisite pam_time.so
/etc/pam.d/sudo
sudo のみを有効にするか、( /etc/pam.d/common-account
pam-auth-update ブロックの後に) システム上のすべてのプログラムに対して有効にします。
次に編集して/etc/security/time.conf
制限を設定します。サービス名は にする必要がありますsudo
。たとえば、Fred がsudo
金曜日の午後 3 時から午後 5 時までのみ使用できるようにするには、次のようにします。
sudo;*;fred;Fr1500-1700
(注: これをテストしていません。)
編集:明確に言うと、私は他の回答やさまざまなコメント投稿者に同意します。あまりにも多くの人が root としてあまりにも多くのコマンドを実行しているように見えます。これは本当に修正する必要があります。そしてもちろん、root になれるなら、pam 構成を編集できます...
答え2
53 人のユーザーが日常業務を行うために sudo を必要とする理由について疑問に思います。ほとんどのユーザー (開発者も含む) にとって、sudo はまれな例外であり、誰かが気軽にコマンドを実行するような日常的なものではないはずですsudo rm -rf *
。
グループ権限 (またはさらに高度な ACL) を使用して、作業を完了するために必要なファイルへのアクセス権をユーザーに付与することはできますか。たとえば、setuid または sudo スクリプトまたはバイナリを使用して、サービスの再起動などの操作を実行できるようにするなどです (安全な setuid/sudo スクリプトを作成するのは難しいため、正直なユーザーを正直に保つことが重要です)。
たとえ、1 週間に 1 日だけ sudo アクセスを制限できたとしても、1 週間で 53 人が sudo アクセスを持つことになるので、根本的な問題の解決にはあまり役立ちません。
ところで、私は、そんなに多くのユーザーが本番サーバーへのアクセスを必要とするのかどうか疑問に思います。ログや必要なデータ/ファイルを非本番マシンに送信できますか?
答え3
最も簡単な方法は、sudoers.d ディレクトリ (includedir 経由) を設定に使用することです。その後、必要な時間に各ユーザーのルールをそのディレクトリに配置する cron ジョブを作成できます。
#includedir ディレクティブを /etc/sudoers で使用して、ルールの一部として sudoers ルールをドロップできる sudoers.d ディレクトリを作成できます。たとえば、次のようになります。
#includedir /etc/sudoers.d
sudo は /etc/sudoers.d 内の各ファイルを読み取りますが、パッケージ マネージャーまたはエディターの一時ファイルやバックアップ ファイルで問題が発生するのを避けるため、ファイル名が '~' で終わるか '.' 文字を含むファイルはスキップします。ファイルはソートされた語句順に解析されます。つまり、/etc/sudoers.d/01_first は /etc/sudoers.d/10_second より前に解析されます。ソートは数値ではなく語句によるため、/etc/sudoers.d/1_whoops は /etc/sudoers.d/10_second より後にロードされることに注意してください。ファイル名の先頭のゼロの数を一定にすると、このような問題を回避できます。
#include で取り込まれたファイルとは異なり、visudo は、構文エラーが含まれていない限り、#includedir ディレクトリ内のファイルを編集しないことに注意してください。ただし、visudo を -f フラグ付きで実行して、ファイルを直接編集することは可能です。
joe にアクセスを許可したい場合は /etc/sudoers.d/joe が存在し、アクセスを禁止するにはこのファイルを削除するだけです。
答え4
ユーザーを sudo グループに入れるための crontab を追加し、次にそのユーザーを削除するための 2 番目の crontab を追加することができます。