Parola olmadan sudo komutu nasıl çalıştırılır?


235

Nasıl yok ubuntuUbuntu Sunucu 12.04 için AWS görüntülerde kullanıcı parolasız var sudoonun için hiçbir yapılandırma içinde olduğunda bütün komutlar için /etc/sudoers?

Amazon'da Ubuntu sunucusu 12.04 kullanıyorum. Varsayılan Ubuntu kullanıcısı ile aynı davranışa sahip yeni bir kullanıcı eklemek istiyorum. Özellikle sudobu yeni kullanıcı için şifresiz istiyorum .

Bu yüzden yeni bir kullanıcı ekledim ve düzenlemeye gittim /etc/sudoers(elbette visudo kullanarak). Bu dosyayı okuduğunuzda varsayılan ubuntukullanıcı gruba sudoüye olmaktan çıkıp şifresini alıyormuş gibi görünüyordu admin. Ben de buna yeni kullanıcımı ekledim. Hangi işe yaramadı. Sonra NOPASSWDdirektif eklemeye çalıştım sudoers. Ayrıca işe yaramadı.

Neyse, şimdi sadece merak ediyorum. ubuntuKullanıcı, tanımlanmadıysa nasıl parolasız ayrıcalıklar elde eder /etc/sudoers? Buna izin veren mekanizma nedir?


Yanıtlar:


332

Tamam, cevabı keşfettim, bu yüzden de tam olması için buraya koydum. Bunun sonunda /etc/sudoerssadece bir yorum olduğunu düşündüğüm şey var:

#includedir /etc/sudoers.d

Ancak bu aslında bu dizinin içeriğini içerir. İçinde dosya var /etc/sudoers.d/90-cloudimg-ubuntu. Beklenen içeriğe sahip olan

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Bu yüzden, varsayılan ubuntu kullanıcısı için sudo konfigürasyonunun yaşadığı yerdir.

Bu dosyayı visudo kullanarak düzenlemelisiniz. Aşağıdaki komut doğru dosyayı visudo ile düzenlemenize izin verecektir.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

Ve şöyle bir satır ekleyin:

aychedee ALL=(ALL) NOPASSWD:ALL

Sonunda.


4
Tam bir yeniden başlatma yapmak zorunda kaldığımdan eminim.
aychedee

2
Her yeni giriş yapan kullanıcı için yeni sudo kuralları kullanılacaktır - bu yüzden en azından yeniden giriş yapmanız gerekir
bluszcz

32
'sudo hizmet sudo yeniden başlatma' çalışıyor :)
Laice

4
Daha sonraki sürümlerde (örneğin 14.04) dahil edilen dosya şudur /etc/sudoers.d/90-cloud-init-users(düzenlemek için .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Bununla birlikte, oluşturulan dosyayı düzenlemek yerine ek dosyalar oluşturmak daha temiz olacaktır. Dosyaları içeren unutmayın .veya biten ~olacak değil dahil edilebilir.
Molomby

2
@ Phil_1984_ Büyük olasılıkla, sudo'nun diğer (standart?) Sürümleriyle uyumluluğa izin vermek, buna izin vermeyen, ancak tuhaf bir yorum tarafından tetiklenmeyen bir yorum olarak eklenmiştir. (Standartlar zor! ;-)
16'da jpaugh

94

Bu davranışı birden çok sunucuya kolayca çoğaltmak için yapılacak en yalındır şeyin aşağıdaki olduğunu buldum:

sudo visudo

Bu satırı değiştir:

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

bu çizgiye:

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

Ve bu satırın altına taşıyın :

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

şimdi buna sahip olmalısınız:

# 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"

# Host alias specification

# User alias specification

# Cmnd alias specification

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

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

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

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

#includedir /etc/sudoers.d

Daha sonra sudo erişimi olan her kullanıcı için bir şifre ile :

sudo adduser <user> sudo

ve NO şifresi İLE sudo erişimi gerektiren her kullanıcı için :

sudo adduser <user> admin

ve son olarak şunu çalıştırın:

sudo service sudo restart

Ve bu kadar!

Düzenleme: Varsayılan olarak var olduğunu sanmadığım için yönetici grubunu eklemeniz gerekebilir.

sudo groupadd admin

Varsayılan AWS ubuntukullanıcısını adminbu komutla gruba da ekleyebilirsiniz :

sudo usermod ubuntu -g admin

Not: @hata'nın bahsettiği admgibi, hangi Ubuntu sürümünün kullanıldığına bağlı olarak yönetici grup adınız olarak kullanmanız gerekebilir .


3
Kendime not: Daha az kısıtlayıcı izinleri yığında daha aşağıya taşımak bir kuraldır. Ancak bunu yapmamak işlevselliği etkilemeyecektir.
poweratom

2
Jiminikiz açıkladığım gibi, yerleştirmek zorunda % yöneticisi sonrasında % sudo benim Ubuntu GNOME 16.04 LTS üzerinde. Ayrıca, yöneticiler grup kimliği tam olarak yönetici değil, Ubuntu'uma adm oluyor . Yeniden başlatma gerekmez.
hata

5

/Etc/sudoers.d/ dizini altında kendi dosyamı oluşturacağım - herhangi bir güncelleme durumunda Amazon Cloud tarafından oluşturulan dosyanın üzerine yazılabilir. Dosyanızı /etc/sudoers.d içinde oluşturduktan sonra bu girişi ekleyin,

<your user name> ALL=(ALL) NOPASSWD:ALL

Sistemi yeniden başlatın ve bu işe yarayacak.


2

Herhangi bir editör kullanmadan kısa cevap (bash üzerinde test edilmiş, uzak ana makinelerde çalıştırmak çok riskli).

Mevcut kullanıcı için şifre olmadan çalışacak şekilde sudo yapılandırın:

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

Düzenlemeyi şununla kontrol edin:

sudo visudo -c

Sudo’yu şifre olmadan kullanıp kullanmadığınızı doğrulayın:

sudo cat /etc/sudoers | grep "$USER"

... ya da sadece şunu deneyin:

sudo <anything>

21
Bu oldukça tehlikeli bir öneri ... yanlış kopyalayıp yapıştırın ve kendinizi kendi sunucunuzdan kilitleyeceksiniz. Dolayısıyla visudo kullanmanız tavsiye edilir. Diske kaydetmeden önce sözdiziminin doğru olduğunu kontrol eder. Yani, bunu kullanmak isteyen herkes için. Bunu umursadığın uzak bir sunucuda yapma. Cevabınıza bununla ilgili bir uyarı eklemek isteyebilirsiniz.
aychedee

8
Visudo kullanmamak korkunç bir fikir. Güven bana, biliyorum.
trognanders

1
IMHO, kopyala-yapıştır manuel düzenlemeden daha güvenlidir. Küçük bir sadeleştirme:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
Theartofrain

4
@ theartofrain - Normalde, aynı fikirdeyim, ancak visudosudoers dosyasını kırmanıza izin vermemeniz , bu yüzden sizi makinenizden (veya en azından sudo) kilitlememeniz konusunda özellikle hoş.
Jon V

3
@JonV Yönetici haklarını da kaybedebilirsiniz visudo, ancak genellikle kazayla değil, çünkü visudosadece sudoers dosyalarının gramerine göre oluşan değişiklikleri kaydeder . Çoğu hatalar sözdizimsel yanlış, bu nedenle hiçbir zarar visudo. Eğer /etc/sudoersyoksa bir dosya /etc/sudoers.d olduğu kötü şekillendirilmiş, sudodeğil kullanarak neden bir güvenlik önlemi olarak herkes için ayrıcalık düzeylerini reddediyor visudotehlikelidir. (Gerçi bazenpkexec yeniden başlatmadan düzeltebilir .)
Eliah Kagan

0

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.