Sudo şifre olmadan çalıştırılsın mı?


292

Bu sorudan ilham alan ....

Sistemimi 12.04 ile kullanan tek kişi benim.
Ne zaman bir sudoemir versem; sistem kullanıcı şifresini sorar (kendi başına iyidir).
Ancak düşünüyordum; root hesabını aktifleştirmeden ; Kimlik doğrulaması için kullanıcı şifresi istemeyecek sudo komutlarını nasıl uygulayabilirim.

NOT: sudo komutunu şifre ile doğrulamadan çalıştırmak istiyorum; sadece terminal üzerinden çalıştırıldıklarında.
Bu ekstra güvenlik katmanını, 'Ubuntu yazılım merkezi' kullanırken ya da bir bash betiğini terminale sürükle-bırak ile çalıştıran diğer işlevlerden kaldırmak istemiyorum.


2
bu yüzden sadece terminaldeki parola ve olmayan diğer şeyler için mi yoksa başka bir şekilde mi sorulmak isteniyor ?! Her iki yönde de, yüksek bir güvenlik ihlali olduğunu düşünüyorum
Dr_Bunsen

Sistemin sadece terminalde iken şifre talep etmemesini istiyorum ... başka bir amaçla sistemin şifre istemesi gerekir. Bu gereksinim yalnızca geçicidir ve yeni sunucular kurulurken kullanılırken kullanılmalıdır .. yeni sunucu kurulumları sırasında, sudo komutları ile yapılandırma saatlerini alır. Her 15 dakikada bir parola verme. baş ağrısıdır. Kök hesap kullanmak istemiyorum.
Bhavesh Diwan

Tartışmayı okumanız gerekiyor: askubuntu.com/questions/135428/…
david6

1
Elbette zaman aşımını uzatabilirsiniz. Ayrıca, sık sık yeni sunucu ayarları yapıyorsanız işlemi otomatikleştirmeyi düşünmelisiniz. Yazmak için para almıyorsunuz, problemleri çözmek ve sh * t yapmak için para alıyorsunuz.
MauganRa

Yanıtlar:


82

sudo -i Sisteminizde (veya diğer sistemlerde) değişiklik yaparken her 10 dakikada bir şifre yazmak istemiyorsanız ve herhangi bir sistem dosyasını değiştirmek istemiyorsanız, bunun yoludur.

sudoKonsolu kapattığınızda ya da exitnormal kullanıcınıza döndüğünüzde , kullanıcı şifrenizi kullanarak sizi root'a çevirecektir.


2
Bu, yalnızca bir kez parola girdiğimden ... ve çıkmadığım zamana kadar geçerli olur mu; hava 5 saat. veya 15 .... herhangi bir sudo komutu verildiğinde sistem parola ile doğrulama istemeyecektir.
Bhavesh Diwan

2
@ Z9iT siz yazana exitveya terminal emülatörü penceresini kapatana kadar .
Bruno Pereira,

2
Teşekkürler .. Bu cevabı kabul etti, çünkü çıkmayacağımız zamana kadar n-saatlerce şifre doğrulama olmadan sudo komutları verme amacına hizmet ediyor. Sistem dosyalarını değiştirmemek bir artı.
Bhavesh Diwan

3
Bu soruya gerçekten cevap vermiyor çünkü o noktada root olmak için şifreyi girmeniz gerekiyor.
Adam F,

2
Sanal bir makineyi güvenli bir ortamda kullanıyorsanız ve bir şeyin hemen bir şey yapmasını istiyorsanız ve şifrelerle uğraşmak istemiyorsanız. Bu cevap soruyu cevaplamaz, tartışmalı olarak faydalı bir bilgidir. Adam F ile aynı fikirdeyim
Jonathan Komar

573

sudoŞifrenizi asla istemeyecek şekilde yapılandırabilirsiniz .

Bir Terminal penceresi açın ve şunu yazın:

sudo visudo

Dosyanın altına aşağıdaki satırı ekleyin:

$USER ALL=(ALL) NOPASSWD: ALL

$USERSisteminizde kullanıcı adınız nerede . Sudoers dosyasını kaydedip kapatın (varsayılan terminal düzenleyicinizi değiştirmediyseniz (varsa bileceksiniz), çıkmak için ctl + x tuşlarına basın nanove sizden kaydetmenizi ister).

Ubuntu 19.04'ten itibaren, dosya şimdi şöyle görünmelidir

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Bundan sonra sudo <whatever you want>, şifre sorulmadan Terminal penceresine yazabilirsiniz .

Bu sadece sudoterminaldeki komutu kullanmak için geçerlidir . Yazılım merkezinden bir paket kurmayı denerseniz (örneğin) şifrenizi girmeniz istenir

GUI şifre istemi


15
sudo visudoDoğrudan düzenlemek yerine kullanılması önerilir . Ayrıca sudo'ların izinlerini değiştirmek kendinizi kilitleyebilir. İle düzenleme yaparken vim, :wq!salt okunur dosyaları yazmak ve editörden çıkmak için kullanın. Bu şekilde, 644 izinleri gerekli değildir.
Lekensteyn

8
Bu ciddi bir güvenlik riskidir, sudo haklarına sahip herhangi bir hesabı devralan herkes tüm sistemin kontrolünü ele geçirebilir ve bu bilgisayara daha fazla erişimi kilitleyebilir, kesinlikle önerilmez.
Bruno Pereira

6
@ wil93 noktasını kaçırıyorsunuz: çağrı yapan bir komut dosyası, sudo install crapwarebu durumda bir şifre sormayacak ve sahip olduğunuz her şeyi mahvedebilir ve en son kontrol ettiğimde komut dosyalarını dağıtmak için fiziksel olarak bir makinenin yanında olmanız gerekmez. .. Bu sadece bir örnek.
Bruno Pereira

12
@BrunoPereira Eğer güvenilmeyen komut dosyalarını çalıştıran planlıyorsanız sonra bu (sudo bir şifre sorar bile, kötü niyetli bir komut dosyası her zaman yapabileceği güvenlik riski oluşturuyor rm -rf ~oldukça bazı şeyleri karıştırıyor). Genel olarak, "ciddi güvenlik riski" olarak adlandırılan parola isteminin sudo'dan basitçe kaldırılmasını istemem.
wil93 0

5
@ Wil93 ile aynı fikirde. Güvenilmeyen bir komut dosyası çalıştırırken, şifre girme işlemi iptal etme şansından başka bir şey değildir; çoğu kişi için yararsız olduğundan şüpheliyim. Mesele şu ki, senaryonun nereden ve ne yaptığını biliyorsun.
Çad

36

Kök sudo zaman aşımları bunu yapmanın en kolay ve en güvenli yoludur. Tüm örnekleri ortaya koyacağım, ancak bu şekilde çok daha güvenli olmasına rağmen, bunu yapmak için çok riskli olduğu konusunda uyarılacağım:

sudo visudo

Bu bir editör açar ve sudoers dosyasına işaret eder - Ubuntu varsayılan olarak nano'dur, diğer sistemler Vi kullanır. Artık sisteminizdeki en önemli dosyalardan birini düzenleyen bir süper kullanıcısınız. Stres yok!

(Vi ile belirtilen özel talimatlar (vi!) . Nano kullanıyorsanız bunları dikkate almayınız.)

DefaultsSatırın sonuna gitmek için ok tuşlarını kullanın .

(vi!) Geçerli satırın sonunda hareket etmek için A (büyük harf "a") tuşuna basın ve düzenleme moduna girin (satırdaki son karakterden sonra ekleyin).

Şimdi yazın:

,timestamp_timeout=X

X, dakika cinsinden zaman aşımı süresidir. 0 belirtirseniz, her zaman parola sorulur. Negatif bir değer belirtirseniz, zaman aşımı süresi asla dolmaz. Örn Defaults env_reset,timestamp_timeout=5.

(vi!) Komut moduna dönmek için Escape tuşuna basın. Şimdi, düzenlemekten memnunsanız :w Enter, dosyayı yazmak ve :q Entervi'den çıkmak için yazın . Bir hata yaptıysanız, belki de en kolay yol başlangıçtan itibaren yeniden yapmak, kaydetmeden çıkmak ( Escapekomut moduna girmek için vurmaktır ) ve sonra: q! Enter.

Hit Ctrl+ Xardından Y, daha sonra Enterdosyanızı ve çıkış nano kaydedin.

Ek bilgi için sudo'ları ve vi kılavuz sayfalarını okumak isteyebilirsiniz.

man sudoers
man vi

Zaman aşımı değerini aşağıdakileri kullanarak sıfırlayın:

sudo -k

Bu talimatlar, sudo komutunu kullanırken bir parola istemini kaldırmak içindir. Sudo komutunun yine de root erişimi için kullanılması gerekecek.

Sudoers dosyasını düzenle

Bir Terminal penceresi açın. Yazın sudo visudo. Dosyanın END'sine şu satırı ekleyin (sonunda değilse daha sonra girişler tarafından geçersiz kılınabilir):

<username> ALL=NOPASSWD: ALL

<username>Kullanıcı adınızla değiştirin (olmadan <>). Bu, Ubuntu’nun, kullanıcı adınızla aynı adı taşıyan ve tipik bir grup oluşturduğunu varsayar. Grup kullanıcılarını veya içinde bulunduğunuz diğer herhangi bir grubu dönüşümlü olarak kullanabilirsiniz. Yalnızca o grupta olduğunuzdan emin olun. Bu, Sistem -> Yönetim -> Kullanıcılar ve Gruplar bölümüne giderek kontrol edilebilir.

Örnek:

michael ALL=NOPASSWD: ALL

Çıkmak için ^ X ( Ctrl+ X) yazın. Bu dosyayı kaydetmek için bir seçenek isteyecektir, kaydetmek için Y yazın.

Oturumu kapatın ve daha sonra tekrar oturum açın. Bu işlem, şimdi parola sormadan sudo komutunu çalıştırmanıza izin verir.

Kök hesap

Kök hesabını etkinleştirme

Kök hesabını etkinleştirmek nadiren gereklidir. Bir Ubuntu sisteminin yöneticisi olarak yapmanız gereken hemen hemen her şey sudo veya gksudo aracılığıyla yapılabilir. Sürekli bir kök girişine gerçekten ihtiyacınız varsa, en iyi alternatif aşağıdaki komutu kullanarak bir Kök giriş kabuğunu simüle etmektir:

sudo -i

Ancak, kök girişleri etkinleştirmeniz gerekiyorsa , bunu şöyle yapabilirsiniz:

sudo passwd root

Kök hesabınızı tekrar devre dışı bırakma

Herhangi bir sebepten dolayı kök hesabınızı etkinleştirdiyseniz ve tekrar devre dışı bırakmak istiyorsanız, terminalde aşağıdaki komutu kullanın:

sudo passwd -dl root

Sistem çapında grup sudo

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Oturumu kapatıp tekrar açın.

Sudo zaman aşımını sıfırla

Çalıştırarak sudo'nun bir dahaki sefere şifre sormasını sağlayabilirsiniz:

sudo -k

Bunu eklemeden önce, bunu yapmanın ve başkalarının burada okuduğu bir sistem için
yolladım

Bu gecikmiş bir cevaptı, ancak size sunduğu seçenekler açısından en kapsamlı olanıydı.
12'de

1
Hmm, Ubuntu 18.04 MATE’te bu mükemmel çalışıyor, Ubuntu 18.04’de de aynı şeyi yaparken GNOME “kullanıcı adı sudo dosyalarında değil…” problemiyle kırışıklığa neden oldu. Şimdi, bu yüzden bu kadar çok bataklık sadece linux'dan nefret ediyor - çünkü nadiren "nedensel": D Sadece U aynı şekilde çalışıyorsa ... Sorunu bu şekilde çözüyorsunuz
Peter

EDITOR ortam değişkeni, kullanılan editörü ayarlayabilir ... örneğin nano'da sudo env EDITOR=/bin/nano visudogüvenilir bir şekilde düzenleme sudoersyapmak için. (editörün ayarlanması için güncelleme alternatifleri de kullanılabilir)
Gert van den Berg

29

Bireysel (veya grup) izinleri vermenin tercih edilen yolu, altına dosya eklemektir. /etc/sudoers.d

Bu, yerel değişiklikleri varsayılan politikadan ayırır ve dağıtım sudoer dosyasının değişmesi durumunda zaman kazandırır.

Şu anda oturum açmış kullanıcının aa sudoer olmasını sağlamak ve sudobir şifre sormasını istememek için,

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

bu, /etc/sudoers.d/$USER( $USERbu komutu çalıştırdığınızda oturum açtığınız kullanıcının kullanıcı adı nerede) adında bir dosya oluşturacak ve hangi kullanıcılara izin verildiğini açıkça belirtecektir.

Bunu farklı bir kullanıcı için yapmak istiyorsanız $USER, yukarıdaki komutu kullanarak her iki örneğini de başka bir kullanıcı adıyla değiştirin .

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Benzer şekilde, birden fazla yönergeyi yönetmek için bir dosya kullanılabilir:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Daha fazla bilgi için bkz. /etc/sudoers.d/READMEVe man sudoers.


yankı komutu, kök olmama rağmen başarısız oldu. ancak dosyayı ekledim ve doğrudan yaptım ve bu en son ubuntu üzerinde çalıştı (oysa kullanıcı doğrudan sudoer'lara eklenmedi!)
scape

1
Doğru yol bunu teekomutla yapmaktır .
woto

1
Bu işe yarayan daha iyi bir yoldur:, sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'takip edensudo chmod 440 /etc/sudoers.d/$(logname)
paradroid 14:18

Gelen sudo ... >filebu kök kabuğu sadece işe yarayabilir böylece kabuk yönlendirme, orijinal kabuk yürütülür.
Konstantin Pelepelin

tee yöntemi, izinsiz olarak:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip,

7

Geçerli kullanıcının sudo istemlerini kaldırmak için hoş bir liner

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
Ben sadece yapabileceğini düşünüyorum:, echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudosadece sonuçta visudoihtiyacı sudo(ve hatta env, varsayılan yapılandırma, IIRC gerekli olmayacak).
muru

Burada yanlış gidebilecek çok fazla şey var (elbette tüm kullanıcı hatası), son derece açık görüşüme göre, sudoer dosyasını doğrudan ( sudo visudo) düzenlemeyi , sonucu test ederken (editör hala açıkken) düzenlemeyi tercih etti. Bu "bir astar" ı denemek için cazip olabilecek yeni kullanıcılar için.
michael

Geri dönüşünüz için teşekkür ederiz! Uçucu test VM'lerimde sudo şifresi komutunun kaldırılmasını hemen komut dosyası ifşa etmeye çalışıyordum. Gelişmeler önermek için çekinmeyin :)
Eric Landry

Bu sudo chmod 440 /etc/sudoers.d/$(logname)dizinde README'de belirtilen dosya izinlerini düzeltmeniz gerekir .
paradroid

6

Tabii ki ne yapmak istediğin tavsiye edilmez. Bir süre sonra, giriş sudoo kadar otomatik hale gelir ki kullanışlılığı azalır.

Başka bir yaklaşım da, sudoers dosyanızı olduğu gibi bırakmak ve, on beş yüz sunucunuz için karmaşık bir şey yaparken, girmek sudo bash. Bu, siz çıkana kadar kök olarak doğrulanacak bir kabuk verecektir.


12
sudo -sveya sudo -imuhtemelen ikisinden de daha iyi fikirlerdir sudo bash, çünkü çevrenin aklı başında olmasını sağlarlar.
Darael,

2
"aklı başında ve her şey" genellikle "daha iyi fikirler" alanında değildir, birileri sudo-s veya sudo -i'nin neden sudo bash'tan daha iyi olduğuna dair teknik bir açıklama yapabilir mi? (Düzenleme: İşte askubuntu.com/questions/376199/… ile ilgili bir soru . )
Nuzzolilo

2
Komutun düzgün çalışması için bir takım sudokomutlar (özellikle düşünerek sudo pip ...) gereklidir sudo -H(set HOME). Diğer durumlarda, sudo -E(env koru) gerekli olabilir. Koşmak sudo bashmuhtemelen çoğu durumda işe yarar, fakat sonuçta olmaz ve çalışmadığında neden olarak belli olmaz.
michael

1
sudo su, rolleri değiştirmenin ve bir sys yöneticisi olmaya başlamanın geleneksel yoludur.
user1656671

3

Gönderen Super User iyi bir cevap gelir:

STDIN'den şifreyi okuyan -S anahtarını kullanın:

echo <password> | sudo -S <command>

<password>Şifrenizle değiştirin .


2
Bu önerilmemiştir, çünkü parola kabuk geçmişi dosyasında açık şekilde kalır. Bunun yerine diğer çözümlerden birini uygulayın.
HappyCactus

1
@HappyCactus, echotarihte görünmemesi için önüne bir kez boşluk koyabilir misiniz ?
WinEunuuchs2Unix

Evet, bu açık metin şifresini geçmiş dosyaya maruz bırakmaktan kaçınacaktır. Ama her zaman eklemeyi hatırlıyor musun? :-)
HappyCactus

@HappyCactus Kazara öncü bir boşluk eklemeye meyilliyim ve daha sonra tarih hatırlanamadığı zaman sinirleniyorum :) Yine de Süper Kullanıcının 129 oy hakkı var, bu yüzden buradan ayrılmanın iyi bir cevap olduğunu düşünüyorum. İnsanlar yorumları okuyacak ve riskleri ve riskten kaçınma adımlarını bilecekler.
WinEunuuchs2Unix

Tamamen katılıyorum. İyi günler dilerim!
HappyCactus

2

Bir astar

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'


2

Bu, dosya izinlerini de belirtildiği gibi değiştiren tek satırlı bir çözümdür /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)

0
  • @Upteryx fikrine odaklanmak.

  • Kök olmayan ve şifresiz bir kullanıcıyı bir CICD boru hattında kullanmak için geçici bir Docker Image'da bu şekilde uyguladım:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
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.