Apa yang menentukan perintah Linux mana yang memerlukan akses root?

23

Apa yang menentukan perintah Linux mana yang memerlukan akses root? Saya mengerti alasan mengapa diinginkan bahwa, katakanlah, apt-getharus memerlukan roothak istimewa; tetapi apa yang membedakan perintah ini dari yang lain? Apakah ini hanya masalah kepemilikan dan mengeksekusi izin yang dapat dieksekusi?

Brian Dobby
sumber
2
Ini terutama fungsi dari file apa yang mereka sentuh dan fungsi apa yang mereka sebut.
Federico klez Culloca
9
Beberapa aplikasi memerlukan akses ke file / dir, yang dimiliki oleh root. Jadi, mereka hanya menelepon opendan mendapatkan "izin ditolak". Beberapa aplikasi memeriksa getuiddan berhenti bekerja jika tidak dipanggil oleh root. Beberapa secara fisik dimiliki oleh root dan hanya pemilik yang dapat mengeksekusinya (lihat chmod). Jika Anda bertanya apakah ada tanda "perlu root" di header aplikasi - jawabannya adalah tidak. Tidak ada yang namanya afaik
user996142
1
ps: beberapa syscalls (seperti mengikat ke port terkenal <1024) mungkin juga memerlukan akses root.
user996142
apt-get tidak memerlukan root sama sekali. Itu ada di direktori / usr / bin, lihat askubuntu.com/a/440791/169736
Braiam
Anda mungkin mengkritik apa yang Anda maksud dengan "mengharuskan" di sini. Apakah maksud Anda bahwa program tidak akan dijalankan kecuali Anda root (atau memiliki izin sudo), atau perlu di-root agar dapat melakukan tugasnya dengan benar?
jamesqf

Jawaban:

15

Di linux, hak-hak istimewa dari akar berada pada satu titik dibagi menjadi "kemampuan", sehingga Anda bisa mendapatkan daftar lengkap dari hak-hak istimewa root dengan melihat ke dalam dokumentasi yang: man 7 capabilities.

Untuk menjawab pertanyaan Anda, sebuah perintah akan membutuhkan menjalankan sebagai root ketika membutuhkan salah satu dari hak istimewa ini, dan non-skrip yang dapat dieksekusi tidak memiliki kapabilitas yang relevan yang diatur dalam metadata file-nya (mis. Jika skrip python membutuhkan kapabilitas, maka kapabilitas perlu berada di interpreter python ditentukan dalam baris shebang).

Perhatikan bahwa beberapa perintah yang memerlukan akses root tidak memerlukan sesuatu seperti sudokarena mereka memiliki bit SUID yang diatur dalam executable-nya. Bit ini menyebabkan executable dijalankan sebagai pemilik (biasanya root) ketika dieksekusi oleh siapa saja yang memiliki akses eksekusi. Contohnya sudosendiri karena mengubah pengguna adalah tindakan istimewa yang perlu dilakukan.

EDIT: Saya perhatikan dari pertanyaan Anda bahwa Anda mungkin memiliki gagasan bahwa Anda dapat menentukan apakah suatu perintah akan membutuhkan akses root sebelum menjalankannya. Bukan itu masalahnya. Suatu program kadang-kadang mungkin memerlukan hak akses root dan kali lain tidak, dan ini bisa menjadi keputusan yang dibuat oleh program karena data itu diberikan selama runtime. Ambil contoh, memanggil vim, begitu saja tanpa argumen, dan kemudian melalui serangkaian penekanan tombol dan menempel, menyuruhnya untuk menulis sesuatu ke file yang tidak memiliki izin untuk menulis, atau mungkin menjalankan perintah lain yang dengan sendirinya akan memerlukan hak akses root. Apa-apa tentang perintah sebelum dieksekusi dapat menunjukkan bahwa pada akhirnya akan memerlukan akses root. Itu adalah sesuatu yang hanya dapat ditentukan pada titik ia mencoba melakukan sesuatu yang mengharuskannya.

Bagaimanapun, berikut adalah beberapa contoh dari halaman referensi yang dirujuk tentang hak istimewa root:

  • Melakukan manipulasi proses UID (setuid (2), sewenang-wenang (2), setresuid (2), setfsuid (2));
  • Memotong file membaca, menulis, dan menjalankan pemeriksaan izin. (DAC adalah singkatan dari "kontrol akses diskresioner".)
  • Abaikan izin untuk memeriksa pengiriman sinyal (lihat kill (2)). Ini termasuk penggunaan operasi KDSIGACCEPT ioctl (2).
  • Lakukan berbagai operasi terkait jaringan:
    • konfigurasi antarmuka;
    • administrasi IP firewall, penyamaran, dan akuntansi;
    • memodifikasi tabel routing;
  • Ikat soket ke port khusus domain Internet (nomor port kurang dari 1024).
  • Muat dan keluarkan modul kernel (lihat init_module (2) dan delete_module (2));
  • Atur jam sistem (settimeofday (2), stime (2), adjtimex (2)); mengatur jam (perangkat keras) waktu nyata.
  • Lakukan serangkaian operasi administrasi sistem termasuk: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2), dan setdomainname (2);
  • Gunakan reboot (2) dan kexec_load (2).
  • Gunakan chroot (2).
  • Naikkan nilai proses bagus (bagus (2), setpriority (2)) dan ubah nilai bagus untuk proses sewenang-wenang;
JoL
sumber
32

Ini terutama soal apa alat atau program tidak . Perlu diingat bahwa non-pengguna super hanya dapat menyentuh file yang dimiliki atau memiliki akses ke, alat apa pun yang perlu untuk bisa masuk ke dalam segalanya akan memerlukan akses pengguna super untuk melakukan hal yang dilakukannya. Contoh cepat Hal-hal yang mungkin memerlukan akses pengguna super termasuk, tetapi tidak terbatas pada:

  • Membuka soket TCP yang mendengarkan pada port di bawah 1024
  • Mengubah konfigurasi sistem (mis. Apa pun di dalam /etc)
  • Menambahkan perpustakaan yang dapat diakses secara global ( /libdan /usr/lib) atau binari ( /bin, /usr/bin)
  • Menyentuh file apa pun yang tidak dimiliki oleh pengguna yang melakukan sentuhan yang tidak memiliki mode permisif yang cukup
  • Mengubah kepemilikan file pengguna lain
  • Escelating prioritas proses (misalnya renice)
  • Memulai atau menghentikan sebagian besar layanan
  • Konfigurasi kernel (mis. Menyesuaikan swappiness)
  • Menyesuaikan kuota sistem file
  • Menulis ke disk "penuh" (kebanyakan filesystem menyediakan ruang untuk pengguna root)
  • Melakukan tindakan sebagai pengguna lain
DopeGhoti
sumber
4
"Mengubah prioritas proses" pengguna non-root dapat mengubah kualitas, menjadi lebih baik. Satu-satunya hal yang tidak bisa mereka lakukan adalah bersikap kurang baik.
Braiam
1
Saya tahu daftar ini tidak lengkap, tetapi saya merasa tugas yang sangat penting yang hanya dapat dilakukan oleh pengguna super adalah berkedok sebagai - atau hanya masuk sebagai - pengguna lain.
phihag
Saya telah menyesuaikan poin utama tentang prioritas proses, dan menambahkan "Melakukan tindakan sebagai pengguna lain". Semoga dengan waktu dan komentar yang cukup, daftar ini akan menjadi lebih komprehensif.
DopeGhoti
0

Saya pikir sesuai dengan identitas pengguna untuk memverifikasi izin, tidak sesuai dengan urutan untuk membagi izin. File dan pengguna memiliki hak istimewa dan perintah tidak boleh dibagi.

Aldridge
sumber
3
Saya tidak bermaksud terdengar kasar, dan saya mengerti bahasa Inggris mungkin bukan bahasa pertama Anda, tetapi saya tidak mengerti jawaban ini sama sekali, seperti apa yang coba dikatakan. "sesuai" berarti "perjanjian" atau "kesesuaian"; Saya tidak dapat melihat bagaimana ini dapat digunakan dengan "identitas pengguna". Apa maksud Anda "untuk membagi izin"? "bagi" berarti "memisahkan". "Pesanan" siapa? Bagaimana file "diprioritaskan" ketika mereka bukan sesuatu yang dapat bertindak untuk menggunakan hak istimewa apa pun? Saya kira saya agak bisa mengerti "perintah tidak boleh dibagi" dalam konteks pertanyaan ini, tetapi hanya itu. Karena, sepertinya tidak dapat dipecahkan.
JoL
@ JoL Saya pikir "urutan" adalah kesalahan penerjemahan dan harus menjadi "perintah", yang memungkinkan penguraian kalimat yang berbeda. Agak canggung kata untuk menggunakan apa yang ada di jawaban ini sebanyak mungkin: "Saya pikir itu sesuai dengan bagaimana identitas pengguna digunakan untuk memverifikasi izin bahwa izin tidak dibagi sesuai dengan perintah. Hak istimewa adalah tentang file dan pengguna, harus ada jangan terpecah untuk perintah. " Ini masih belum terlalu jelas, tetapi lebih masuk akal bagi saya daripada bagi Anda. Saya harap komentar saya membantu seseorang memahami jawaban ini dan mengeditnya dalam bentuk
hvd