web-dev-qa-db-ja.com

sudoはどの程度普遍的ですか?

何かをインストールする方法(TeX関連-質問しない場合は、詳細を提供して1日を台無しにすることはありません)の手順をいくつか書いていて、Sudoを使用してシステム全体にインストールしました。誰かが、SudoがすべてのLinux(またはUnix)ディストリビューションで利用可能であるとは思わなかったとコメントしました。

SudoがないUnixディストリビューションはありますか?ある場合、それらは何ですか?すべてのシステムでisと呼ばれる、一般に認められている「Get me superuser privileges」コマンドはありますか?

27
Andrew Stacey

Sudoは普遍的とは見なせません:

  • Red Hat Enterprise LinuxSudoはRed Hat Enterprise Linuxとその派生物にデフォルトでインストールされます。1 ただし、RHEL 7以降ですぐに使用できるもののみをインストールします。

    Red Hat Enterprise Linux 7は、新しいオプションを 最初の非rootユーザーを作成するインストール画面 に追加しました。これは、「このユーザー管理者にする」というチェックボックスです。その目的は、インストールガイドのそのページには記載されていませんが、その効果の1つは、そのユーザーがSudoを介して任意のコマンドを実行できるようにすることです。そのユーザーをwheelグループに追加することで、ストックSudoパッケージ構成で任意のコマンドを実行できます。

    Red Hat Enterprise Linux 3から6もデフォルトでSudoがインストールされています。2 RHEL 7までは、rootのみがコマンドを実行できるように構成されて出荷されていました。これを修正する最も簡単な方法は、1人以上のユーザーをwheelグループに追加し、次にvisudoをrootとして実行し、%wheel ALL=(ALL)...行のコメントを外すことです。

  • Debian:Debian 9以降、最小インストールにはSudoが含まれます。

    Debian 7および8では、Sudoを取得するために、インストール中に「 標準システムユーティリティ 」パッケージセットを選択する必要がありました。この方法でSudoをインストールすると、OSインストーラーは、インストールプロセスの前半で作成した非管理ユーザーを、すべてのコマンドを実行する権限を持つSudoグループに自動的に追加します。

    Debian 6以前では、インストール後に_apt-get_を介してSudoをインストールし、それを手動で設定して、root以外のユーザーに使用を許可する必要がありました。

  • FreeBSDSudoは、デフォルトではFreeBSDにインストールされていません。 Portsからビルドする必要があります。

  • NetBSD:FreeBSDと同じです。

  • OpenBSDSudoはデフォルトでOpenBSDにインストールされていましたが、 switched to- doas 現在 5.8、2015年10月リリース 現在。 doasはデフォルトで無効になっています。

    現在のバージョンでSudoを取得するには、パッケージリポジトリからインストールする必要があります。 OpenBSDのSudoパッケージは、RHEL 3から6と同様に構成されているため、rootだけがコマンドを実行でき、Sudoの目的に反しています。インストール中にroot以外のユーザーを追加した場合、そのユーザーはwheelグループに追加されたので、OpenBSDシステムでSudoを有効にする最も簡単な方法は、 visudoを介した%wheel ALL=(ALL)...行。

  • SolarisSudoは、Solaris 11にデフォルトでインストールされますが、Solaris 10以前は同様のものを使用しますが、完全ではありません-同じ pfexec

    古いシステムではSudoを取得できますが、デフォルトが重要です。 Solaris 10以前は何年も私たちと一緒にいるので、あなたの環境にSolarisがあり、それらのシステムを個人的に制御しておらず、Sudoがそこにあることを確認できるなら、それを当てにすることはできません。 。

システムが古いほど、Sudoがない可能性が高くなります。 Sudoは非常に古い ですが、2000年代半ばまで人気が出始めていませんでした。それより古いシステムでは、Sudoが存在する可能性はほとんどありません。 Unixボックスは長持ちする傾向があるので、今日でもそのようなシステムに出くわすとは考えられません。

私が個人的に管理しているシステム、またはUbuntu、macOS、openSuSEなどのシステムでは、デフォルトでroot権限を取得するonly方法であるSudoのみを当てにしています。

suSudoよりもユニバーサルな「get me superuser Privileges」コマンドに近いが、ルートアカウントがデフォルトでロックされているUbuntuやmacOSなどのシステムがある具体的には、Sudoの代わりにsuを使用するように強制します。したがって、su universalを呼び出すこともできません。


脚注

  1. CentOS、Oracle Linux、Scientific Linux ...

  2. はい、最小インストールでも可能です。

35
Warren Young

Sudoは、ほとんどすべてのLinuxシステムで使用できるユーティリティです。
ただし、すべてのディストリビューションにデフォルトでバンドルされているわけではありません。ただし、すべての主要なディストリビューションでは、デフォルトでバンドルされています。

ユーザーが完全にカスタマイズできるArch Linux、Gentoo、LFSなどのLinuxディストリビューションには、デフォルトでSudoがありません。

Arch Linuxでは、ベースシステムにSudoがインストールされていません。ユーザーは手動でSudoをダウンロードし、sudoersファイルを編集する必要があります。
GentooおよびLFS用のDitto。 Sudoがなければ、他の主要なディストリビューションは知りません。

そして、いいえ、私はスーパーユーザー権限の付与においてSudoよりも普遍的なものはないと思います。つまり、実際にrootとしてログインすることは別です。

9
darnir

最も広く使用されているディストリビューションであるUbuntuは、ルートになるための推奨される方法としてSudoを使用します(コマンドラインを使用する場合— GUIに固執するユーザーは、下で何が起こるかを理解したり気にしないとパスワードプロンプトが表示されます。フード)。他のディストリビューションでは、Sudoのセットアップを推奨する場合としない場合があり、Sudoを出荷する場合としない場合もあります。一方、suはどこでも使用でき、ユーザーがrootパスワードを取得できないため、Sudoのみが使用可能なシステムを除くほとんどのシステムで使用できます。

suSudoの間には、ほとんどすべてのユーザーが含まれます。 califeまたはopまたはpfexecを必要とするエキゾチックな数人は、すでに何をすべきか知っています。そうでない場合でも、suSudoも使用していないシステムでは、見慣れない場所にファイルがあり、命令が機能しない可能性があると思っていなかった十分なことが発生する可能性があります。とにかく。

あなたの質問に答えるために、最も正確には、Sudoは普遍的とは見なされません。正直なところ、「ユニバーサル」のコンセプト全体は、しばしば赤いニシンです。これは、ディストリビューション間の互換性に関して特に当てはまります。多数の異なるソフトウェアバージョンを使用すると、普遍性は半非現実的になります。スクリプティングは本質的に実用的であり、もしそれが教訓的だったとしたら、移植可能なスクリプトを書くことは事実上不可能でしょう。

通常、目的の実行環境であるセミモダンLinuxディストリビューションを測定します。共通のGNU Utilsを備えたPOSIXシェルを想定しています。Linuxの外部で実行できるスクリプトの場合、完全なPOSIX標準のみを想定しています明らかに、多くのスクリプトはLinuxまたはディストリビューションに固有であるため、移植性の範囲が狭くなることがよくあります。

特定のスクリプトのケースに対処するには、

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='Sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        Sudo)
            Sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

貼り付けられたスクリプトはPOSIX Shellの賛辞であり、私は常にDash互換と書いています。

6
J. M. Becker