私は長年の技術専門家ですが、私の仕事の100%はWindows環境内で行われています。私は、ユーザーアカウント管理、セキュリティ、ソフトウェア開発などの技術的な問題の多くをかなりよく理解しています。
Debianを実行しながらVPSをセットアップしようとしているときに(これは個人的なプロジェクト用です)、システムのセットアップ、ソースのダウンロード、およびコンパイルに役立つ多くの説明文書を見つけました。
私を混乱させるのは、あなたが常に rootとしてソフトウェアを実行することを思いとどまらせているということです。 rootは、ユーザーアカウントと権限を設定するためにのみ使用する必要があるようです。ただし、アカウントがシステムが提供するほぼすべてのものにアクセスする必要がある場合、アカウントにはルートアクセスが許可されます。
アカウントにルートアクセスが許可されている場合、そのアカウントは本質的にルートではありませんか?それが本当なら、なぜ私は物事を単純に保ち(これは単純なプロジェクトであるため)、VPSルートアカウントからすべてを実行することができないのですか?
私はこれに対する良い答えがなければならないと思います、そして私はそれをただ逃しています。ソフトウェアをrootとして実行しないことが重要で確立された真実であるのは直感に反しているようですが、重要なアカウントにはrootアクセスを許可することをお勧めします。私見ですが、これはさらに大きなセキュリティ問題のように思われます。rootアカウントが1つしかないのではなく、2つ(またはそれ以上!)のアカウントが侵害される可能性があるからです。
もちろん、別の可能性があります-私が(グーグルを通して)見つけたドキュメントの多くは間違っています。その場合、残念ながら、非常に専門的な(そして多くの場合明確な)Webサイトで提供される不十分な情報が大量にあります。これは残念で少しがっかりします。
「ルートアクセスを許可する」とはどういう意味かわかりませんが、システムの特定の側面のみを管理者が制御できるようにする通常の方法は、微調整できるSudo
メカニズムを使用することです。ユーザーが必要とするものだけ。
デーモン/サービスの場合、他のユーザーとして実行されている子を起動または生成した後にroot権限を削除するなど、他の方法が存在します。
さらに、さらに優れた制御を可能にする他の方法がありますが、それらは通常、はるかに複雑でエラーが発生しやすいものです(SELinuxを考えてください)。このアプローチの一般的な用語は ロールベースのアクセス制御 です。
ユーザーを「Sudo」として実行することとrootを使用することの違いについて混乱していると思います。プログラム「Sudo」は、マシン上のユーザーにスーパーユーザーコマンドを実行するように提供します。これで、Sudo内でも、完全なrootアクセスでユーザーのアカウントを実行していませんが、suまたはSudoにはまだ制限があります。また、特にこのような質問をするときは、Debianのセキュリティ慣行について発言することはお勧めしません。
最初にrootを必要とする多くのプロセスは、昇格された特権を必要とする初期セットアップタスクを実行した後、setuid [1]を使用して特権[2]を削除します。このアプローチには、デーモン/サービスが開始時に昇格された権限を必要とするアクションを実行し、後で非特権ユーザーにドロップできるという利点があります。これにより、プロセスが誤動作したり、侵害されたりした場合の露出が少なくなります。
例えば。 Apacheは、システムのポート80にバインドする必要があります。ポート80は特権ポート(1024未満)であり、rootアクセスが必要です。したがって、これは、最初にrootとしてApacheを実行し、ポートとその他の必要なセットアップをバインドし、次にsetuidを使用してプロセスをWebサーバーユーザー(ubuntuのwww-data)として実行することで解決されます。