Pertanyaan Bagaimana menjalankan perintah sudo tanpa kata sandi?


Bagaimana ubuntu pengguna pada gambar AWS untuk Ubuntu Server 12.04 tidak memiliki kata sandi sudo untuk semua perintah saat tidak ada konfigurasi untuknya /etc/sudoers?

Saya menggunakan server Ubuntu 12.04 di Amazon. Saya ingin menambahkan pengguna baru yang memiliki perilaku yang sama dengan pengguna default Ubuntu. Secara khusus saya ingin tanpa kata sandi sudo untuk pengguna baru ini.

Jadi saya telah menambahkan pengguna baru dan mulai mengedit /etc/sudoers (menggunakan visudo tentu saja). Dari membaca file itu sepertinya default ubuntu pengguna mendapatkan itu tanpa kata sandi sudo dari menjadi anggota admin kelompok. Jadi saya menambahkan pengguna baru saya untuk itu. Yang tidak berfungsi. Lalu saya mencoba menambahkan NOPASSWD direktif ke sudoers. Yang juga tidak berfungsi.

Bagaimanapun, sekarang aku hanya ingin tahu. Bagaimana ubuntu pengguna mendapatkan hak akses tanpa kata sandi jika mereka tidak didefinisikan /etc/sudoers. Apa mekanisme yang memungkinkan ini?


199
2017-09-23 09:30


asal


Terkait: Jalankan sudo tanpa kata sandi? - Eliah Kagan


Jawaban:


Oke, saya telah menemukan jawabannya jadi mungkin juga taruh di sini untuk kelengkapan. Pada akhir /etc/sudoers ada yang saya pikir hanya komentar:

#includedir /etc/sudoers.d

Namun ini sebenarnya termasuk isi direktori itu. Di dalamnya ada file /etc/sudoers.d/90-cloudimg-ubuntu. Yang memiliki konten yang diharapkan

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

Jadi itulah letak konfigurasi sudo untuk pengguna ubuntu default.

Anda harus mengedit file ini menggunakan visudo. Perintah berikut akan membiarkan Anda mengedit file yang benar dengan visudo.

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

Dan tambahkan baris seperti:

aychedee ALL=(ALL) NOPASSWD:ALL

Pada akhirnya.


292
2017-09-23 10:27



Saya cukup yakin saya harus melakukan reboot penuh. - aychedee
aturan sudo baru akan digunakan untuk setiap pengguna baru yang masuk - jadi Anda perlu masuk kembali setidaknya - bluszcz
'sudo service sudo restart' berfungsi :) - Laice
Dalam versi yang lebih baru (14.04 misalnya) file yang disertakan adalah /etc/sudoers.d/90-cloud-init-users (jadi untuk mengedit .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Meskipun akan lebih bersih untuk membuat file tambahan daripada mengedit yang dihasilkan. Perhatikan bahwa file yang berisi file . atau berakhiran ~akan tidak termasuk. - Molomby
@ Phil_1984_ Kemungkinan besar, itu ditambahkan sebagai komentar untuk memungkinkan kompatibilitas dengan versi lain (standar?) Dari sudo, yang tidak memungkinkan termasuk, tetapi tidak akan tersandung oleh komentar aneh. (Standar sulit! ;-) - jpaugh


Saya menemukan bahwa hal yang paling lurus ke depan untuk dilakukan, agar mudah mereplikasi perilaku ini di beberapa server, adalah sebagai berikut:

sudo visudo

Ubah baris ini:

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

ke baris ini:

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

Dan pindahkan itu dibawah garis ini:

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

Anda seharusnya sudah memiliki ini:

# 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

kemudian untuk setiap pengguna yang membutuhkan akses sudo DENGAN kata sandi:

sudo adduser <user> sudo

dan untuk setiap pengguna yang membutuhkan akses sudo TANPA kata sandi:

sudo adduser <user> admin

dan akhirnya, jalankan ini:

sudo service sudo restart

Dan itu dia!

Edit: Anda mungkin harus menambahkan grup admin karena saya tidak menganggapnya ada secara default.

sudo groupadd admin

Anda juga dapat menambahkan AWS default ubuntu pengguna ke admin grup melalui perintah ini:

sudo usermod ubuntu -g admin

77
2018-04-03 21:45



Catatan untuk diri sendiri: Ini adalah konvensi untuk memindahkan izin yang kurang restriktif lebih rendah dalam tumpukan. Tetapi tidak melakukannya tidak akan memengaruhi fungsi. - poweratom
Sebagai jiminikiz menjelaskan, saya harus menempatkan % admin setelah % sudo pada Ubuntu GNOME 16.04 LTS saya. Plus, id grup administrator tidak persis sama admin tapi adm di Ubuntu saya. Tidak perlu reboot. - hata


Jawaban singkat tanpa menggunakan editor apa pun (diuji pada bash, sangat berisiko untuk dijalankan pada host jarak jauh).

Konfigurasikan sudo agar berfungsi tanpa kata sandi untuk pengguna saat ini:

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

Periksa hasil edit dengan:

sudo visudo -c

Verifikasi apakah Anda dapat menggunakan sudo tanpa kata sandi:

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

... atau coba saja dengan:

sudo <apa saja>

-1
2017-08-13 22:25



Ini adalah saran yang sangat berbahaya ... salin dan tempelkan yang salah ini dan Anda akan mengunci diri sendiri dari server Anda sendiri. Karenanya saran untuk menggunakan visudo. Ini memeriksa bahwa sintaks sudah benar sebelum menyimpan ke disk. Jadi, bagi siapa saja yang ingin menggunakan ini. Jangan lakukan pada server jauh yang Anda sayangi. Anda mungkin ingin memasukkan peringatan tentang itu dalam jawaban Anda. - aychedee
Tidak menggunakan visudo adalah a mengerikan ide. Percayalah padaku, aku tahu. - Bailey S
IMHO, copy-paste lebih aman daripada pengeditan manual. Penyederhanaan kecil: echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers - theartofrain
@theartofrain - Biasanya, saya setuju, tapi visudo sangat bagus tentang tidak memungkinkan Anda untuk memecahkan file sudoers, sehingga tidak mengunci Anda keluar dari mesin Anda (atau setidaknya sudo). - Jon V
@JonV Anda dapat kehilangan hak admin melalui visudo juga, tetapi biasanya bukan karena kecelakaan, karena visudo hanya menyimpan perubahan yang terbentuk dengan baik menurut grammar untuk file sudoers. Paling kesalahan secara sintaks salah, sehingga tidak menyebabkan kerusakan visudo. Jika /etc/sudoers atau file dalam /etc/sudoers.d  aku s tidak berdasar, sudo menolak untuk meningkatkan hak istimewa bagi siapa pun sebagai tindakan pengamanan, yang mengapa tidak menggunakannya visudo berbahaya. (Meskipun terkadang pkexec dapat memperbaikinya tanpa reboot.) - Eliah Kagan