sudoはどのくらい普遍的ですか?


26

私は何かをインストールする方法についていくつかの指示を書いていました(TeX関連-あなたが尋ねないなら、私は詳細を提供することであなたの一日を台無しにしません)sudo。誰かが、それがsudoすべてのLinux(またはUnix)ディストリビューションで利用可能であるとは思わなかったとコメントしました。

を持っていないUnixディストリビューションはありsudoますか?すべてのシステムに共通して認められている「スーパーユーザー権限を取得」コマンドがありますか?

回答:


34

sudo ユニバーサルと見なすことはできません:

  • Red Hat Enterprise LinuxはsudoのRed Hat Enterprise Linuxおよびその誘導体、上のデフォルトでインストールされた1それだけでRHEL 7以降ですぐに使用できるインストールされます。

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

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

  • Debian:Debian 9の時点では、最小インストールにはが含まれていsudoます。

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

    Debian 6以前では、インストール後にsudovia apt-getでインストールし、手で設定して、root以外のユーザーが使用できるようにする必要がありました。

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

  • NetBSD:FreeBSDと同じです。

  • OpenBSDのsudoOpenBSDのではデフォルトでインストールされるように使用されるが、彼らはきたスイッチdoasのよう5.8、2015年10月にリリースdoasデフォルトでは無効になっています。

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

  • SolarissudoSolaris 11にはデフォルトでインストールされますが、Solaris 10以前では、similar-but-not-quite-the-sameが使用されますpfexec

    sudo古いシステムでも入手できますが、デフォルトが重要です。Solaris 10以前は何年も使用されるため、環境内にSolaris sudoがあり、それらのシステムを個人的に管理しておらず、確実にそこにいる場合は、頼りにできません。

システムが古ければ古いほど、システムにない可能性が高くなりますsudosudo非常に古いです、それは2000年代半ばまで普及してきて起動しませんでした。それより古いシステムにはありそうもないsudo。Unixのボックスは長持ちする傾向があるため、今日でもこのようなシステムを実行することは考えられません。

sudo個人的に管理しているシステム、またはUbuntu、macOS、openSuSEなど、デフォルトでルート権限を取得する唯一の方法に依存します。

suは、普遍的な「スーパーユーザー権限を取得」コマンドに近いsudoですが、UbuntuやmacOSなどのシステムがあり、デフォルトでrootアカウントがロックされ、特にのsudo代わりに使用するように強制されますsu。だから、あなたもsu普遍的と呼ぶことはできません。


脚注

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

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


9

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

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

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

いいえ、sudoスーパーユーザーの権限を付与することよりも普遍的なものは存在しないと思います。つまり、実際にルートとしてログインすることは別として。


1
sudoほとんどのディストリビューションにバンドルされている場合がありますが、すべてのユーザーがすべてのユーザーを実行できるように構成しているわけではありません。
jsbillings

もう一つの良い点。sudoersファイルの内容に依存します。
darnir

7

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

との間susudo、ほぼすべてのユーザーをカバーします。すでに何をする必要があるcalifeか、opまたはpfexec何をすべきかを知っているエキゾチックな少数。たとえそうでなくても、どちらsuも使用していないシステムsudoや、なじみのない場所にファイルが存在する可能性は低く、指示が機能しないとは思わない十分なものがあります。


6

あなたの質問に答えるために、最も正確には、「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シェルの賛辞であり、私は常にDash互換と書きます。


しかし、スクリプトではsudoをインストールする必要はありませんか?sudoを使用せずにスーパーユーザーアクセスを取得する方法はありますか?単純なスクリプトを通して?
-darnir

@darnir:いいえ、貼り付けたスクリプトをsudoインストールする必要はありません。スーパーユーザーの実行が必要であり、利用sudo可能であれば使用できます。をsudo使用できない場合、スクリプトはrootユーザーとして実行する必要があります。そうでない場合は実行されますdie
JMベッカー

@darnir:さらに、「プレーンスクリプト」と呼ばれるものは本当にありません。シェルの組み込みを除くほとんどすべては、通常のバイナリを介して行われます。これがシェルの要点であり、対話型または自動化された他のコマンドを呼び出します。シェルを汎用プログラミング言語から分離するのは、この定義特性です。したがって、スーパーユーザーの獲得方法に関係なく、外部コマンドを使用してそれを実行します。未加工のカーネルインターフェースを使用してコーディングしないと仮定します。
JMベッカー

1
@varesa:興味深いことに、Ubuntuはsudo / suのデフォルト構成とは正反対です。を実行することにより、ユーザーが使用できるsudoパーミッションを確認できますsudo -l。残念ながら、パスワードの入力が必要になる可能性があるため、この状況では使用できません。これについてもっと慎重に考えてみると、実際には、ディストリビューションごとのテストを行うことで、コンセプト全体が最適に達成されると思います。デフォルトの無効化されたディストリビューションをsu -c実行しているsu場合を除き、その場合はを使用しsudo su -cます。他の人が言及したように、スーパーユーザーの昇格はユーザーに任せるのが最善です。
JMベッカー

1
@varesa:未設定のを使用する可能性を減らすために、貼り付けたスクリプトを更新しましたsudo。これは、デフォルトsu/ sudo構成を想定して、ほとんどのディストリビューションで適切に実行されるはずです。時代遅れのUbuntuの前lsb_releaseに対処する必要があることは知っています...しかし、これは実際には単なる例であり、明らかに拡張される可能性があります。
JMベッカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.