Sudo ne kadar evrensel?


26

Bir şeyi nasıl kuracağınıza ilişkin bazı talimatlar yazıyordum (TeX ile ilgili - eğer sormazsanız, daha fazla ayrıntı vererek gününüze zarar vermeyeceğim) ve sudosistem genelinde kurmak için kullandım . Birisi, bunun sudotüm Linux (veya Unix) dağıtımlarında mevcut olmadığını düşünmediklerini söyledi .

Sahip olmayan Unix dağıtımları var mı sudo, eğer öyleyse bunlar ne? Evrensel kabul "Beni ayrıcalıkları süper Al" komutu var mı olduğu tüm sistemlerde?

Yanıtlar:


34

sudo evrensel olarak kabul edilemez:

  • Red Hat Enterprise Linux : sudoRed Hat Enterprise Linux ve türevleri, varsayılan olarak yüklenir 1 ancak yalnızca RHEL 7 ve daha yeni hazır kullanımlı yükler.

    Red Hat Enterprise Linux 7 kurulum ekranına , root kullanıcısı olmayan ilk kullanıcıyı yarattığınız "Bu kullanıcıyı yönetici yap" etiketli bir onay kutusu ekledi . Amacı, kurulum kılavuzunun o sayfasında belgelenmemiş, ancak etkilerinden biri, kullanıcının herhangi bir komutu çalıştırmasını sağlamak sudo. Bunu, o kullanıcıyı wheelstok sudopaketi yapılandırması altında herhangi bir komutu çalıştırabilen gruba ekleyerek yapar .

    Red Hat Enterprise Linux 3'ten 6'ya ayrıca sudovarsayılan olarak, 2 olarak da yüklendi , ancak RHEL 7'ye kadar, yalnızca rootkomutları çalıştırabilecek şekilde yapılandırıldı . Bunu düzeltmenin en kolay yolu wheelgruba bir veya daha fazla kullanıcı eklemek , ardından visudoroot olarak çalıştırmak ve %wheel ALL=(ALL)...satırın satırını açmaktır .

  • Debian : Debian 9'dan itibaren minimum kurulum içermektedir sudo.

    Debian 7 ve 8'de, kurulum sırasında ayarlamak için " Standart sistem yardımcı programları " paketini seçmeniz gerekiyordu sudo. Bu sudoşekilde yüklerseniz , işletim sistemi yükleyicisi, yükleme işleminde daha önce oluşturduğunuz yönetici olmayan kullanıcıyı otomatik olarak sudotüm komutları çalıştırma iznine sahip olan gruba ekler .

    Debian 6 ve daha önceki sürümlerde, kurulumdan sonra sudoaracılığıyla apt-getkurulum yapmanız ve root olmayan kullanıcılara kullanması için el ile yapılandırmanız gerekiyordu.

  • FreeBSD : FreeBSD'desudo varsayılan olarak kurulmaz. Portlardan inşa etmelisin.

  • NetBSD : FreeBSD ile aynı.

  • OpenBSD : sudoOpenBSD'de varsayılan olarak yüklü olması için kullanılan, ancak ettik anahtarlamalı için doastarihi itibariyle Ekim 2015'ten yayınlandı, 5.8 . doasgemiler varsayılan olarak devre dışıdır.

    Almak için sudogüncel sürümleri, paket deposundan yüklemek gerekir. OpenBSD'nin sudopaketi RHEL 3 ila 6'daki gibi yapılandırılmıştır, böylece sadece rootkomutları çalıştırabilir, bu da amacını yerine getirir sudo. rootKurulum sırasında kullanıcı olmayan bir kullanıcı eklediyseniz, wheelgruba eklendi , bu yüzden sudobir OpenBSD sisteminde fayda sağlamanın en basit yolu , %wheel ALL=(ALL)...hattın üzerinden gelenleri açmak visudo.

  • Solaris : sudoSolaris 11'de varsayılan olarak kurulur, ancak Solaris 10 ve daha eskileri aynı ama aynı değildir pfexec.

    sudoEski sistemler için alabilirsiniz , ancak varsayılan değer önemlidir. Solaris 10 ve daha üstü, yıllarca bizimle birlikte olacak, bu nedenle çevrenizde Solaris varsa ve kişisel olarak bu sistemleri kontrol edemiyorsanız ve sudoorada olduğundan emin olabilirseniz, buna güvenemezsiniz.

Sistem ne kadar eski olursa, sahip olma şansı da o kadar yüksek olur sudo. sudoÇok eski olmasına rağmen , 2000'lerin ortalarına kadar popüler olmaya başlamamıştı. Bundan daha eski sistemlere sahip olma ihtimalleri çok düşük sudo. Unix kutuları uzun süre yaşamaya meyillidir, bu nedenle bugün böyle bir sistemde hala karşılaşmanız akla mümkün değildir.

Yalnızca sudokişisel olarak yönettiğim sistemlere veya Ubuntu, macOS veya openSuSE gibi sistemlerde varsayılan olarak kök ayrıcalıklarına sahip olmanın tek yoludur.

sudaha yakın bir evrensel "Beni ayrıcalıkları süper olsun" komutuna olduğunu sudo, ancak o zaman özel olarak kullanmaya zorlamak için kök hesabı varsayılan olarak kilitlenir Ubuntu ve MacOS gibi sistemlere sahiptir sudoyerine su. Yani suevrensel de diyemezsin.


Dipnotlar :

  1. CentOS, Oracle Linux, Bilimsel Linux ...

  2. Evet, minimum kurulumda bile.


9

sudoNeredeyse tüm Linux sistemlerinde kullanılabilen bir yardımcı programdır.
Ancak, tüm dağıtımlarda varsayılan olarak paketlenmemiştir. Tüm büyük dağıtımlar varsayılan olarak paketlenmiş durumda.

Kullanıcının tamamen özelleştirilebilirliğini sağlayan Arch Linux, Gentoo, LFS vb. Gibi Linux Dağıtımları varsayılan olarak sudo'ya sahip değildir.

Arch Linux'ta temel sistem sudokurulu değildir . Kullanıcının sudosudoers dosyasını manuel olarak indirmesi ve düzenlemesi gerekir .
Gentoo ve LFS için Aynen. Ben sudo olmadan başka bir büyük dağıtım bilmiyorum.

Ve hayır, sudosüper kullanıcı imtiyazlarını vermekten daha evrensel bir şey olduğunu sanmıyorum . Yani, aslında root olarak giriş yapmak dışında.


1
sudoçoğu dağıtımda paketlenmiş olabilir, ancak hepsi her kullanıcıyı çalıştırabilecek şekilde yapılandırmaz.
jsbillings

Başka bir iyi nokta. Sudoers dosyasının ne söylediğine bağlı.
lanet

7

En yaygın kullanılan dağıtım olan Ubuntu, sudokök olmak için önerilen yöntem olarak kullanır (komut satırını kullanırken - GUI'ye bağlı olan kullanıcılar, başlık altında ne olduğunu anlamadan veya önemsemeden bir şifre istemi alırlar). Diğer dağıtımlar, sudo kurulumunu teşvik edebilir veya desteklemeyebilir veya gönderemez veya göndermeyebilir. Öte yandan, suher yerde kullanılabilir sudove kullanıcının kök parolasına sahip olmayacağı için yalnızca kullanılabilir olanlar dışında çoğu sistemde kullanılabilir.

Arasında suve sudo, neredeyse tüm kullanıcılarını kapsayacak. Zaten ne yapacağını bilen califeya opda pfexecbilen egzotik birkaç kişi . Kullanmasalar bile, ne kullandıklarını, ne sude sudobilmedikleri yerlerde dosyalara sahip olmaları muhtemeldir ve talimatlarınızın muhtemelen zaten işe yaramayacağını düşünmediğiniz yeterince şey vardır.


6

Sorunuzu en doğru şekilde cevaplamak için sudohiçbiri evrensel olarak kabul edilmez. Doğrusu, bütün 'evrensel' kavramı, genellikle kırmızı bir ringa balığıdır. Bu özellikle çapraz dağıtım uyumluluğu açısından doğrudur. Çok sayıda farklı yazılım versiyonuna attığınızda, evrensellik yarı gerçekçi olmaz. Doğası gereği komut dosyası yazmak pragmatiktir, sersemletici olsaydı, taşınabilir komut dosyaları yazmak neredeyse imkansız olurdu.

Normalde amaçlanan uygulama ortamımı ölçtüm, Yarı modern bir Linux dağıtımı, ortak GNU Utils ile bir POSIX kabuğu bekliyorum. Linux dışında çalışan komut dosyaları için yalnızca tam POSIX standardını beklerim. Açıkçası, pek çok komut dosyası Linux'a özgü ya da dağıtıma özgüdür, bu nedenle taşınabilirlik kapsamını daraltır.

Özel komut dosyası durumunuzu ele almak için,

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

Yapıştırılan komut dosyası POSIX kabuk iltifat, ben her zaman Dash uyumlu yazar.


Ama betiğinizin sudo yüklü olmasını gerektirmiyor mu? Sudo kullanmadan süper kullanıcı erişimi elde etmenin bir yolu var mı? Düz yazı ile?
lanet

@ darnir: Hayır, yapıştırılan komut dosyasının sudoyüklenmesi gerekmez . Süper kullanıcı çalıştırması gerektirir ve sudovarsa kullanılabilir. Eğer sudomevcut değildir, o zaman komut dosyası kök kullanıcı olarak çalıştırılmalıdır, ya da olacak die.
JM Becker

@ darnir: Buna ek olarak, "düz komut dosyası" adında hiçbir şey yok. Kabuk yapıları hariç hemen hemen her şey normal ikili dosyalar üzerinden yapılır. Etkileşimli veya otomatik olsun, diğer komutları çağırmak için kabuğun tüm noktası budur. Kabuğu genel amaçlı programlama dillerinden ayıran bu tanımlayıcı özelliktir. Öyleyse, süper kullanıcı nasıl edindiğinize bakılmaksızın, ham çekirdek arayüzleri ile kodlamadığınız varsayılarak, dış komutlar aracılığıyla yaptığınız ...
JM Becker

1
@varesa: İlginç bir şekilde Ubuntu, sudo / su varsayılan yapılandırmalarının tam tersidir. Bir kullanıcının hangi sudo izinlerini kullanabileceğini kontrol ederek kontrol edebilirsiniz sudo -l. Ne yazık ki bu durumda kullanılamaz, çünkü şifre girişi gerektirebilir. Bunu daha dikkatli bir şekilde düşününce, aslında tüm konseptin bir dağıtma testi ile elde edilebileceğini düşünüyorum. Varsayılan bir devre dışı dağıtım su -cçalıştırmadıkça kullanma su, bu durumda kullanma sudo su -c. Diğerlerinin de belirttiği gibi, süper kullanıcı yüksekliğini kullanıcıya bırakmak en iyisidir, herhangi bir komut dosyası çevresinde bir kolaylık düşünürdüm.
JM Becker

1
@ varesa: Yapılandırılmamış kullanma olasılığını azaltmak için yapıştırılan komut dosyasını güncelledim sudo. Bu, varsayılan olarak su/ sudoyapılandırmaları varsayarak çoğu dağıtımda düzgün şekilde yürütülmelidir . Önceden tarihli bir Ubuntu'nun lsb_releaseele alınması gerektiğini biliyorum ... Ancak bu gerçekten sadece bir örnek ve açıkça genişletilebilir.
JM Becker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.