Sudoers dosyası, kullanıcı için nopasswd'yi etkinleştir, tüm komutlar

Önsöz

Bu, sudoers dosyası ve genel olarak sudo komutu ile ilgili oldukça karmaşık bir sorudur.

NOT: Bu değişiklikleri yalnızca öğrenme amacıyla kullandığım Ubuntu Desktop 13.04 çalıştıran özel bir makinede yaptım. NOPASSWD sudo'yu etkinleştirmenin büyük bir güvenlik riski olduğunu anlıyorum.

Soru

Başlangıçta, sudoers dosyasına yaptığım tek değişiklik (/etc/sudoers) bir satırdı, nicholsonjf'nin parola girmek zorunda kalmadan tüm komutları sudo ile çalıştırmasını sağlaması gereken bir kullanıcı belirtimiydi (bkz. nicholsonjf ile başlayan satır):

# 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_resetDefaults        mail_badpassDefaults        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 specificationroot    ALL=(ALL:ALL) ALLnicholsonjf    ALL=NOPASSWD: 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

Ancak bu işe yaramadı ve nicholsonjf olarak bir komutu her çalıştırdığımda hala şifrem istendi. Sudo komutlarını yalnızca sudo ve yönetici gruplarından nicholsonjf'yi kaldırdıktan sonra nicholsonjf olarak çalıştırmaya başlayabildim.

Bunun neden işe yaradığını kimse açıklayabilir mi?

Nicholsonjf kullanıcısı, sudo haklarını iki grup spesifikasyonundan devraldığı için mi admin ve sudo nicholsonjf kullanıcı belirtimini geçersiz kılan (aşağıda sudoers dosyasında görüldü), çünkü bunlar yapılandırma dosyasında daha aşağıdaydı?

Eklediğiniz satır geçersiz kılındı. -den man sudoers:

Bir kullanıcı için birden çok girdi eşleştiğinde, bunlar sırayla uygulanır. Birden çok eşleşme olduğunda, son eşleşme kullanılır (bu mutlaka en özel eşleşme değildir).

Senin durumunda nicholsonjf grubun bir üyesiydi. sudo yani onun için bu çizgi uygulandı:

%sudo   ALL=(ALL:ALL) ALL

Girişleri geçersiz kılmak istiyorsanız /etc/sudoers yeni kayıtları peşlerine bırak.

Yeni giriş şöyle görünmelidir

myuser ALL=(ALL) NOPASSWD: ALL tek bir kullanıcı için veya

%sudo ALL=(ALL) NOPASSWD: ALL bir grup için.

Tek bir kullanıcı için, bu satırı kullanıcı adınızın sonuna ekleyin. sudoers kullanarak dosya sudo visudo komut:

superuser ALL=(ALL) NOPASSWD:ALL

Bir grup için

%supergroup  ALL=(ALL) NOPASSWD:ALL

Bu kullanıcı kullandığında geçerli kullanıcıdan hiçbir zaman parola istememek için sudo bu komutu çalıştır:

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-sudo-password

Adlı bir dosya oluşturur /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password aşağıdaki içeriklerle:

<YOUR USERNAME> ALL=(ALL:ALL) NOPASSWD: ALL

Bu şekilde yapmanın, bu satırı el ile eklemenin avantajları /etc/sudoers kullanım sudo visudo (diğer cevapların önerdiği gibi)

  1. /etc/sudoers bazen sistem güncellemeleri tarafından değiştirilirken, dosyalar /etc/sudoers.d değil mi
  2. bu sudo visudo yöntem hataya eğilimlidir (bu sorunun kanıtladığı gibi), oysa bir komutu kopyalamak ve yapıştırmak daha zordur

Başka bağlamlarda parola sorulmaya devam edilebileceğini unutmayın (örneğin, paroladan bir şeyler yükleme). Ubuntu Yazılımı grafik uygulaması.

Göre sudo cat /etc/sudoers.d/README bu özellik (ekstra sudoer dosyaları koymak /etc/sudoers.d) Debian 1.7.2p1-1'den beri varsayılan olarak etkinleştirilmiştir. 1990'ların sonlarında ortaya çıktı (Ubuntu debian'a dayalı).

Bunu araştırırken fark ettim ki, içinde bir çizgi var. /etc/sudoers bir yorum değil, bir dosya direktif bu, dizinin altındaki herhangi bir dosya veya klasörü yapar /etc/sudoers/* içeriği geçersiz kıl /etc/sudoers.

Bu, ilk bakışta yorumlanmış bir satır gibi göründüğü için sinsi küçük bir yönergedir. Şuna benziyor:

#includedir /etc/sudoers.d

Ubuntu'nun temel görüntüsüyle bir CICD boru hattında kullanılmak üzere geçici bir Docker Görüntüsünde root olmayan, şifresiz kullanıcıyı bu şekilde uyguladım: 18.04:

RUN \  useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \  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 "Customized the sudoers file for passwordless access!" && \  echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "foo user:";  su foo -c 'whoami && id' && \  echo "root user:"; su root -c 'whoami && id'

Yukarıdaki kodla ne olur:

  • Kullanıcı ve grup foo yaratılmıştır.
  • Kullanan foo her ikisine de eklenir foo ve sudo grup.
  • Giriş dizini şu şekilde ayarlanmıştır /home/foo.
  • Kabuk şu şekilde ayarlanmıştır: /bin/bash.
  • Bu sed komut satır içi güncellemeleri yapar /etc/sudoers izin verilecek dosya foo ve root kullanıcılar şifresiz erişim sudo grup.
  • Bu sed komut devre dışı bırakır #includedir alt dizinlerdeki dosyaların bu satır içi güncelleştirmeleri geçersiz kılmasına izin verecek yönerge.

Olarak Vincent var bir yorumda belirtilen, bu satırı kullanabilirsiniz:

%sudo ALL=NOPASSWD: ALL

(Bu, gösterilen satırlardan farklıdır şunlar cevaplar ve bu benim için sorunu çözdü.)

Sudoers dosyasının sonunda EOF biçimlendirmesi olmadan tek bir satıra bir dize ekleyebilir veya sed -i:

cat >> /etc/sudoers <<<'PaSe ALL=(ALL:ALL) NOPASSWD:ALL'

Referans:https://stackoverflow.com/questions/41298208/how-to-append-a-line-at-the-end-of-etc-sudoers-file-using-shell-script-without/70039824#70039824

not: ALL=NOPASSWD: ALL=(ALL) NOPASSWD: ALL olmalıdır, aksi halde çalışmaz…

Olası kopyası [Neden sudoers NOPASSWD seçeneği çalışmıyor?] (sudo - Why is sudoers NOPASSWD option not working? - Ask Ubuntu )

ayrıca bu cevaba bakınız: sudo does not ask for password - Ask Ubuntu