Ubuntu Linux'ta sudo vs su'yu anlamak için ihtiyacınız olan her şey. Yönetici haklarını alma

sudo için bir programdır Unix benzeri Kullanıcıların, varsayılan süper kullanıcı olan başka bir kullanıcının güvenlik ayrıcalıklarıyla programları çalıştırmasına olanak tanıyan işletim sistemleri.

İlgili komutun aksine su, kullanıcıların kimlik doğrulama için şifrelerini girmeleri gerekir. Kimlik doğrulamadan sonra, genellikle /etc/sudoers, kullanıcıya erişim izni vermenizi sağlar, sistem istenen komutu yürütür. Yapılandırma dosyası, terminalden çağrılan komutları yürütme yeteneği de dahil olmak üzere erişim izinlerini verir; sorgulamanızı sağlar şifre her kullanıcı veya grup için; her seferinde parolanın yeniden girilmesini gerektirmenizi veya parolanın hiçbir zaman girilmesini istememenizi sağlar. Ayrıca argümanların veya birden fazla komutun iletilmesine izin verecek şekilde de yapılandırılabilir.

konuşuyor basit anlamda belirli eylemleri gerçekleştirmek için Linux, bir şifre girmemiz veya süper kullanıcı olarak giriş yapmamız gerekecek (su).
Düşünün basit örnek sistem dosyalarını silmek\kopyalamak\değiştirmek için ubuntu, açman gerekiyor dosya yöneticisiNautilus süper kullanıcı adına.
Bunu yapmak için terminale girin ( ctrl+alt+T). Dikkatli olun, terminal büyük/küçük harfe duyarlıdır.

sudo nautilus

Daha sonra aşağıdaki metin görünecektir:

kullanıcı şifresi: /şifrenizi buraya girin, hiçbir karakterin görüntülenmeyeceğini unutmayın/

Böylece dosya yöneticisini açtınız Nautilus süper kullanıcı adına ve artık güvenli bir şekilde sistem dosyalarını almaya gidebilirsiniz (ya da gitmeyebilirsiniz) ^^

Sonraki örnek. Örneğin, içeriği almanız gerekiyor sistem dosyası bir metin düzenleyici kullanarak, ancak içinde değişiklik yapamazsınız. Bir terminal açın ve şunu girin:

sudo gedit

yani açtın Metin düzeltici süper kullanıcı haklarına sahip.

Başka bir örnek, eğer çok sayıda komutu çalıştıracaksanız ve her şifre girdiğinizde bundan hoşlanmazsanız. Terminalde sizi bu sıkıntılardan kurtaracak bir süper kullanıcı oturumu açabilirsiniz.
Terminale girin:

sudo su

Daha sonra şifremizi giriyoruz, süper kullanıcı oturumu açılıyor. İlginiz için teşekkür ederiz

Her ne kadar paradoksal görünse de, sudo komutu normal bir kullanıcı oturumu içinde bir yönetici oturumunun başlatılmasını hariç tutmaz. Çünkü aynı su komutunu çalıştırmak için kullanılabilir:

$ sudo su

Ve bu, kök hesabın bulunmadığı Ubuntu'da bile geçerlidir; daha doğrusu, varsayılan olarak şifre yoktur. Ancak sudo kullanmak, su komutu için bile onu gereksiz kılar. Ancak süper kullanıcı şifresini ayarlamak yasak değildir - sonuçta bunun için komutu vermek yeterlidir

$ sudo şifresi

su'yu her zamanki gibi kullanmak. Hatta istenirse sisteme kayıt olurken root olarak giriş yapın.

Ancak burada bile sudo komutu “ideolojik olarak doğru” bir yöntem sağlıyor, hatta bir yöntem bile değil. Bunlar, sudo komutunun eylemini, biraz farklı şekillerde de olsa, "ikincil oturum" çıkış komutuyla sona erene kadar süresiz olarak uzatan -s ve -i seçenekleridir.

-s seçeneği, ikincil bir kök oturumu açarken orijinal kullanıcının tüm ortam değişkenlerini korur. Ancak -H seçeneğini eklerseniz, bu değişkenler, etkileşimli bir kabuk örneğini başlatırken olduğu gibi, yöneticinin ana dizinindeki, yani /root'taki profil dosyalarından yeniden okunacaktır. Ancak, komutun girildiği sırada geçerli olan dizin değişmeyecek ve komut isteminin görünümü de değişmeyecektir.

-i seçeneği, kabuğunu oturum açma kabuğu olarak çalıştırarak kök ortamı tamamen yeniden üretir. Elbette bu aynı zamanda geçerli dizini /root olarak değiştirir ve komut satırı istemi, yönetim kabuğunun profil dosyasındaki (bash - PS1'de) ilgili değişkende açıklanan formu alır.

Uygulamada, özellikle bash'ta kalıcı yönetici hakları kazanmanın iki şekli arasında pek bir fark yoktur. Ancak zsh'de profil dosyalarının uygun ayarlarıyla istenirse bu durumların her birinde önemli ölçüde farklı ortamlar elde edebilirsiniz. Doğru, kullanıcının ne kadara ihtiyacı olduğu büyük bir sorudur. Ancak -H seçeneklerini kullanırken kalıcı yönetim modunda olmanın hiçbir şekilde dışarıdan görünmemesi hatalarla doludur. Bu, çoğu durumda -i seçeneğinin tercih edilmesini sağlar.

Bu arada, Sudo'nun yetenekleri komutları yönetici olarak çalıştırmakla sınırlı değildir: -u kullanıcı adı seçeneğini ayarlayarak, oturum açma değeri değer olarak ayarlanan kullanıcı adına da çalıştırılabilirler. Bu, başka bir kullanıcının nokta dosyalarını ve nokta dizinlerini görüntülerken veya kopyalarken yararlı olabilir; genellikle yalnızca sahipleri tarafından okunabilir ve düzenlenebilir.

Bu arada, sudo komutu, yetkisine ihtiyaç duyan kişinin değil, komutun adına yürütüleceği kullanıcının (örneğin yönetici) şifresini soracak şekilde çalıştırılabilir. Bunun için -targetpw seçeneği var. Kök parola gereksinimini kalıcı kılmak için örneğin şöyle bir takma ad tanımlamak yeterlidir:

Takma ad sudo -targetpw

Sudo'yu çalıştırırken root şifresi gerektirmesi bazı dağıtımlarda varsayılan davranıştır, örneğin Suse'un öyle olduğu söylenir.

Sudo komutunun çok daha fazla seçeneği var - yukarıda yalnızca kullanmam gerekenleri verdim. Gerisini man sudo'da görmek kolaydır. Listelenmeyenlerden, "yargı yetkisi" komutunu çalıştırma talimatını veren -b seçeneğinden de bahsedeceğim. arka plan. Kopyalama gibi uzun vadeli eylemler gerçekleştirirken yararlı olabilir. USB görüntüleri dd komutuyla flash sürücüye.

Az önce gördüğümüz gibi, sudo komutu kullanıcıya sistem çapındaki herhangi bir eylem için ve aynı zamanda diğer kişilerin kullanıcı verilerini değiştirmek için neredeyse sınırsız yetkiler verir. Bunu aklımızda tutarak kendimize şu soruları soralım:

  • herhangi bir kullanıcının sudo komutu aracılığıyla yönetici hakları kazanıp kazanamayacağı ve
  • Tüm idari işlemleri bunun üzerinden gerçekleştirebilir mi?

Bu mekanizmanın ilk önce "kutudan çıktığı gibi", sonra "kutudan çıktığı gibi" kullanıldığı Ubuntu ailesinden bahsedersek, ilk sorunun cevabı olumsuz, ikinci sorunun cevabı olumlu olacaktır. Genel olarak, /etc/sudoers dosyasında açıklanan sudo programının ayarlarına bağlıdır. Ve içinde yalnızca belirli kullanıcıların belirli komutları yürütmesine izin veren kurallar belirleyebilirsiniz. Özetle şöyle görünür:

kullanıcı adı host=komut

Burada tahmin edebileceğiniz gibi kullanıcı adı bu kuralın ayarlandığı kullanıcının adı, ana bilgisayar bu kurala başvurabileceği makinenin adı, komut ise bu kullanıcının kullanmasına izin verilen özel komuttur. bu makine. Komutun tam mutlak yolla verilmesi gerekir (ör. /sbin/fdisk, fdisk değil). Komut açıklama alanı, virgülle ayrılmış birden çok değer içerebilir, örneğin:

Kullanıcı adı ALL = /sbin/fdisk,/bin/mount

Ubuntu'nun yönetici ayrıcalıklarına kullanıcı erişimine ilişkin varsayılan kuralları şu şekilde açıklanmaktadır:

# Kullanıcı ayrıcalığı belirtimi root ALL=(ALL) ALL # Yönetici grubunun üyeleri root ayrıcalıklarına sahip olabilir %admin ALL=(ALL) ALL

Yani, kök kullanıcı olması gerektiği gibi herhangi bir ana bilgisayardan herhangi bir komutu yürütebilir. Ancak yalnızca yönetici grubuna ait kullanıcılar (bahsedilen tekerlek grubunun bir benzeri) haklarını alabilir. Kullanıcı şu sırada oluşturuldu: normal kurulum, otomatik olarak bu grubun bir üyesi olur - ve dolayısıyla herkes idari haklar başka ayar gerektirmeden kullanabilir. Ancak daha sonra hesapları oluşturulacak diğer kullanıcılar bu ayrıcalıktan mahrumdur. Tabii özellikle yönetici grubuna dahil edilmedikleri sürece.

Kutudan çıktığı gibi sudo kullanmayan diğer dağıtımlarda, yapılandırma dosyasını (yukarıda bahsedilen /etc/sudoers dosyasının aynısı) düzenlemeniz gerekecektir.

/etc/sudoers dosyası normal bir metin dosyasıdır ve buna göre herhangi bir metin düzenleyicide (veya örneğin ed veya sed kullanılarak) düzenlenebilir. Bununla birlikte, aynı zamanda, kişinin süper kullanıcı ayrıcalıklarına erişimi tamamen engellemeye kadar (olağan yazım hataları nedeniyle) bir şeyi mahvetme riski de vardır. Elbette bu durumlar düzeltilebilir - örneğin tek kullanıcı modunda yeniden başlatma yoluyla. Ancak onlara vurmamak en iyisidir. Ve bu nedenle, /etc/sudoers dosyasını değiştirmenin daha güvenilir bir yolu, bunun için özel olarak tasarlanmış bir yardımcı program kullanmaktır - visudo .

Visudo yardımcı programı süslü bir şey yapmaz - yalnızca süper kullanıcının EDITOR değişkeni tarafından tanımlanan bir metin düzenleyicide /etc/sudoers'ı açar (tanımlanmadıysa yine klasik vi olacaktır - adı da buradan gelir) ve onu her zamanki gibi düzenlemenize olanak tanır ve ardından sonuçları normal yöntemlerle kaydederek düzenleyiciden çıkın. Ancak bundan önce düzenleme sonucunun doğruluğu kontrol edilir. /etc/sudoers için kabul edilen sözdiziminin ihlali tespit edilirse uygun bir uyarı verilir. Bundan sonra düzenlemeye dönebilir, yapılan değişiklikleri reddedebilir veya kabul etmeye devam edebilirsiniz (tabii ki, kendi sorumluluğunuzdadır).

visudo yardımcı programı %100 düzenleme başarısını garanti etmez. Çünkü yalnızca sözdiziminin uygunluğunu kontrol eder, ancak “kuralların doğruluğunu” kontrol etmez. Yani, istenen yere giden yolu belirtirken bir hata yapılırsa bu kural komut - sudo aracılığıyla verilen bu komut çalışmayacaktır.

Ancak gerçekte genellikle çok daha basit görünür ve hiç de korkutucu değildir. Yani, Fedora 11'de örnek /etc/sudoers yapılandırmasında, yalnızca satırın yorumunu kaldırmak zorunda kaldım

%tekerlek TÜMÜ=(TÜMÜ) TÜMÜ

belirtilen gruptaki kullanıcıya yöneticinin sahip olduğu tüm hakları vermek (ve burada açıklandığı gibi kendimi oraya önceden dahil ettim). Aynı zamanda kendinize bir çekme ve sudo'yu şifre olmadan kullanma yeteneği sağlamak da mümkün olacaktır. Bu, satırın yorumunu kaldırmayı gerektirir

# %tekerlek TÜMÜ=(TÜMÜ) ŞİFRE YOK: TÜMÜ

Ancak kendimi yalnızca (başlangıçta eksik satır) girerek şifre eylemini daha uzun ömürlü hale getirmekle sınırladım.

Varsayılanlar timestamp_timeout=10

burada zaman aşımı değeri dakika cinsindendir. Bu arada, eğer onu sıfıra çevirirsen -

Varsayılanlar timestamp_timeout=0

daha sonra sudo komutu her çağrıldığında şifre istenecektir.

Alternatif olarak, sudo eylemi için negatif bir değer girerek zaman aşımını devre dışı bırakabilirsiniz:

Varsayılanlar timestamp_timeout=-1

Bu durumda şifre yalnızca bu komut ilk çağrıldığında istenecektir.

/etc/sudoers dosyasına daha yakından bakmak, belirli kullanıcılara veya gruplara yalnızca sınırlı haklar verme olanaklarını kolayca ortaya çıkaracaktır. Ancak gerçek yönetimin incelikleri burada başlıyor. Bu alandaki tüm tecavüzleri durdurmak için çift deneycimi herhangi bir idari eyleme erişimden mahrum bıraktım. Ancak bu bile her zaman onunla başa çıkmama izin vermiyor - tıpkı Timur Şaov'un lirik kahramanıyla baş edememesi gibi.

Hangisinin kullanımı doğrudur: su mu, sudo mu?

Antik çağlardan beri, maksimum ayrıcalıklarla operasyonlar gerçekleştirirken birçok güvenlik seçeneğinin çeşitliliği birçok kişinin kafasını karıştırmıştır. Örneğin, resmi Ubuntu belgeleri şunun gibi bir şeyin kullanılmasını önerir: sudo nano ve çok sayıda amatör kılavuzda ("5 püf noktası" tarzında) Komut satırı bu büyükannenizi şaşırtacak") kökü almak için "yeni kabuk, yazılması önerildi sudo su- . Bu durumun bana neden yanlış geldiğini açıklamaya çalışacağım.

VE Tarihsel olarak, Unix'te başka bir kullanıcı olarak bir komutu çalıştırmanın tek evrensel yolu su programıydı. Parametreler olmadan çalıştırın, süper kullanıcı şifresini istedi ve başarılı olursa, mevcut kullanıcı adını root ile değiştirerek neredeyse tüm ortam değişkenlerini eski kullanıcıya bıraktı (PATH, USER ve birkaç tane daha hariç, aşağıya bakın). adam su dağıtımınızdan). olarak çalıştırmak daha doğru olacaktır. su- - bu durumda kabuk da doğru ortamı aldı. Parametreli-C komutu çalıştırabilir: su -c "vim /etc/fstab" .

Aynı zamanda güvenilir kullanıcıların da şunu hatırlaması gerekiyordu: kök şifre"ve "tekerlek" grubunda listelenen tüm kullanıcılar (yani üyeleri su komutunu çalıştırıp süper kullanıcı haline gelebilen grup), tüm sisteme aynı sınırsız erişime sahipti ve bu ciddi bir güvenlik sorunuydu.

Daha sonra sudo komutu geldi ve bu büyük ilerlemeydi. Artık yönetici, her kullanıcı (veya kullanıcı grubu) için izin verilen komutların bir listesini, düzenlenebilecek dosyaları, özel ortam değişkenlerini ve çok daha fazlasını belirleyebilir (tüm bu ihtişam,/etc/sudoers , man sudoers'a bakın dağıtımınızdan). Sudo çalıştırıldığında kullanıcıdan root şifresini değil kendi şifresini ister. " kullanılarak tam bir kabuk elde edilebilir sudo -i"

Özel ekip hakkında özel olarak bahsetmeye değer sudoedit belirtilen düzenleyiciyi güvenli bir şekilde başlatan Çevre değişkeni $EDİTÖR . Daha geleneksel bir şemayla dosyaları düzenlemek şu şekilde yapılıyordu:

sudo vi /etc/fstab

Bu şekilde başlatıldığında vi sınırsız bir kabuk miras aldı ve:! kullanıcı herhangi bir komutu çalıştırabilir (tabii ki yönetici bununla önceden ilgilenmediği sürece) ve herhangi bir dosyayı açabilir.

sudoedit bu kullanıcının değişip değişemeyeceğini kontrol eder verilen dosya, ardından kopyalar belirtilen dosya geçici bir dizine kopyalar, onu bir düzenleyicide açar (bu, root "a" değil, kullanıcının haklarını devralır) ve düzenleme sonrasında, eğer dosya değiştirilmişse, özel önlemlerle geri kopyalar.

Debian tabanlı dağıtımlarda root kullanıcısının şifresi yoktur, bunun yerine tüm yönetim işlemlerinin sudo veya onun grafik karşılığı gksudo . Tam bir yedek olarak su, sudo Kullanıcılar arasında geçiş yapmak için tek komut bu olmalı, ancak başta da söylendiği gibi şu anda durum böyle değil ve nedense herkes çılgın sudo, su, vi ve tire dizileri icat ediyor.

Bu nedenle herkese bir kez daha şunu hatırlamalarını öneriyorum:

Sonrasında ilk yayın Bu yazı bana birkaç soru sordu. Cevaplardan mini bir SSS yapıldığı ortaya çıktı.

S: sudo ile nasıl yapılırsu -c "yankı 1 > /etc/ayrıcalıklı_dosya"? sudo echo 1 /etc/privileged_file"İzin reddedildi" diye yemin ediyor

C: Bunun nedeni, yalnızca echo komutunun yükseltilmiş haklarla yürütülmesi ve sonucun zaten haklara sahip bir dosyaya yönlendirilmesidir. düzenli kullanıcı. Ayrıcalıklı_dosyaya bir şey eklemek için aşağıdaki komutu çalıştırmanız gerekir:

$yankı 1| sudo tee -a ayrıcalıklı_dosya >/dev/null

Veya geçici olarak root olun:

$ sudo -i

# echo 1 > ayrıcalıklı_dosya

#çıkış

S: sudo -i su -'den daha uzun ve aralarında hiçbir fark yok gibi görünüyor, neden daha fazla yazdırasınız ki?

C: sudo'nun birkaç ekstra karakter yazma zahmetine değecek birçok avantajı var:

  • varsayılan olarak sudo, tüm kullanıcı etkinliğini authpriv syslog kanalına yazar (kural olarak, sonuç /var/log/auth.log dosyasına konur) ve benzer bir özelliğin, özel bir parametre ayarlanarak su'ya dahil edilmesi gerekir. dağıtımdan dağıtıma farklılık gösteren ayarlar dosyası (/etc/login.defs içinde SULOG_FILE ubuntu linux, FreeBSD'de /etc/login.conf ve /etc/pam.d/su, vb.)
  • su durumunda sistem yöneticisi kullanıcıların çalıştırabileceği komutları kısıtlayamaz, ancak sudo durumunda sistem yöneticisi kullanıcıların çalıştırabileceği komutları kısıtlayamaz.
  • Kullanıcının yönetici haklarından mahrum bırakılması gerekiyorsa, su durumunda tekerlek grubundan çıkarıldıktan sonra root şifresini unutması gerekir; sudo kullanılıyorsa uygun gruptan çıkarılması yeterlidir (örneğin, tekerlek veya admin) ve/veya daha fazla özelleştirilmişse sudoers dosyası.

S: Sistemimdeki tek kullanıcı benim ve suya alışkınım, neden sudo'ya ihtiyacım var?

C: Soruya bir soruyla cevap vereceğim: Eğer doğru bir sudo varsa neden kullanımdan kaldırılmış su kullanılıyor?

Antik çağlardan beri, maksimum ayrıcalıklarla operasyonlar gerçekleştirirken birçok güvenlik seçeneğinin çeşitliliği birçok kişinin kafasını karıştırmıştır. Örneğin, resmi Ubuntu belgeleri, düzenleme komutu olarak sudo nano gibi bir şeyin kullanılmasını önerir ve çok sayıda amatör kılavuz ("büyükannenizi şaşırtacak komut satırında 5 numara" tarzında) kökü almak için sudo su yazmayı önerir " yeni kabuk - Bu durumun bana neden yanlış göründüğünü açıklamaya çalışacağım.

Tarihsel olarak, Unix'te başka bir kullanıcı olarak bir komutu çalıştırmanın tek evrensel yolu su programıydı. Parametreler olmadan çalıştırın, süper kullanıcı şifresini istedi ve başarılı olursa, mevcut kullanıcı adını root ile değiştirerek neredeyse tüm ortam değişkenlerini eski kullanıcıya bıraktı (PATH, USER ve birkaç tane daha hariç, dağıtımınızdan man su'ya bakın) ). Bunu su - - olarak çalıştırmak daha doğruydu, bu durumda kabuk da doğru ortamı elde edecekti. -c seçeneğiyle şu komutu yürütmek mümkündü: su -c "vim /etc/fstab" .

Aynı zamanda, güvenilen kullanıcıların root şifresini hatırlaması gerekiyordu ve tekerlek grubunda (yani üyeleri su komutunu çalıştırıp süper kullanıcı haline gelebilen bir grupta) listelenen tüm kullanıcılar, tüm sisteme aynı sınırsız erişime sahipti. Bu ciddi bir güvenlik sorunuydu.

Daha sonra sudo komutu geldi ve bu büyük ilerlemeydi. Artık yönetici, her kullanıcı (veya kullanıcı grubu) için izin verilen komutların bir listesini, düzenlenebilecek dosyaları, özel ortam değişkenlerini ve çok daha fazlasını belirleyebilir (tüm bu ihtişam /etc/sudoers tarafından kontrol edilir, dağıtımınızdaki man sudoers'a bakın) . Sudo çalıştırıldığında kullanıcıdan root şifresini değil kendi şifresini ister. " Sudo -i " ile tam bir kabuk elde edilebilir

$EDITOR ortam değişkeninde belirtilen düzenleyiciyi güvenli bir şekilde başlatan sudoedit özel komutu özellikle dikkat çekicidir. Daha geleneksel bir şemayla dosyaları düzenlemek şu şekilde yapılıyordu:
sudo vi /etc/fstab

Bu şekilde başlatılan Vi, sınırsız haklara sahip bir kabuğu miras aldı ve:! kullanıcı herhangi bir komutu çalıştırabilir (tabii ki yönetici bununla önceden ilgilenmediği sürece) ve herhangi bir dosyayı açabilir.

Sudoedit, bu kullanıcının verilen dosyayı değiştirip değiştiremeyeceğini kontrol eder, ardından belirtilen dosyayı geçici bir dizine kopyalar, onu bir düzenleyicide açar (bu, kök "a" değil, kullanıcının haklarını devralır) ve düzenlemeden sonra, dosya değiştirilmişse, özel önlemlerle geri kopyalar.

Debian tabanlı dağıtımlarda kök kullanıcının bir parolası yoktur; bunun yerine tüm yönetim eylemlerinin sudo veya onun grafiksel karşılığı olan gksudo aracılığıyla yapılması gerekir. Su'nun tam yerini alan sudo, kullanıcılar arasında geçiş yapmak için tek komut olmalıdır, ancak başlangıçta da belirtildiği gibi şu anda durum böyle değil ve bir nedenden dolayı herkes sudo, su, vi ve tirelerden oluşan çılgın diziler icat ediyor .

Bu nedenle herkese bir kez daha şunu hatırlamalarını öneriyorum:

Bu notun ilk yayımlanmasından sonra bana birkaç soru soruldu. Cevaplardan mini bir SSS yapıldığı ortaya çıktı.

S: Sudo ile su -c "echo 1 > /etc/privileged_file" nasıl yapılır? sudo echo 1 /etc/privileged_file "izin reddedildi" diye yemin ediyor
C: Bunun nedeni, yalnızca echo komutunun yükseltilmiş haklarla yürütülmesi ve sonucun zaten normal kullanıcı haklarına sahip bir dosyaya yönlendirilmesidir. Ayrıcalıklı_dosyaya bir şey eklemek için aşağıdaki komutu çalıştırmanız gerekir:
$yankı 1| sudo tee -a ayrıcalıklı_dosya >/dev/null
Veya geçici olarak root olun:
$ sudo -i # echo 1 > ayrıcalıklı_dosya # çıkış $
S: sudo -i su - öğesinden daha uzun ve aralarında hiçbir fark yok gibi görünüyor, neden daha fazla yazdırasınız ki?
C: sudo'nun birkaç ekstra karakter yazma zahmetine değecek birçok avantajı var:

  • varsayılan olarak sudo, tüm kullanıcı etkinliğini authpriv syslog kanalına yazar (kural olarak, sonuç /var/log/auth.log dosyasına konur) ve benzer bir özelliğin, özel bir parametre ayarlanarak su'ya dahil edilmesi gerekir. dağıtımdan dağıtıma farklılık gösteren ayarlar dosyası (Ubuntu Linux'ta /etc/login.defs dosyasında SULOG_FILE, FreeBSD'de /etc/login.conf ve /etc/pam.d/su vb.)
  • su durumunda sistem yöneticisi kullanıcıların çalıştırabileceği komutları kısıtlayamaz, ancak sudo durumunda sistem yöneticisi kullanıcıların çalıştırabileceği komutları kısıtlayamaz.
  • Kullanıcının yönetici haklarından mahrum bırakılması gerekiyorsa, su durumunda tekerlek grubundan çıkarıldıktan sonra root şifresini unutması gerekir; sudo kullanılıyorsa uygun gruptan çıkarılması yeterlidir (örneğin, tekerlek veya admin) ve/veya daha fazla özelleştirilmişse sudoers dosyası.
S: Sistemimdeki tek kullanıcı benim ve suya alışkınım, neden sudo'ya ihtiyacım var?
C: Soruya bir soruyla cevap vereceğim: Eğer doğru bir sudo varsa neden kullanımdan kaldırılmış su kullanılıyor?

Sudo komutu, işletim sistemindeki erişim haklarını yönetmek için çok önemlidir. Linux sistemi. Bu küçük komut sayesinde, diğer kullanıcılara süper kullanıcı şifresini vermeden, yönetici adına belirli eylemleri gerçekleştirme izni verebilirsiniz. Ayrıca her zaman altında oturmanıza gerek yok hesap Süper kullanıcı bazen idari işlemleri gerçekleştirebilir.

Görünüşe göre minimum fırsatlara ve maksimuma sahip bu kadar küçük bir ekip basit kullanım ama aslında çok daha fazlasını yapabilir. Bu yazıda, sistem işlevlerine ve kullanıcı özelliklerine erişimi kontrol etmek için sudo'nun linux'ta nasıl yapılandırıldığına bakacağız.

Sudo yardımcı programına erişimi ayarlamaya geçmeden önce nasıl çalıştığına bakalım. Linux'ta yönetici haklarını almanın iki yolu vardır. Su komutuyla root kullanıcıya geçebilir veya istediğiniz komutu yönetici haklarıyla çalıştıracak olan sudo yardımcı programına parametre olarak iletebilirsiniz. Üstelik ikinci yöntem daha uygundur çünkü ne kullandığınızı unutmazsınız ve ekstra bir şey yapmazsınız.

Komut adı şu anlama gelir: yedek kullanıcının yapması veya süper kullanıcı bunu yapar. Yardımcı program, programları başka bir kullanıcı adına, ancak çoğunlukla kök adına çalıştırmanıza olanak tanır. Yardımcı program 1980 yılında Bob Cogshell ve Cliff Spencer tarafından geliştirildi. Bu süre zarfında birçok geliştirici değişti ve birçok özellik eklendi.

sudo, SUID erişim bayrağı sayesinde çalışır. Program için bu bayrak ayarlanmışsa, onu başlatan kullanıcı adına değil, sahibi adına, sudo dosyasının ait olması koşuluyla, yardımcı program root olarak yürütülür. Daha sonra ayarlarını okur, kullanıcının şifresini sorar ve yönetici olarak komut çalıştırmasına izin verilip verilmeyeceğine karar verir. Evetse, parametrede iletilen komut yürütülür.

Artık teoriyi bildiğinize göre, Linux'ta sudo'nun nasıl kurulacağına bakalım.

Linux'ta sudo kurulumu

Tüm sudo ayarları /etc/sudores dizininde bulunur. Burada, süper kullanıcı adına komutları kimin yürütmesine izin verileceğinden başlayarak mevcut komut kümesinin sınırlandırılmasına kadar birçok parametreyi yapılandırabilirsiniz.

Bir dosyayı düzenlemek üzere açmak için aşağıdaki komutu süper kullanıcı olarak yazın:

Yapılandırma dosyasını düzenlemek istediğiniz metin düzenleyiciyi de belirtebilirsiniz:

EDİTÖR=nano görsel

Daha sonra bu dosyada ayarlayabileceğiniz en ilginç ayarlara bakacağız. Ama önce dosyanın temel sözdizimine bakalım. İki tür satırdan oluşur; bunlar, sudo komutunun nasıl davranacağını belirleyen kuralların yanı sıra kullanıcı ve bayrak listeleri oluşturmanıza olanak tanıyan takma adlardır. Takma ad sözdizimi şuna benzer:

takma ad_adı yazın = eleman1, eleman2, eleman3

Tür, ne tür bir alice oluşturulacağını, ad kullanılacak adı belirtir ve öğe listesi, bu adla ilgili olarak ima edilecek öğeleri belirtir.

Kullanıcılara yönelik izinlerin açıklaması biraz farklı bir sözdizimine sahiptir:

ana bilgisayar kullanıcısı = (other_user:grup) takımlar

Kullanıcı, kuralı oluşturacağımız kullanıcıyı veya grubu belirtir, ana bilgisayar ise bu kuralın uygulanacağı bilgisayardır. Diğer kullanıcı - ilk kullanıcının komutları ve son izin verilen komutları hangi kullanıcının yürütebileceği kisvesi altında. Herhangi bir parametrenin yerine bir takma ad kullanılabilir. Şimdi Debian ve diğer dağıtımlarda sudo'yu kuruyoruz.

Ana ayarlar

Varsayılanlar takma adı, yardımcı programın çalışması için standart parametreleri ayarlamanıza olanak tanır ve bunları bu bölümde ele alacağız. Böyle bir takma ad, Varsayılanlar sözcüğüyle başlar ve ardından bayrağın adı gelir. Adın önünde ! sembolü varsa, bu bayrağın açılması gerektiği, aksi halde kapatılması gerektiği anlamına gelir:

İlk kullanımda tanıtımı devre dışı bırakın:

Varsayılanlar !ders

Süper kullanıcı sudo yapamaz:

Varsayılanlar !root_sudo

Şimdi sudo sudo'yu denerseniz hiçbir şey işe yaramaz:

Hedef kullanıcının ana dizinini değiştirin, varsayılan klasör olarak kalır şu anki kullanıcı ana dizin olarak:

Varsayılanlar set_home

Geçerli kullanıcının gruplarının listesini kaydedin:

Varsayılanlar !preserve_groups

Kullanıcı şifresi yerine süper kullanıcı şifresini sor:

Sudo'dan çıkmadan önce parola deneme sayısını ayarlayın, varsayılan 3'tür:

varsayılanlar passwd_tries=5

Sudo'nun tekrar parola istemesinden önce geçecek dakika sayısı, varsayılan değer 5'tir. 0 olarak ayarlanırsa, yardımcı programı ne kadar zaman önce kullanırsanız kullanın, parola her zaman sorulacaktır:

Varsayılanlar timestamp_timeout=10

Aşağıdaki parametre, yanlış girilmesi durumunda sudo'nun parolanın yeniden girilmesi için bekleyeceği dakika sayısını belirtir:

varsayılanlar passwd_timeout=10

Şifre istendiğinde görüntülenecek mesajı değiştirebilirsiniz:

Defaults passprompt = "Şifreniz:"

Bu kullanım için, tüm komutların yürütüleceği root değil, başka bir kullanıcıyı belirleyebilirsiniz:

varsayılanlar runas_default = "kullanıcı"

Sudo'ya bağlanmak için yapılan tüm girişimleri günlüğe kaydedebilirsiniz:

Varsayılan günlük dosyası=/var/log/sudo

Daha sonra günlüğün çalışmasını kontrol etmeye çalışıyoruz:

sudo kedi /var/log/sudo

Bunlar, ihtiyaç duyabileceğiniz en ilginç sudo yapılandırma seçeneklerinin tümü olmuştur; daha sonra kullanıcılar için sudo izinlerinin nasıl ayarlanacağına bakacağız.

Sudo kullanıcılarını ayarlama

Yukarıda kullanıcılar için eylemlerin ayarlanmasına ilişkin sözdizimini zaten tartıştık, burada her şey takma adlardan daha karmaşık, ancak bunu çözebilirsiniz. Örneğin, herhangi bir kullanıcının herhangi bir ana bilgisayardan sudo kullanmasına ve herhangi bir komutu çalıştırmasına izin verelim:

HEPSİ HEPSİ = (ALL) HEPSİ

Böyle bir komut çok güvensizdir, herkese ve her şeye izin verir. Birincisi tüm kullanıcılara izin vermek için ALL'dir, ikincisi tüm ana bilgisayarlar için ALL'dir, üçüncüsü herhangi bir kullanıcı olarak oturum açmaya izin vermek için ALL'dir ve dördüncüsü herhangi bir komutun yürütülmesine izin vermektir. Ancak çok daha sık olarak başka bir yapı kullanılır:

%tekerlek TÜMÜ = (TÜMÜ) TÜMÜ

Bu, bir öncekiyle aynı anlama geliyor, ancak burada tüm kullanıcıların sudo kullanmasına izin vermiyoruz, yalnızca tekerlek grubunun üyesi olanların kullanmasına izin veriyoruz.

%tekerlek TÜMÜ = (kök) TÜMÜ

Burada olası kullanıcı seçimini zaten yalnızca kök kullanıcıyla sınırladık. Ayrıca adına komutları yürütebileceği kullanıcı grubunu da belirleyebilirsiniz:

%tekerlek TÜMÜ = (kök:yöneticiler) TÜMÜ

Bu, komutu root olarak veya admins grubundan başka bir kullanıcı olarak çalıştırabileceğiniz anlamına gelir. Kullanıcının çalıştırabileceği komutları da belirtebiliriz. Örneğin:

%tekerlek ALL = (kök) /bin/mount, /bin/umount

Kullanıcı root olarak yalnızca mount ve umount komutlarını çalıştırabilir. Şimdi işi daha da ilginç hale getirelim, kullanıcı mount ve umount'u şifre olmadan ve diğer tüm komutları şifreyle çalıştırabilir:

%tekerlek TÜMÜ = (kök) TÜMÜ
%tekerlek ALL = (kök) NOPASSWD: /bin/mount, /bin/umount

Kullanıcıları ana bilgisayarlara göre de kısıtlayabilirsiniz; örneğin, sudo'nun yalnızca ana bilgisayar1'den kullanılmasına izin veriyoruz:

%tekerlek ana bilgisayarı1 = (kök) TÜMÜ

Takma adların nasıl kullanılacağını düşünmeye devam ediyor. Takma adlar aşağıdaki türlerde olabilir:

  • Kullanıcı_Alias- sudo'yu kullanacak kullanıcıların takma adı;
  • Runas_Alias- adına komutların yürütüleceği kullanıcıların takma adı;
  • ana bilgisayar_alias- ana bilgisayar takma adı;
  • Cmnd_Alias- komut takma adı;

Örneğin, dört takma ad oluşturalım ve bunları kuralımıza uygulayalım:

User_Alias ​​Kullanıcılar = kullanıcı1,kullanıcı2,kullanıcı3
Runas_Alias ​​​​Yöneticiler = kök, yönetici
Host_Alias ​​​​Hosts = host1,host2
Cmd_Alias ​​​​Cmds = /bin/mount, /bin/umount

Kullanıcı Ana Bilgisayarları = (Yönetici) Komutları

Bu, Kullanıcılar listesindeki kullanıcıların, Ana Bilgisayarlarda Amdins kullanıcıları olarak Cmds komutlarını yürütebilecekleri anlamına gelir.

Bayraklar hakkında birkaç söz söylemek kalıyor. NOPASSWD bayrağı, bu kuralı çalıştırırken şifre sormamanızı söyler. Örneğin, tüm kullanıcıların mount komutunu sudo ile parola olmadan yürütmesine izin vermek için:

ALL ALL = (kök) NOPASSWD: /bin/mount

Ayrıca NOEXEC bayrağını kullanarak bu özel komutu tamamen devre dışı bırakabilirsiniz:

ALL ALL = (kök) NOEXEC /bin/mount

Şu komutu kullanarak /etc/sudores dosyasının doğru yapılandırılıp yapılandırılmadığını kontrol edebilir ve oluşturulan tüm kuralları görebilirsiniz:

Bu kullanıcının izinlerinin yanı sıra tüm bayraklar ve ayarlar burada görüntülenir.

sonuçlar

Bu yazımızda sudo'nun linux'ta nasıl yapılandırıldığına baktık. Gördüğünüz gibi, bu çok basit bir yardımcı program olmasına rağmen, sisteminizde kullanabileceğiniz birçok yararlı ayarı gizler. Sorularınız varsa yorumlarda sorun!