Jalankan sudo tanpa Kata Sandi?


292

Terinspirasi oleh pertanyaan ini ....

Saya satu-satunya orang yang menggunakan sistem saya dengan 12,04.
Setiap kali saya mengeluarkan sudoperintah; sistem meminta kata sandi pengguna (yang bagus dengan caranya sendiri).
Namun saya berpikir; tanpa mengaktifkan akun root ; bagaimana saya bisa menjalankan perintah sudo yang tidak akan meminta kata sandi pengguna untuk mengotentikasi.

CATATAN: Saya ingin menjalankan perintah sudo tanpa mengautentikasi melalui kata sandi; hanya ketika mereka dieksekusi melalui terminal.
Saya tidak ingin menghapus lapisan keamanan tambahan ini dari fungsi lain seperti saat menggunakan 'pusat perangkat lunak Ubuntu' atau menjalankan skrip bash dengan menyeret-jatuhkan file something.sh ke terminal.


2
jadi Anda hanya ingin dimintai kata sandi di terminal dan untuk hal-hal lain tidak, atau sebaliknya? dalam kedua cara, saya pikir ini adalah pelanggaran keamanan yang tinggi
Dr_Bunsen

Saya ingin sistem itu tidak hanya meminta kata sandi ketika di terminal ... untuk tujuan lain sistem harus meminta kata sandi. Persyaratan ini hanya sementara, dan untuk digunakan ketika mengkonfigurasi dan menginstal server baru .. selama instalasi server baru, itu benar-benar memakan waktu berjam-jam mengkonfigurasi dengan perintah sudo .. mengeluarkan kata sandi setiap 15 menit. adalah sakit kepala. Saya tidak ingin menggunakan akun root.
Bhavesh Diwan

Anda perlu membaca diskusi di: askubuntu.com/questions/135428/…
david6

1
Pasti Anda bisa memperpanjang batas waktu. Juga, jika Anda sering melakukan pengaturan server baru, Anda harus berpikir tentang mengotomatiskan proses. Anda tidak dibayar untuk mengetik, Anda dibayar untuk menyelesaikan masalah dan menyelesaikannya.
MauganRa

Jawaban:


82

sudo -i adalah cara untuk pergi jika Anda tidak ingin mengetik kata sandi setiap 10 menit saat melakukan modifikasi di sistem Anda (atau sistem lain), dan Anda tidak ingin memodifikasi file sistem apa pun.

Ini akan mengalihkan Anda untuk melakukan root menggunakan sudokata sandi pengguna Anda , ketika Anda menutup konsol atau mengetik exitAnda kembali ke pengguna normal Anda.


2
Apakah ini benar bahwa saya memasukkan kata sandi hanya sekali ... dan sampai saat saya tidak keluar; cuaca 5 jam. atau 15 .... sistem tidak akan meminta otentikasi dengan kata sandi ketika perintah sudo dikeluarkan.
Bhavesh Diwan

2
@ Z9iT hingga Anda mengetik exitatau sampai Anda menutup jendela terminal emulator.
Bruno Pereira

2
Terima kasih .. Menerima jawaban ini karena server ini mengeluarkan tujuan untuk mengeluarkan perintah sudo tanpa otentikasi kata sandi selama n-jam sampai saat kami tidak akan keluar. Tidak memodifikasi file sistem merupakan nilai tambah.
Bhavesh Diwan

3
Ini tidak benar-benar menjawab pertanyaan, karena Anda masih perlu memasukkan kata sandi untuk menjadi root pada saat itu.
Adam F

2
Tidak jika Anda menjalankan mesin virtual di lingkungan yang aman dan Anda hanya ingin hal itu segera melakukan sesuatu dan Anda tidak ingin berurusan dengan kata sandi. Jawaban ini tidak menjawab pertanyaan, sementara itu bisa dibilang informasi yang bermanfaat. Saya setuju dengan Adam F
Jonathan Komar

573

Anda dapat mengonfigurasi sudountuk tidak pernah meminta kata sandi Anda.

Buka jendela Terminal dan ketik:

sudo visudo

Di bagian bawah file, tambahkan baris berikut:

$USER ALL=(ALL) NOPASSWD: ALL

Di mana $USERnama pengguna Anda di sistem Anda. Simpan dan tutup file sudoers (jika Anda belum mengubah editor terminal default Anda (Anda akan tahu jika sudah), tekan ctl + x untuk keluar nanodan itu akan meminta Anda untuk menyimpan).

Pada Ubuntu 19.04, file tersebut sekarang akan terlihat seperti

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

Setelah ini, Anda dapat mengetik sudo <whatever you want>di jendela Terminal tanpa diminta kata sandi.

Ini hanya berlaku, untuk menggunakan sudoperintah di terminal. Anda masih akan dimintai kata sandi jika Anda (misalnya) mencoba menginstal paket dari pusat perangkat lunak

kata sandi gui prompt


15
Dianjurkan untuk menggunakannya sudo visudodaripada mengeditnya secara langsung. Juga mengubah izin sudoers dapat mengunci diri. Saat mengedit dengan vim, gunakan :wq!untuk menulis ke file hanya-baca dan keluar dari editor. Dengan cara itu, izin 644 tidak diperlukan.
Lekensteyn

8
Ini adalah risiko keamanan serius, siapa pun yang mengambil alih akun apa pun dengan hak sudo dapat mengendalikan sistem lengkap dan mengunci akses lebih lanjut ke komputer ini, sangat tidak disarankan.
Bruno Pereira

6
@ wil93 Anda kehilangan intinya: skrip yang meminta sudo install crapwaretidak akan meminta kata sandi dalam hal ini dan mungkin mengacaukan semua yang Anda miliki, dan Anda tidak perlu secara fisik di sebelah mesin untuk mendistribusikan skrip terakhir kali saya memeriksa. .. Ini hanya sebuah contoh.
Bruno Pereira

12
@BrunoPereira Jika Anda berencana untuk menjalankan skrip yang tidak dipercaya maka itu adalah risiko keamanan (bahkan jika sudo meminta kata sandi, skrip jahat selalu dapat melakukan rm -rf ~beberapa hal mengacaukan). Secara keseluruhan, saya tidak akan menyebut «risiko keamanan serius» penghapusan kata sandi yang sederhana dari sudo.
wil93

5
Setuju dengan @ wil93. Saat menjalankan skrip yang tidak dipercaya, memasukkan kata sandi tidak lebih dari kesempatan untuk membatalkan proses, sementara saya ragu itu tidak berguna bagi kebanyakan orang. Intinya adalah Anda tahu dari mana naskah itu berasal dan apa fungsinya.
Chad

36

Waktu tunggu root sudo adalah cara termudah dan teraman untuk melakukan ini. Saya akan memberikan semua contoh, tetapi berhati-hatilah karena Anda berisiko melakukan hal ini meskipun cara ini jauh lebih aman:

sudo visudo

Ini membuka editor dan mengarahkannya ke file sudoers - default Ubuntu untuk nano, sistem lain menggunakan Vi. Anda sekarang adalah pengguna super yang mengedit salah satu file paling penting di sistem Anda. Tanpa stres!

(Instruksi spesifik dicatat dengan (vi!) . Abaikan ini jika Anda menggunakan nano.)

Gunakan tombol panah untuk pindah ke ujung Defaultsgaris.

(vi!) tekan tombol A (kapital "a") untuk bergerak di akhir baris saat ini dan masuk ke mode pengeditan (tambahkan setelah karakter terakhir di baris).

Sekarang ketik:

,timestamp_timeout=X

di mana X adalah batas waktu habis dalam hitungan menit. Jika Anda menentukan 0, Anda akan selalu ditanya kata sandi. Jika Anda menentukan nilai negatif, batas waktu tidak akan pernah berakhir. Misalnya Defaults env_reset,timestamp_timeout=5.

(vi!) tekan Escape untuk kembali ke mode perintah. Sekarang, jika Anda senang dengan pengeditan Anda, ketik :w Enteruntuk menulis file dan :q Enteruntuk keluar vi. Jika Anda melakukan kesalahan, mungkin cara termudah adalah mengulang dari awal, keluar tanpa menyimpan (tekan Escapeuntuk masuk ke mode perintah) dan kemudian ketik: q! Enter.

Tekan Ctrl+ X, lalu Y, Enteruntuk menyimpan file Anda dan keluar dari nano.

Anda mungkin ingin membaca sudoers dan halaman manual untuk informasi tambahan.

man sudoers
man vi

Setel ulang nilai batas waktu menggunakan:

sudo -k

Instruksi ini untuk menghapus prompt kata sandi saat menggunakan perintah sudo. Perintah sudo masih perlu digunakan untuk akses root.

Edit file sudoers

Buka jendela Terminal. Ketikkan sudo visudo. Tambahkan baris berikut ke END file (jika tidak pada akhirnya itu dapat dibatalkan oleh entri yang lebih baru):

<username> ALL=NOPASSWD: ALL

Ganti <username>dengan nama pengguna Anda (tanpa <>). Ini dengan asumsi bahwa Ubuntu telah membuat grup dengan nama yang sama dengan nama pengguna Anda, yang tipikal. Anda dapat menggunakan pengguna grup atau grup lain yang Anda gunakan secara bergantian. Pastikan Anda berada di dalam grup itu. Ini dapat diperiksa dengan masuk ke Sistem -> Administrasi -> Pengguna dan Grup.

Contoh:

michael ALL=NOPASSWD: ALL

Ketik ^ X ( Ctrl+ X) untuk keluar. Ini akan meminta opsi untuk menyimpan file, ketik Y untuk menyimpan.

Logout, dan kemudian masuk kembali. Sekarang ini seharusnya memungkinkan Anda untuk menjalankan perintah sudo tanpa diminta kata sandi.

Akun root

Mengaktifkan akun root

Mengaktifkan akun root jarang diperlukan. Hampir semua yang perlu Anda lakukan sebagai administrator sistem Ubuntu dapat dilakukan melalui sudo atau gksudo. Jika Anda benar-benar membutuhkan login root persisten, alternatif terbaik adalah mensimulasikan shell login Root menggunakan perintah berikut:

sudo -i

Namun, jika Anda harus mengaktifkan login root, Anda dapat melakukannya seperti ini:

sudo passwd root

Nonaktifkan kembali akun root Anda

Jika karena alasan tertentu Anda telah mengaktifkan akun root Anda dan ingin menonaktifkannya lagi, gunakan perintah berikut di terminal:

sudo passwd -dl root

Sudo grup seluruh sistem

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

Logout, lalu kembali.

Setel ulang waktu tunggu sudo

Anda dapat memastikan sudo meminta kata sandi lain kali dengan menjalankan:

sudo -k

Saya memposting ini sebelum saya menambahkan, untuk sistem yang luas dalam melakukan ini dan yang lainnya baca di sini:
user209328

Ini adalah jawaban yang terlambat, tetapi merupakan yang paling komprehensif dalam hal opsi yang diberikannya kepada Anda.
Jenming

1
Hmm, di Ubuntu 18,04 MATE ini berfungsi dengan baik, sementara melakukan hal yang sama di Ubuntu 18,04 GNOME membuat saya keriput dengan masalah "nama pengguna tidak ada dalam file sudoers ...". Sekarang, inilah mengapa begitu banyak orang yang membenci linux - karena jarang "sebab-akibat": D Kalau-kalau Anda mengalami hal yang sama ... Inilah cara Anda memperbaiki masalah: tecmint.com/…
Peter

Variabel lingkungan EDITOR dapat mengatur editor yang digunakan ... misalnya sudo env EDITOR=/bin/nano visudountuk mengedit dengan andal sudoersdi nano. (pembaruan-alternatif dapat digunakan untuk mengatur editor juga)
Gert van den Berg

29

Cara yang disukai untuk memberikan izin individu (atau grup) adalah dengan menambahkan file di bawah /etc/sudoers.d

Ini memisahkan perubahan lokal dari kebijakan default dan menghemat waktu jika file distribusi sudoer berubah.

Untuk membuat pengguna yang saat ini masuk sebagai sudoer dan membuat sudomereka tidak meminta kata sandi, gunakan

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

ini akan membuat file bernama /etc/sudoers.d/$USER(di mana $USERnama pengguna pengguna yang Anda masuki saat Anda menjalankan perintah itu), membuatnya menjadi jelas pengguna mana yang diberikan izin.

Jika Anda ingin melakukan itu untuk pengguna yang berbeda, ganti saja kedua instance $USERdengan beberapa nama pengguna lain pada perintah di atas.

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

Demikian pula, satu file dapat digunakan untuk mengelola beberapa arahan:

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

Lihat /etc/sudoers.d/READMEdan man sudoersuntuk informasi lebih lanjut.


perintah echo gagal, meskipun saya root. tetapi, saya menambahkan file dan mengeditnya secara langsung dan ini bekerja pada ubuntu terbaru (sedangkan menambahkan pengguna ke sudoers secara langsung tidak!)
scape

1
Cara yang benar adalah melakukannya dengan teeperintah.
woto

1
Ini adalah cara yang lebih baik yang berfungsi sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'sudo chmod 440 /etc/sudoers.d/$(logname)
:,

Di sudo ... >fileredirection shell dieksekusi di shell asli, jadi itu hanya bisa bekerja di root shell.
Konstantin Pelepelin

metode tee, tanpa masalah izin:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip

7

Satu baris yang bagus untuk menghapus sudo meminta pengguna saat ini

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

2
Saya pikir Anda hanya bisa melakukan:, echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudohanya visudoperlu sudosetelah semua (dan bahkan envtidak akan diperlukan dalam konfigurasi default, IIRC).
muru

ada begitu banyak yang bisa salah di sini (semua kesalahan pengguna, tentu saja), yang lebih disukai, menurut pendapat saya, untuk mengedit file sudoer secara langsung ( sudo visudo), saat menguji hasilnya (dengan editor masih terbuka), untuk para pengguna baru yang mungkin tergoda untuk mencoba "satu garis" ini.
michael

Terima kasih untuk umpan baliknya! Saya hanya cepat mencoba untuk script-ify penghapusan sudo password prompt di VM tes volatil saya. Jangan ragu untuk menyarankan perbaikan :)
Eric Landry

Anda masih perlu sudo chmod 440 /etc/sudoers.d/$(logname)memperbaiki izin file seperti yang dinyatakan dalam README di direktori itu.
paradroid

6

Tentu saja apa yang ingin Anda lakukan tidak disarankan. Setelah beberapa saat, meskipun masuk sudomenjadi begitu otomatis sehingga kegunaannya berkurang.

Pendekatan lain adalah membiarkan file sudoers Anda apa adanya dan, sambil melakukan sesuatu yang rumit pada sekian ratus server Anda, masukkan sudo bash. Itu akan memberi Anda shell yang akan diautentikasi sebagai root sampai Anda keluar.


12
sudo -satau sudo -imungkin keduanya adalah ide yang lebih baik daripada sudo bash, karena mereka memastikan lingkungan itu waras dan benda.
Darael

2
"waras dan semacamnya" tidak secara umum berada di ranah "gagasan yang lebih baik", dapatkah seseorang memberikan penjelasan teknis mengapa sudo -s atau sudo -i lebih baik daripada sudo bash? (Sunting: Ini adalah pertanyaan yang relevan askubuntu.com/questions/376199/… )
Nuzzolilo

2
sejumlah sudoperintah (terutama memikirkan sudo pip ...) memerlukan sudo -H(set HOME) agar perintah dapat berjalan dengan baik. Dalam kasus lain, sudo -E(simpan env) mungkin diperlukan. Menjalankan sudo bashmungkin akan berhasil dalam kebanyakan kasus, tetapi tidak dalam semua, dan ketika tidak, itu tidak akan jelas mengapa.
michael

1
sudo su adalah cara tradisional untuk berganti peran dan mulai bertindak sebagai admin sys.
user1656671

3

Dari Super User datang jawaban yang bagus:

Gunakan saklar -S yang membaca kata sandi dari STDIN:

echo <password> | sudo -S <command>

Ganti <password>dengan kata sandi Anda.


2
Ini tidak disarankan, karena kata sandi tetap dalam jenis kode yang jelas dalam file histori shell. Terapkan salah satu solusi lain sebagai gantinya.
HappyCactus

1
@HappyCactus dapatkah Anda menempatkan ruang sekali di depan echosehingga tidak muncul dalam sejarah?
WinEunuuchs2Unix

Ya ini akan menghindari memaparkan kata sandi teks-bersih ke file histori. Tetapi apakah Anda selalu ingat untuk menambahkannya? :-)
HappyCactus

@HappyCactus Saya cenderung menambahkan ruang terdepan secara tidak sengaja dan kemudian merasa terganggu ketika sejarah tidak dapat dipanggil kembali :) Pokoknya Pengguna Super memiliki 129 upvotes jadi saya pikir itu adalah jawaban yang bagus untuk meninggalkan tempat ini. Orang-orang akan membaca komentar kami dan mengetahui risiko dan langkah penghindaran risiko.
WinEunuuchs2Unix

Saya sangat setuju. Semoga harimu menyenangkan!
HappyCactus

2

Satu liner

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


2

Ini adalah solusi satu baris yang juga mengubah izin file seperti yang dinyatakan dalam /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
  • Memperluas gagasan @upteryx.

  • Inilah cara saya menerapkan pengguna non-root, tanpa kata sandi dalam Docker Image yang singkat untuk digunakan dalam pipa CICD:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.