GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengizinkan non-pengguna super untuk memasang sistem file apa pun?

Ada beberapa pendekatan, beberapa di antaranya sebagian besar aman, yang lainnya tidak sama sekali.

Cara yang tidak aman

Biarkan semua penggunaan menjalankan mount , misalnya melalui sudo. Anda mungkin juga memberi mereka root; itu adalah hal yang sama. Pengguna dapat memasang sistem file dengan salinan suid root dari bash —menjalankan yang langsung memberikan root (kemungkinan tanpa logging apa pun, di luar fakta bahwa mount dijalankan).

Sebagai alternatif, pengguna dapat memasang sistem berkasnya sendiri di atas /etc , berisi salinan /etc/shadow miliknya sendiri atau /etc/sudoers , lalu dapatkan root dengan su atau sudo . Atau mungkin bind-mount (mount --bind ) melalui salah satu dari dua file tersebut. Atau file baru ke dalam /etc/sudoers.d .

Serangan serupa dapat dilakukan melalui /etc/pam.d dan banyak tempat lainnya.

Ingatlah bahwa sistem file bahkan tidak perlu ada di perangkat, -o loop akan memasang file yang dimiliki (dan karenanya dapat dimodifikasi) oleh pengguna.

Cara paling aman:udisks atau sejenisnya

Berbagai lingkungan desktop sebenarnya telah membangun solusi untuk ini, untuk memungkinkan pengguna memasang media yang dapat dipindahkan. Mereka bekerja dengan memasang di subdirektori /media hanya dan dengan mematikan dukungan set-user/group-id melalui opsi kernel. Opsi di sini termasuk udisks , udisks2 , pmount , usbmount ,

Jika perlu, Anda dapat menulis skrip Anda sendiri untuk melakukan sesuatu yang serupa, dan menjalankannya melalui sudo—tetapi Anda harus sangat berhati-hati saat menulis skrip ini agar tidak meninggalkan eksploit root. Jika Anda tidak ingin pengguna mengingat sudo, Anda dapat melakukan hal seperti ini dalam skrip:

#!/bin/bash
if [ $UID -ne 0 ]; then       # or `id -u`
    exec sudo -- "$0" "[email protected]"
fi

# rest of script goes here 

Cara yang akan aman suatu hari nanti:ruang nama pengguna

Ruang nama Linux adalah bentuk virtualisasi yang sangat ringan (wadah, untuk lebih spesifik). Secara khusus, dengan ruang nama pengguna, apa saja pengguna pada sistem dapat membuat lingkungan mereka sendiri di mana mereka adalah root. Ini akan memungkinkan mereka untuk me-mount sistem file, kecuali yang telah diblokir secara eksplisit kecuali untuk beberapa sistem file virtual. Akhirnya, sistem file FUSE mungkin akan diizinkan, tetapi tambalan terbaru yang saya temukan tidak mencakup perangkat pemblokiran, hanya hal-hal seperti sshfs.

Selanjutnya, banyak kernel distro (untuk alasan keamanan) secara default tidak mengizinkan pengguna yang tidak memiliki hak untuk menggunakan ruang nama pengguna; misalnya Debian memiliki kernel.unprivileged_userns_clone yang defaultnya adalah 0. Distro lain memiliki pengaturan serupa, meskipun seringkali dengan nama yang sedikit berbeda.

Dokumentasi terbaik yang saya ketahui tentang ruang nama pengguna adalah artikel LWN Ruang nama dalam operasi, bagian 5:Ruang nama pengguna.

Untuk saat ini, saya akan menggunakan udisks2.


Anda dapat melakukannya, tetapi Anda perlu mengubah entri di /etc/fstab sesuai dengan sistem file yang ingin Anda mount, tambahkan flag user ke entri ini. Pengguna non-hak istimewa kemudian dapat memasangnya.

Lihat man mount untuk detail lebih lanjut.


Ini adalah wiki untuk mengonfigurasi polkit aturan untuk udisks/udisks2 untuk memasang partisi dengan grup non-root (mis. pengguna).

Simpan kode di bawah ini ke /etc/polkit-1/rules.d/50-udisks.rules

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // only required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.filesystem-mount-system-internal": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // only required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.filesystem-mount-system": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("users")) {
    return permission[action.id];
  }
});

Asumsikan Anda berada di grup "pengguna", gunakan perintah berikut untuk memasang partisi (tidak perlu sudo).

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1

Linux
  1. Bagaimana Cara Memasang Sistem File, Memetakan Userid?

  2. Bagaimana Mengirim Perintah ke Terminal Apa Pun?

  3. Linux – Bagaimana Cara Memasang Sistem File Jarak Jauh Dengan Menentukan Nomor Port?

  1. Cara Memasang FileSystem Secara Otomatis Menggunakan Systemd

  2. Cara Membuat/Menghapus dan Memasang Sistem File Stratis di CentOS/RHEL 8

  3. Bagaimana cara mendaftarkan tipe sistem file FUSE dengan mount (8) dan fstab?

  1. Bagaimana cara memasang sistem file NTFS, memungkinkan semua pengguna akses penuh?

  2. bagaimana melakukan pengujian sistem file?

  3. Bagaimana cara memasang perangkat di Linux?