これは私の質問に対するフォローアップです。ここ。
私は最初のWebサーバーを設定しており、よりセキュリティを確保するためにどのユーザーアカウントを作成し、権限を作成する必要があるかを調べています。以下は私が持っているものです。
私は2人の開発者のための2つのアカウントを持っていて(そして彼らはサプリメントグループに追加されましたdevs
)、彼らだけがサーバーにSSHを介してアクセスできます。 Webアプリケーション(Djangoベース)の場合、シェルアクセス権を持つ1人の一般ユーザーを作成しましたapp
(ユーザーで構成されておらず、--system
グループに属していますapp
)。 2人の開発者がサーバーにSSHでアクセスしたら、アップデートを実行してapp
アプリケーションを起動/停止します。app
ユーザーは実行できません(su
使用中のグループ設定に追加しないためブロックされます)。また、cronジョブがsshを介してログファイル、ステータスなどを取得するバックアップ関連のタスクを実行できない3番目のアカウントもあります。/etc/pam.d/su
pam_wheel.so
su
セキュリティの改善が必要な場合はお知らせください。 (PS:私は初心者です)
答え1
su
共有パスワードが必要です。私はSudoを好む。したがって、開発者はsudo -u app command
実行して実行することも、対話型シェルを起動するために実行することもできます。おそらく、シェルを/bin/falseまたは/bin/trueのように設定した場合です。command
app
sudo -u app -i
app
sudo -u app -i /bin/bash
app
アプリケーションにフルシェルは必要なく、アプリケーションを再起動する必要がある場合は、アプリケーションとして実行できるコマンドを制限できます。アクセスする必要があるディレクトリにデフォルトのACLを使用すると、開発者とアプリケーションにアクセス権が付与されるため、ファイルシステム権限の問題は発生しません。 IMHOの最小権限原則に従う必要があります。必要でない場合は、この操作を実行する権限を付与しないでください。
通常、私はssh用のキーを使用することを好みます。可能であれば、開発者パスワードを無効にし、sudoルールを設定してパスワードを要求しないようにしてください。これにより、誰もパスワードを必要としないため、パスワードを漏洩/紛失/リセットできません。
今夜の読書課題は、この記事に「ファイルシステムACLの仕組み」と「sudoの設定方法」という内容がたくさん含まれているからです。おそらく以下はSSHキーを管理することです。