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
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)
/etc/sudoers bazen sistem güncellemeleri tarafından değiştirilirken, dosyalar /etc/sudoers.d değil mi
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: