これは私の質問に対するフォローアップですここ。
私は最初の Web サーバーをセットアップしており、セキュリティを強化するために、どのようなユーザー アカウントを作成し、どのような権限を与えるべきかについて試行錯誤しています。以下は、私が持っているものです。
2 人の開発者用に 2 つのアカウントがあり (これらは補助グループ に追加されていますdevs
)、サーバーに ssh できるのはこれらのアカウントだけです。Web アプリケーション (Django ベース) 用に、シェル アクセスを持つ通常のユーザーを 1 人作成しました(ユーザーapp
としては設定しておらず、グループ に属しています)。2 人の開発者は、サーバーに ssh した後、更新やアプリケーションの起動/停止を行うために に su します。ユーザーはを実行することはできません(の使用でグループ設定に追加されないためブロックされています)。また、cron ジョブが ssh してログ ファイルやステータスなどを取得するバックアップ関連のタスクを実行できない 3 番目のアカウントもあります。--system
app
app
app
su
/etc/pam.d/su
pam_wheel.so
su
セキュリティ面を改善する必要がある場合はお知らせください。(追記: 私は初心者です)
答え1
su
パスワードを共有する必要があります。私は sudo を好みます。したがって、開発者は をsudo -u app command
実行してcommand
として実行するapp
か、 を実行sudo -u app -i
して として対話型シェルを起動します。のシェルを /bin/false や /bin/true などに設定している場合はapp
可能です。sudo -u app -i /bin/bash
app
アプリとして完全なシェルは必要なく、アプリを再起動するだけでよい場合は、アプリとして実行できるコマンドを制限できます。アクセスする必要があるディレクトリにデフォルトの ACL を使用して、開発者とアプリへのアクセスを許可し、ファイルシステムのアクセス許可の問題が起こらないようにします。私の意見では、最小権限の原則に従う必要があります。必要がない場合は、アクセスを許可しないでください。
通常、私は ssh にのみキーを使用することを好みます。それが可能な場合は、開発者のパスワードを無効にし、パスワードを必要としない sudo ルールを設定します。そうすれば、誰に対してもパスワードは必要なくなり、パスワードを公開したり、紛失したり、リセットしたりする必要もなくなります。
今晩の読書課題は、この投稿ではちょっと長すぎるので、「ファイルシステム ACL はどのように機能するか」と「sudo をどのように構成するか」です。おそらく、その後に SSH キーの管理が続きます。