Seberapa universal sudo?

26

Saya sedang menulis beberapa petunjuk tentang cara menginstal sesuatu (terkait TeX - jika Anda tidak bertanya, saya tidak akan merusak hari Anda dengan memberikan rincian lebih lanjut) dan digunakan sudountuk menginstal seluruh sistem. Seseorang berkomentar bahwa mereka tidak berpikir sudoitu tersedia di semua distribusi Linux (atau Unix).

Apakah ada distribusi Unix yang tidak memiliki sudo, dan jika demikian, apakah mereka? Apakah ada diakui secara universal "Dapatkan saya superuser hak istimewa" perintah yang adalah pada semua sistem?

Loop Space
sumber

Jawaban:

34

sudo tidak dapat dianggap universal:

  • Red Hat Enterprise Linux : sudodiinstal secara default pada Red Hat Enterprise Linux dan turunannya, 1 tetapi hanya menginstal yang siap digunakan di RHEL 7 dan yang lebih baru.

    Red Hat Enterprise Linux 7 menambahkan opsi baru ke layar instalasi tempat Anda membuat pengguna non-root pertama , kotak centang berlabel "Jadikan ini administrator pengguna." Tujuannya tidak didokumentasikan pada halaman panduan instalasi tersebut, tetapi salah satu efeknya adalah untuk memungkinkan pengguna untuk menjalankan perintah apa pun sudo. Itu melakukannya dengan menambahkan pengguna itu ke wheelgrup, yang dapat menjalankan perintah apa pun di bawah sudokonfigurasi paket stok .

    Red Hat Enterprise Linux 3 hingga 6 juga diinstal sudosecara default, 2 tetapi hingga RHEL 7, ia dikirimkan dengan konfigurasi sedemikian rupa sehingga hanya rootdapat menjalankan perintah melalui itu. Cara termudah untuk memperbaikinya adalah menambahkan satu atau lebih pengguna ke wheelgrup, lalu jalankan visudosebagai root dan batalkan komentar pada %wheel ALL=(ALL)...baris.

  • Debian : Pada Debian 9, instalasi minimal termasuk sudo.

    Di Debian 7 dan 8, Anda harus memilih paket " Utilitas sistem standar " yang ditetapkan selama instalasi untuk mendapatkan sudo. Jika Anda menginstalnya sudo, installer OS akan secara otomatis menambahkan pengguna non-administratif yang Anda buat sebelumnya dalam proses instalasi ke sudogrup, yang memiliki izin untuk menjalankan semua perintah.

    Di Debian 6 dan sebelumnya, Anda harus menginstal sudomelalui apt-getsetelah instalasi dan mengkonfigurasinya dengan tangan untuk memberikan pengguna non-root kemampuan untuk menggunakannya.

  • FreeBSD : sudotidak diinstal secara default di FreeBSD. Anda harus membuatnya dari Ports.

  • NetBSD : Sama seperti FreeBSD.

  • OpenBSD : sudodulu diinstal secara default di OpenBSD, tetapi mereka telah beralih ke doaspada 5.8, dirilis pada Oktober 2015 . doaskapal dinonaktifkan secara default.

    Untuk masuk sudoke versi saat ini, Anda harus menginstalnya dari repositori paket. sudoPaket OpenBSD dikonfigurasi seperti di RHEL 3 hingga 6, sehingga hanya rootdapat menjalankan perintah melaluinya, yang agak mengalahkan tujuan sudo. Jika Anda menambahkan non- rootpengguna selama instalasi, itu ditambahkan ke wheelgrup, jadi cara paling sederhana untuk membuat sudoberguna pada sistem OpenBSD adalah dengan menghapus tanda komentar pada %wheel ALL=(ALL)...baris melalui visudo.

  • Solaris : sudodiinstal secara default di Solaris 11, tetapi Solaris 10 dan yang lebih lama menggunakan yang serupa-tetapi-tidak-cukup-sama-sama pfexec.

    Anda bisa mendapatkan sudountuk sistem yang lebih lama, tetapi masalah bawaan adalah hal yang utama. Solaris 10 dan yang lebih lama akan bersama kami selama bertahun-tahun, jadi jika Anda memiliki Solaris di lingkungan Anda dan Anda tidak secara pribadi mengendalikan sistem-sistem itu dan dapat memastikan sudoada di sana, Anda tidak dapat mengandalkannya.

Semakin tua sistem, semakin besar kemungkinan tidak ada sudo. Meskipun sudosangat tua , itu tidak mulai menjadi populer hingga pertengahan 2000-an. Sistem yang lebih tua dari itu sangat tidak mungkin untuk dimiliki sudo. Kotak Unix cenderung hidup lama, sehingga tidak terbayangkan Anda masih akan menjalankan sistem seperti itu hari ini.

Saya hanya mengandalkan sudosistem yang saya kelola secara pribadi, atau yang seperti Ubuntu, macOS, atau openSuSE yang merupakan satu - satunya cara untuk mendapatkan hak akses root, secara default.

sulebih dekat ke "mendapatkan saya superuser hak istimewa" perintah yang universal dari sudo, tapi kemudian Anda memiliki sistem seperti Ubuntu dan MacOS di mana account root terkunci secara default khusus untuk memaksa Anda untuk menggunakan sudobukan su. Jadi, Anda juga tidak bisa menyebut suuniversal.


Catatan kaki :

  1. CentOS, Oracle Linux, Scientific Linux ...

  2. Ya, bahkan dalam pemasangan minimal.

Warren Young
sumber
9

sudoadalah utilitas yang tersedia di hampir semua Sistem Linux.
Namun, ini tidak dibundel secara default di semua distro. Semua distro besar memilikinya dibundel secara default.

Distribusi Linux seperti Arch Linux, Gentoo, LFS, dll. Yang memungkinkan kustomisasi lengkap pengguna tidak memiliki sudo secara default.

Di Arch Linux, sistem dasar tidak datang dengan sudodiinstal. Pengguna harus mengunduh sudodan mengedit file sudoers secara manual .
Ditto untuk Gentoo dan LFS. Saya tidak tahu ada distro besar lainnya tanpa sudo.

Dan tidak, saya tidak berpikir ada sesuatu yang lebih universal daripada sudomemberikan hak pengguna-super. Artinya, selain benar-benar masuk sebagai root.

darnir
sumber
1
sudomungkin dibundel pada sebagian besar distro, tetapi tidak semua dari mereka mengkonfigurasi setiap pengguna sebagai mampu menjalankannya.
jsbillings
Poin bagus lainnya. Tergantung pada apa yang dikatakan file sudoers.
darnir
7

Distribusi yang paling banyak digunakan, Ubuntu, digunakan sudosebagai metode yang direkomendasikan untuk menjadi root (saat menggunakan baris perintah - pengguna yang tetap menggunakan GUI akan mendapatkan prompt kata sandi tanpa memahami atau peduli tentang apa yang terjadi di bawah tenda). Distribusi lain mungkin atau mungkin tidak mendorong sudo didirikan dan mungkin atau mungkin bahkan tidak mengirimkannya. Di sisi lain, sutersedia di mana-mana, dan dapat digunakan pada sebagian besar sistem kecuali yang hanya sudotersedia karena pengguna tidak akan memiliki kata sandi root.

Antara sudan sudo, Anda akan mencakup hampir semua pengguna Anda. Eksotis beberapa yang membutuhkan califeatau opatau pfexectahu apa yang harus dilakukan sudah. Sekalipun tidak, sistem yang tidak menggunakan dan sujuga sudotidak mungkin memiliki file di tempat asing dan cukup banyak hal yang belum Anda pikirkan sehingga instruksi Anda mungkin tidak akan berhasil.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Untuk menjawab pertanyaan Anda, paling akurat, sudotidak dianggap tidak universal. Sejujurnya seluruh konsep 'universal', seringkali menjadi ikan haring merah. Ini terutama benar, berkenaan dengan kompatibilitas lintas-distro. Setelah Anda melemparkan banyak versi perangkat lunak yang berbeda, universalitas menjadi semi-realistis. Scripting pada dasarnya adalah pragmatis, jika itu bertele-tele, menulis skrip portabel praktis tidak mungkin.

Biasanya saya mengukur lingkungan yang ingin saya jalankan, distribusi semi-modern Linux, saya mengharapkan shell POSIX dengan GNU Utils yang umum. Untuk skrip yang dapat berjalan di luar Linux, saya hanya mengharapkan standar POSIX penuh. Jelas banyak skrip yang khusus untuk Linux, atau khusus untuk distro, sehingga sering mempersempit ruang lingkup portabilitas.

Untuk mengatasi kasus skrip spesifik Anda,

#!/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

script yang ditempelkan adalah pujian shell POSIX, saya selalu menulis Dash yang kompatibel.

JM Becker
sumber
Tapi bukankah skrip Anda mengharuskan sudo diinstal? Apakah ada cara kami bisa mendapatkan akses pengguna super tanpa menggunakan sudo? Melalui skrip biasa?
darnir
@darnir: Tidak, skrip yang disisipkan tidak perlu sudodiinstal. Ini membutuhkan eksekusi superuser, dan dapat digunakan sudojika tersedia. Jika sudotidak tersedia, maka skrip harus dijalankan sebagai pengguna root, atau itu akan die.
JM Becker
@ Darnir: Selain itu tidak ada yang disebut, "skrip polos". Hampir semuanya, tidak termasuk built-in shell, dilakukan melalui binari reguler. Itulah inti dari shell, untuk memanggil perintah lain, apakah interaktif atau otomatis. Ini karakteristik yang menentukan ini, yang memisahkan shell dari bahasa pemrograman tujuan umum. Jadi terlepas dari bagaimana Anda memperoleh superuser, Anda melakukannya melalui perintah eksternal ..., dengan asumsi Anda tidak mengkodekan dengan antarmuka kernel mentah.
JM Becker
1
@varesa: Menariknya Ubuntu adalah kebalikan dari konfigurasi default sudo / su. Anda dapat memeriksa izin sudo apa yang tersedia bagi pengguna, dengan mengeksekusi sudo -l. Sayangnya itu tidak dapat digunakan dalam situasi ini, karena mungkin memerlukan entri kata sandi. Memikirkan hal ini lebih hati-hati, saya benar-benar berpikir keseluruhan konsep mungkin terbaik dicapai melalui tes per distro. Menggunakan su -ckecuali menjalankan sudistro dinonaktifkan default, dalam hal ini menggunakan sudo su -c. Seperti yang telah disebutkan orang lain, yang terbaik untuk meninggalkan elevasi pengguna super kepada pengguna, saya akan mempertimbangkan kenyamanan scrip-sekitar.
JM Becker
1
@varesa: Saya telah memperbarui skrip yang disisipkan, untuk mengurangi kemungkinan menggunakan yang tidak dikonfigurasi sudo. Ini harus dijalankan dengan benar di sebagian besar distro, dengan asumsi default su/ sudokonfigurasi. Saya tahu Ubuntu yang sudah ketinggalan zaman, pra lsb_release, perlu ditangani ... Tapi ini benar-benar hanya sebuah contoh, dan jelas dapat diperpanjang.
JM Becker