ターミナル: login(1) または su(1)?

ターミナル: login(1) または su(1)?

私はOSXを使用しています。両方使用できますログイン(1)またはす(1)任意のユーザーとしてログインします。

しかし、同じジョブを実行するために 2 つのバイナリが必要ですか?

どちらが消費量が少ないかシステムリソース?

どちらが起こりにくいかセキュリティリスク?

どれの内部の違い?

[注記: ルート アクセスを取得することは問題ありません。マルチユーザーでネットワーク化された *nix 上のアカウントへのアクセスを自動化することを計画しているだけです。]

答え1

login現在の環境を破棄して、新しい環境でシェルを起動します。

su既存の環境を使用してシェルを起動し、HOME、USER、および SHELL 変数のみを変更します。

例えば、

> export foo=bar
> su <username>
> echo $foo
bar

しかし:

> export foo=bar
> login <username>
> echo $foo

何も印刷されません。

私の知る限り、su -lは と同等ですlogin

答え2

su(1) は現在の環境で新しいシェルを作成し、サブシェルを終了すると呼び出し元のシェルに戻ります。

login(1) も新しいシェルを作成しますが、環境は新しくなります。

答え3

まったく同じ作業ではありません。「su」は現在の端末を所有するユーザーを変更するだけで、「login」は(名前の通り)新しいセッションを作成します。

私は OSX の専門家ではありませんが、すべての *NIX において、重要なセキュリティ上の考慮事項は、ルートへのリモート直接ログインを禁止することです。これは、一般ユーザーとしてログインした後、「su」によってのみ実行する必要があります。

関連情報