Perintah Sudo Linux Dijelaskan: Penggunaan, Konfigurasi & Penyelesaian Masalah

目次

1. Memulakan: Apa Itu sudo?

Maksud Asas dan Peranan sudo

Dalam sistem Linux dan seumpamanya Unix, “sudo” adalah arahan yang penting.
“sudo” adalah singkatan daripada “superuser do” dan merupakan alat untuk meminjam secara sementara keistimewaan pentadbir (keistimewaan root) bagi melaksanakan arahan. Biasanya, pengguna biasa tidak mempunyai kuasa untuk melakukan operasi yang mempengaruhi keseluruhan sistem (seperti memasang pakej atau mengubah tetapan sistem). Walau bagaimanapun, dengan menggunakan arahan sudo, operasi istimewa ini boleh dilaksanakan secara terhad.

Contohnya, anda boleh melaksanakan arahan apt dengan keistimewaan root dengan menjalankan arahan berikut:

sudo apt update

Oleh itu, sudo memainkan peranan dalam mengimbangi keselamatan sistem dan kemudahan sebagai “mekanisme untuk menggunakan keistimewaan pentadbir dengan selamat.”

Perbezaan daripada Arahan su

Terdapat arahan su yang mempunyai tujuan serupa dengan sudo, tetapi terdapat perbezaan yang jelas antara kedua-duanya.

  • su bermaksud “substitute user” dan merupakan arahan untuk bertukar kepada pengguna lain (terutamanya root) . Apabila anda menggunakan su , operasi dilakukan dengan cara yang sepenuhnya “menjadi” pengguna yang ditetapkan.
  • Sebaliknya, sudo melaksanakan arahan dengan keistimewaan pentadbir yang dipinjam secara sementara sambil kekal sebagai pengguna semasa .

Dengan kata lain, su adalah kaedah pertukaran pada asas sesi, manakala sudo adalah kaedah peningkatan keistimewaan pada asas arahan. Perbezaan ini penting dari segi keselamatan; sudo memudahkan pengurusan sejarah operasi, dan dalam pengagihan terkini, sudo telah menjadi kaedah standard.

Pengagihan Linux Biasa yang Menggunakan sudo

sudo digunakan secara lalai dalam banyak pengagihan Linux, dan penggunaannya diandaikan khususnya dalam pengagihan berikut:

  • Berasaskan Ubuntu (Ubuntu, Linux Mint, dsb.) → Pada mulanya, anda tidak log masuk secara langsung ke akaun root tetapi mengurusnya dengan sudo.
  • Berasaskan Debian → sudo mungkin diaktifkan kemudian, tetapi ia sering disyorkan sebagai dasar keselamatan.
  • Fedora, CentOS, dan berasaskan Red Hat → Walaupun menggunakan akaun root adalah mungkin, penggunaan sudo juga biasa.

Terutamanya dalam Ubuntu, akaun root dilumpuhkan secara lalai, dan semua operasi pentadbiran direka untuk dilakukan melalui sudo. Oleh itu, memahami sudo adalah penting untuk pengguna Ubuntu.

Mengapa “sudo sudo” Dicari?

Kata kunci carian “sudo sudo” mungkin kelihatan berlebihan pada pandangan pertama, tetapi sebenarnya terdapat kes di mana ia dicari dengan niat berikut:

  • Pemula yang ingin tahu maksud dan penggunaan sudo memasukkannya berulang kali untuk penekanan.
  • Pengguna yang menghadapi masalah menggunakan sudo (contohnya, sudo: sudo: command not found ) sedang mencari penyelesaian.
  • Pengguna yang melihat contoh penggunaan sudo berganda dalam skrip atau saluran paip dan tertanya-tanya tentangnya.

Dengan memahami niat carian ini, bab-bab berikut akan menerangkan secara terperinci penggunaan dan kaedah konfigurasi sudo yang betul, serta penyelesaian masalah.

2. Penggunaan Asas Arahan sudo

Sintaks Asas sudo

Format asas sudo sangat mudah.

sudo [options] command

Contohnya, untuk mengemas kini maklumat pakej sistem, gunakan yang berikut:

sudo apt update

Arahan ini bermaksud “laksanakan ‘apt update’ dengan keistimewaan root.”

Mekanisme Pengesahan Kata Laluan dan Cache

Pada kali pertama anda menggunakan sudo, atau selepas tempoh masa tertentu berlalu, sistem akan meminta anda untuk memasukkan kata laluan pengguna. Ini adalah mekanisme untuk meningkatkan keselamatan dan mencegah operasi tidak sengaja atau penggunaan tidak dibenarkan oleh pihak ketiga.

Selepas memasukkan kata laluan, ia dicache untuk tempoh masa tertentu (5 minit secara lalai dalam Ubuntu), dan anda boleh abaikan kemasukan kata laluan apabila menggunakan sudo lagi. Masa ini boleh diubah dalam fail sudoers.

Pilihan yang Sering Digunakan

sudo mempunyai banyak pilihan untuk menjadikan operasi lebih mudah dan fleksibel. Berikut adalah beberapa yang paling biasa digunakan.

-u (Laksanakan sebagai Pengguna Lain)

Secara lalai, ia menggunakan keistimewaan root, tetapi dengan menggunakan pilihan -u, anda boleh melaksanakan arahan sebagai mana-mana pengguna.

sudo -u www-data whoami

Hasil pelaksanaan akan menjadi www-data, mengesahkan bahawa “arahan itu dilaksanakan sebagai www-data, bukan sebagai diri saya.”

-s (Mula Sesuatu Shell)

Arahan berikut membolehkan anda membuka shell sementara dengan keistimewaan root.

sudo -s

Walau bagaimanapun, operasi dalam keadaan root harus dilakukan dengan berhati-hati.

-i (Log Masuk sebagai Pengguna Root Penuh)

Pilihan ini mencipta semula persekitaran root yang lebih lengkap. Oleh kerana pemboleh ubah persekitaran juga ditukar kepada yang milik root, ia menjadi sesi root dalam keadaan yang sama seperti segera selepas log masuk.

sudo -i

-l (Semak Arahan yang Boleh Dilaksanakan)

Anda juga boleh memeriksa arahan yang boleh anda laksanakan menggunakan sudo.

sudo -l

Ini berguna untuk memeriksa sekatan keselamatan dan menguji tetapan keistimewaan.

Perkara yang Perlu Diperhatikan oleh Pemula

  • Anda perlu meletakkan ruang selepas sudo . Contoh: sudoapt adalah salah.
  • Jika anda ingin melaksanakan pelbagai arahan, anda perlu mengapit keseluruhan arahan dalam tanda petik ( " atau ' ) atau memisahkannya dengan titik koma.
  • Berhati-hati apabila menjalankan aplikasi GUI dengan sudo , kerana ia mungkin merosakkan fail konfigurasi (contohnya, sudo gedit ).

3. Fail sudoers dan Kawalan Akses

Apakah Fail sudoers?

Fail konfigurasi yang mengawal tingkah laku arahan sudo adalah /etc/sudoers dalam sistem. Fail ini mentakrifkan siapa yang boleh melaksanakan arahan mana dengan sudo.

Sebagai contoh, kawalan akses yang halus adalah mungkin, seperti membenarkan pengguna tertentu untuk melaksanakan hanya arahan khusus dengan sudo.
Fleksibiliti ini membolehkan merealisasikan prinsip keselamatan menganugerahkan pengguna hanya keistimewaan minimum yang diperlukan (prinsip keistimewaan terkecil).

Pengeditan Selamat dengan Arahan visudo

Fail /etc/sudoers tidak boleh diedit secara langsung dengan penyunting teks.

Ini kerana ralat sintaks boleh menjadikan sudo tidak boleh digunakan, menjadikan pemulihan sukar. Oleh itu, ia disyorkan untuk menggunakan arahan visudo untuk pengeditan.

sudo visudo

visudo melakukan pemeriksaan sintaks semasa menyimpan, membolehkan pengeditan yang selamat.

Sintaks Asas dan Contoh Konfigurasi

Sintaks asas fail sudoers adalah seperti berikut:

username hostname = (runas_user) command(s)

Contoh:

alice ALL=(ALL:ALL) ALL

Tetapan ini membenarkan pengguna “alice” untuk melaksanakan semua arahan pada semua hos sebagai mana-mana pengguna.

Untuk menambah lebih sekatan:

bob ALL=(ALL) /usr/bin/systemctl restart nginx

Tetapan ini menyekatkan pengguna “bob” kepada hanya boleh melaksanakan “arahan semula nginx” dengan sudo.

Kawalan mengikut Kumpulan: Kumpulan sudo

Dalam banyak pengagihan seperti Ubuntu, pengguna yang tergolong dalam kumpulan sudo diberikan keistimewaan untuk menggunakan sudo.

%sudo  ALL=(ALL:ALL) ALL

Dengan menulis %sudo dengan cara ini, pengurusan mengikut kumpulan menjadi mungkin.

Untuk menambah pengguna ke kumpulan sudo, gunakan arahan berikut:

sudo usermod -aG sudo username

Cara Menggunakan dan Langkah Berjaga-jaga untuk Pilihan NOPASSWD

Jika anda mendapati ia menyusahkan untuk memasukkan kata laluan setiap kali melaksanakan sudo, anda boleh menggunakan pilihan NOPASSWD untuk melangkau kemasukan kata laluan.

alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

Dengan tetapan ini, pengguna “alice” akan dapat memulakan semula nginx tanpa kata laluan.

Walau bagaimanapun, ini meningkatkan risiko keselamatan, jadi penting untuk menggunakannya hanya untuk bilangan arahan yang terhad.
Secara khusus, menggabungkannya dengan ALL tidak disyorkan.

4. Penggunaan Lanjutan sudo

Melaksanakan Arahan sebagai Pengguna Khusus

Secara normal, sudo melaksanakan arahan dengan keistimewaan root, tetapi dengan menggunakan pilihan, anda juga boleh melaksanakan arahan sebagai mana-mana pengguna.

Sebagai contoh, jika anda ingin melaksanakan arahan sebagai pengguna “www-data” yang digunakan oleh pelayan web, gunakan yang berikut:

sudo -u www-data whoami

Hasil pelaksanaan akan menjadi www-data, yang mengesahkan bahawa “perintah itu dilaksanakan sebagai www-data, bukan sebagai diri saya sendiri.”

Penggunaan ini berguna apabila anda ingin memeriksa persekitaran atau keistimewaan yang berbeza untuk setiap pengguna.

Gabungan dengan Pengalihan dan Paip

Satu titik kekeliruan yang biasa untuk pemula adalah gabungan sudo dengan pengalihan (>) dan paip (|).
Sebagai contoh, perintah berikut mungkin kelihatan betul pada pandangan pertama, tetapi ia tidak akan berfungsi seperti yang dijangka:sudo echo "test" > /etc/test.conf

Dalam kes ini, echo itu sendiri dilaksanakan dengan sudo, tetapi pengalihan dengan > dilaksanakan dengan keistimewaan pengguna biasa. Oleh itu, penulisan akan gagal.

Cara yang betul adalah menggunakan perintah tee:

echo "test" | sudo tee /etc/test.conf

Dengan melakukan ini, bahagian pengalihan juga dilaksanakan dengan keistimewaan sudo, dan anda boleh mengelakkan ralat.

Penggunaan sudo dalam Skrip

Apabila memasukkan perintah yang memerlukan keistimewaan pentadbir dalam skrip shell, tambahkan sudo secara eksplisit sebelum perintah tersebut.
Walau bagaimanapun, jika anda sedang membuat skrip dengan andaian bahawa ia akan dilaksanakan oleh pengguna biasa, adalah lebih selamat untuk hanya menambah sudo kepada bahagian yang diperlukan dan mengelakkan pelaksanaan keseluruhan skrip dengan sudo.

Contoh (install.sh):

#!/bin/bash

echo "Installing package..."
sudo apt install -y nginx

Ada juga corak untuk memeriksa jika ia adalah root di awal skrip:

if [ "$EUID" -ne 0 ]; then
    echo "This script must be run as root"
    exit 1
fi

Dengan memasukkan kawalan sedemikian, operasi skrip yang selamat menjadi mungkin.

Perintah Mudah Alih yang Sering Digunakan

  • sudo !! → Melaksanakan semula perintah sebelumnya dengan sudo. Sebagai contoh:
    apt update
    sudo !!
    

Ini mempunyai kesan yang sama seperti sudo apt update.

  • sudo -k → Membersihkan cache kata laluan sudo secara manual. Ini berguna atas sebab keselamatan, seperti sebelum meninggalkan terminal anda sementara waktu.
  • sudo -v → Melanjutkan keistimewaan sudo untuk sesi semasa. Ini mudah untuk tugas panjang.

5. Keselamatan dan Amalan Terbaik

Patuhi Prinsip Keistimewaan Paling Kurang

Tujuan utama menggunakan sudo adalah untuk membolehkan operasi sistem dengan keistimewaan minimum yang diperlukan.
Dengan kata lain, penggunaan ideal bukanlah untuk “sentiasa menjadi pengguna root yang mahakuasa,” tetapi untuk “meminjam kuasa root hanya apabila diperlukan dan dalam skop yang diperlukan.”

Mengikut prinsip ini, tetapan berikut, sebagai contoh, adalah diingini:

  • Benarkan pengguna melaksanakan hanya perintah khusus dengan sudo (contohnya, systemctl restart nginx ).
  • Kurangkan penggunaan NOPASSWD.
  • Urus pengguna dengan keistimewaan pentadbir dalam kumpulan (contohnya, sudo ).

Log dan Audit

sudo merekodkan perintah yang dilaksanakan dalam log. Ini membolehkan anda memeriksa kemudian siapa yang menggunakan perintah mana dan bila.

Destinasi log utama adalah seperti berikut (mungkin berbeza bergantung pada pengagihan):

  • /var/log/auth.log (Ubuntu, berasaskan Debian)
  • journalctl (pengagihan dengan systemd)

Sebagai contoh, untuk memeriksa sejarah penggunaan sudo di Ubuntu:

grep 'sudo' /var/log/auth.log

Atau:

journalctl _COMM=sudo

Ini menjadikan ia mungkin untuk menjejaki siapa yang melakukan apa walaupun dalam kejadian operasi tidak dibenarkan atau tidak sengaja. Ini adalah perspektif penting dalam pengurusan pelayan.

Kerentanan sudo Sebenar (CVE-2021-3156)

Walaupun sudo adalah alat yang sangat boleh dipercayai, kerentanan penting telah dilaporkan pada masa lalu.

Satu contoh yang terkenal adalah CVE-2021-3156 (dikenali secara umum sebagai Baron Samedit), yang dikeluarkan pada tahun 2021.
Ini adalah kerentanan serius di mana, di bawah syarat tertentu, input berbahaya boleh membenarkan pengguna biasa untuk mendapatkan keistimewaan root.

Isu ini telah diselesaikan, tetapi seperti kes ini menunjukkan:

  • Sentiasa kekalkan pakej penting termasuk sudo pada versi terbaru .
  • Periksa secara tetap laman web rasmi dan pangkalan data kerentanan.

Langkah-langkah sedemikian adalah perlu.

Pengenalan kepada Alternatif sudo: doas

Di kalangan beberapa persekitaran Linux minimum dan pengguna yang sedar keselamatan, arahan yang dipanggil doas juga digunakan sebagai alternatif kepada sudo.

doas adalah alat peningkatan hak istimewa yang ringkas yang berasal dari OpenBSD, dicirikan oleh konfigurasi yang lebih mudah dan keselamatan yang lebih tinggi berbanding sudo.

Contoh:

doas apt update

Fail konfigurasi ditulis di /etc/doas.conf. Sintaksnya juga mudah:

permit nopass :wheel

Seperti yang ditunjukkan, anda boleh dengan mudah menulis tetapan seperti membenarkan pengguna dalam kumpulan wheel menggunakan doas tanpa kata laluan.

Walau bagaimanapun, kerana doas tidak disediakan secara lalai dalam beberapa persekitaran Linux, ia memerlukan sedikit usaha untuk memasang dan mengkonfigurasi.
Bergantung kepada tujuan dan objektif, adalah baik untuk memilih sama ada sudo atau doas lebih sesuai.

6. Ralat Biasa dan Penyelesaian Masalah

Ralat “User is not in the sudoers file”

username is not in the sudoers file. This incident will be reported.

Ralat ini dipaparkan apabila pengguna semasa tidak mempunyai kebenaran untuk menggunakan sudo. Ia biasanya berlaku apabila pengguna baru yang belum ditambah ke kumpulan sudo melaksanakan arahan.

Penyelesaian:

  1. Log masuk dengan pengguna lain yang mempunyai hak istimewa root.
  2. Tambah pengguna sasaran ke kumpulan sudo.
    sudo usermod -aG sudo username
    

Selepas itu, log keluar dan log masuk semula ke sesi, dan sudo akan tersedia.

Ralat “Permission denied” Apabila Menggunakan Pengarahan atau Paip

Permission denied

Ralat ini berlaku kerana walaupun anda berniat untuk melaksanakan arahan dengan sudo, destinasi pengarahan atau pemprosesan paip dilakukan di luar sudo.

Contoh Tidak Betul:

sudo echo "test" > /etc/test.conf

Dalam kes ini, echo dilaksanakan dengan sudo, tetapi penulisan ke fail dilakukan dengan hak istimewa pengguna biasa, mengakibatkan ralat.

Penggunaan Betul:

echo "test" | sudo tee /etc/test.conf

Atau, untuk menulis pelbagai baris sekaligus, lebih baik menggunakan sudo tee atau sudo bash -c.

sudo bash -c 'echo "line1" > /etc/test.conf'

Ketidakberfungsian Akibat Ralat dalam Mengedit Fail sudoers

Jika anda mengedit fail sudoers secara langsung dan membuat ralat sintaks, sudo itu sendiri mungkin menjadi tidak boleh digunakan. Ini adalah keadaan yang sangat berbahaya.

Penyelesaian:

  1. Log masuk dengan akaun root (perhatikan bahawa ia dilumpuhkan secara lalai di Ubuntu).
  2. Baiki dengan arahan berikut:
    pkexec visudo
    

Jika pkexec tidak boleh digunakan, anda perlu boot ke mod pemulihan atau serupa untuk mengubah suai fail /etc/sudoers.

Juga, untuk mengelakkan ralat sintaks, sentiasa gunakan yang berikut untuk mengedit:

sudo visudo

“sudo: command not found”

sudo: command not found

Ralat ini berlaku apabila sudo tidak dipasang pada sistem atau tidak boleh ditemui disebabkan masalah dengan pembolehubah persekitaran PATH.

Penyelesaian:

  • Log masuk dengan hak istimewa root dan pasang semula sudo seperti berikut:
    apt update
    apt install sudo
    
  • Atau laksanakan dengan menentukan laluan secara langsung ke /usr/bin/sudo :
    /usr/bin/sudo ls
    

7. FAQ: Soalan Lazim Mengenai sudo

Q1. Apakah perbezaan antara sudo dan su?

J:
sudo adalah arahan untuk “melaksanakan sementara hanya arahan khusus dengan hak istimewa pentadbir,” manakala su adalah arahan untuk “bertukar kepada seluruh pengguna (terutamanya root).”

  • sudo : Meningkatkan hak istimewa untuk hanya beberapa operasi sambil kekal sebagai pengguna semasa.
  • su : Bertukar sepenuhnya kepada pengguna lain.

Dari perspektif keselamatan dan sejarah operasi, penggunaan sudo disyorkan dalam tahun-tahun kebelakangan ini.

Q2. Adakah saya perlu kata laluan root apabila menggunakan sudo?

J:
Tidak, anda biasanya memasukkan kata laluan log masuk anda sendiri, bukan kata laluan root.
Ini adalah untuk mengurangkan risiko kebocoran kata laluan root dan memudahkan penjejakan sejarah operasi pengguna.

Q3. Di mana log sudo direkodkan?

J:
Dalam banyak pengagihan Linux, log operasi oleh sudo direkodkan dalam salah satu daripada yang berikut:

  • Berasaskan Ubuntu/Debian: /var/log/auth.log
  • Berasaskan RHEL/CentOS: /var/log/secure
  • Semua persekitaran systemd: journalctl _COMM=sudo

Ini membolehkan anda menjejaki siapa yang melakukan apa walaupun dalam kejadian operasi tidak dibenarkan atau tidak sengaja.

Q4. Saya secara tidak sengaja mengedit fail sudoers. Apa yang harus saya lakukan?

A:
Pertama, pastikan sentiasa menggunakan sudo visudo sebelum mengedit.
Jika anda tidak lagi boleh menggunakan sudo disebabkan ralat sintaks, cuba baiki menggunakan salah satu kaedah berikut:

  • Log masuk dengan akaun root dan baiki dengan visudo.
  • Jika ia Ubuntu, boot sebagai root dari “Mod Pemulihan” dan baiki.
  • pkexec visudo (dalam persekitaran di mana polkit diaktifkan).

Oleh kerana ralat sintaks mempengaruhi operasi keseluruhan sistem, sila uji semula selepas membaiki.

Q5. Adakah cara untuk mendapatkan keistimewaan root tanpa menggunakan sudo?

A:
Ya, tetapi ia tidak disyorkan disebabkan risiko keselamatan yang meningkat.

Contohnya:

  • Tukar ke root dengan arahan su (memerlukan kata laluan root).
  • Log masuk secara langsung dengan akaun root (dilumpuhkan secara lalai dalam Ubuntu).

Banyak pengagihan Linux mempunyai dasar mengelak penggunaan akaun root secara langsung, dan menggunakan sudo lebih selamat.

Q6. Adakah boleh melancarkan aplikasi GUI menggunakan sudo?

A:
Secara asasnya, lebih baik elakkan. Contohnya, menjalankan sesuatu seperti sudo gedit boleh menimpa fail konfigurasi GUI dengan keistimewaan root, yang boleh menyebabkan ketidakselarasan kebenaran atau kerosakan konfigurasi.

Apabila menggunakan aplikasi GUI, disyorkan menggunakan gksudo atau pkexec seperti berikut (walau bagaimanapun, alat ini mungkin sudah usang atau tidak dipasang bergantung pada persekitaran):

pkexec gedit

8. Kesimpulan

Fahami Peranan sudo Dengan Betul

Dalam artikel ini, kami telah menerangkan secara luas “sudo,” arahan yang sangat penting dalam sistem Linux dan Unix-like, meliputi peranan asas, penggunaan, kaedah konfigurasi, aplikasi, langkah keselamatan, ralat biasa, dan FAQ.

sudo bukan sekadar sesuatu untuk “diletakkan sebelum arahan,” tetapi mekanisme kawalan akses yang penting yang membolehkan kerja yang diperlukan sambil mengekalkan keselamatan sistem.

Penggunaan yang Betul Mencegah Masalah

Memberi perhatian khusus kepada perkara-perkara berikut adalah kunci untuk menggunakan sudo dengan selamat:

  • Beroperasi dengan keistimewaan minimum yang diperlukan (prinsip keistimewaan terkecil).
  • Mengurus tetapan dengan selamat menggunakan visudo.
  • Menggunakan log untuk memeriksa dan mengurus sejarah operasi.
  • Berhati-hati tentang tingkah laku apabila menggabungkan dengan paip dan pengalihan.
  • Secara asas elakkan menggunakannya untuk aplikasi GUI.

Kegagalan memahami perkara ini boleh membawa kepada masalah seperti “fail rosak,” “tetapan tidak boleh dipulihkan,” atau “sudo tidak boleh digunakan.”

Pilih Gaya Yang Sesuai Dengan Operasi Sistem Anda

Linux adalah sistem yang sangat fleksibel. Selain menggunakan sudo, anda juga boleh menggunakan alat alternatif seperti doas jika diperlukan.
Bergantung pada dasar operasi dan dasar keselamatan anda, pilih gaya yang sesuai dengan anda dan konfigurasi serta operasi dengan betul, yang akan membawa kepada pengurusan sistem yang lebih baik.

Akhirnya

Memahami sudo adalah langkah pertama dalam memahami Linux.
Sila peroleh pengetahuan dan penggunaan yang betul bukan sekadar sebagai arahan yang mudah, tetapi sebagai “kunci” untuk melindungi keseluruhan sistem.

Kami harap bahawa masa depan apabila anda menggunakan Linux, setiap arahan anda akan dilaksanakan dengan lebih yakin.

侍エンジニア塾