GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana membiarkan pengguna mengedit file dengan aman menggunakan sudoedit di Linux

Misalkan Anda adalah administrator sistem di perusahaan tempat sebagian besar tim bekerja di Linux dengan hak istimewa terbatas. Sekarang bayangkan situasi di mana anggota salah satu tim - sebagai bagian dari beberapa pekerjaan baru - perlu sering mengedit file yang memerlukan hak pengguna super. Apa yang akan Anda lakukan?

Salah satu opsi adalah memberi mereka akses 'sudo', tetapi itu seperti memberi orang asing akses ke rumah lengkap Anda ketika yang mereka butuhkan hanyalah berada di salah satu kamar Anda - yang saya maksud adalah, akses 'sudo' default akan biarkan mereka melakukan apapun yang membutuhkan hak akses root, ketika yang dibutuhkan hanyalah kemampuan untuk mengedit file sistem tertentu.

Mengingat jenis fleksibilitas yang ditawarkan 'sudo', opsi lain yang Anda miliki adalah mengubah kebijakan 'sudo' sedemikian rupa sehingga hanya hak istimewa untuk mengedit file yang bersangkutan yang diberikan. Misalnya, seperti ini:

%newsudo ALL = vim /path/to/file

Meskipun itu tidak diragukan lagi merupakan solusi yang jauh lebih baik daripada menyediakan akses sudo lengkap, masih ada celah yang dapat dimanfaatkan seseorang.

Untuk memahami apa yang saya bicarakan, pertimbangkan skenario di mana-dalam akses terbatas yang disebutkan di atas disediakan untuk grup, dan seseorang membuka file yang dimaksud untuk diedit menggunakan perintah 'sudo'.

Sekarang, orang yang cerdas dengan pengetahuan yang baik tentang vim akan tahu bahwa mereka dapat meluncurkan shell baru dari dalam editor - yang harus mereka lakukan adalah menjalankan perintah vim berikut:

:shell

Ini akan langsung menempatkan Anda di shell interaktif. Jika Anda mencoba langkah-langkah ini di komputer Anda, cukup jalankan perintah 'whoami' dan Anda akan mengerti celah apa yang saya bicarakan - Ya, Anda berada di shell sebagai root.

Berikut ini contoh tangkapan layar:

Tak perlu dikatakan, tujuan menyediakan akses pengeditan hanya untuk satu file telah dikalahkan, dan pengguna dapat melakukan APA SAJA sekarang.

Mari kita lihat apakah ada pilihan lain yang kita miliki. Ada tag NOEXEC yang dapat Anda gunakan di entri sudoers Anda:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC pada dasarnya memungkinkan Anda untuk mencegah program yang dijalankan oleh sudo menjalankan program lain. Jadi, apakah ini solusi terakhir? Sayangnya tidak. Adapun alasannya, berikut cara manual sudoers menjelaskan tag ini:

noexec

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo's noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
...
...
...
To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.
...
...
...

Jika Anda membaca dengan cermat teks yang disorot dalam huruf tebal, Anda akan tahu bahwa NOEXEC memiliki batasannya sendiri.

Jadi, apa solusi yang paling dapat diandalkan? Nah, ini sudoedit . Bahkan manual sudoers juga merekomendasikan alat ini:

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit adalah perintah bawaan yang memungkinkan pengguna mengedit file dengan aman. Menurut halaman manual sudo, 'sudoedit' sama dengan mengeksekusi 'sudo' dengan opsi baris perintah '-e'.

Mengapa lebih baik

Dengan 'sudoedit', pengguna memiliki pilihan untuk menggunakan editor pilihan mereka - yang tidak seperti solusi yang kami diskusikan di awal tutorial ini di mana pengguna dipaksa untuk menggunakan editor Vim - memungkinkan mereka untuk menikmati penyesuaian mereka sendiri. Dan alasan terbesar dari semuanya, dengan 'sudoedit', pengguna akan mengedit file sebagai diri mereka sendiri, dan bukan 'root'.

Cara kerja Sudoedit

Untuk menggunakan sudoedit, entri dalam sudoers harus, misalnya, seperti ini:

%newsudo ALL = sudoedit /path/to/file

Dan pengguna yang merupakan bagian dari grup 'newsudo' akan dapat mengedit file dengan menjalankan perintah berikut:

sudoedit /path/to/file

Jadi yang akan dilakukan oleh perintah ini adalah, pertama-tama akan membuat salinan sementara dari file yang ingin Anda edit. Kemudian, perintah tersebut akan menelusuri variabel lingkungan SUDO_EDITOR, VISUAL, dan EDITOR (dalam urutan tersebut) untuk menentukan editor mana yang harus dipanggil untuk membuka salinan sementara yang baru saja dibuat. Setelah pengguna selesai dengan pekerjaan modifikasi, perubahan disalin kembali ke file asli.

Berikut penjelasan rinci dari halaman manual perintah 'sudo':

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user's environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

Sekarang, Anda seharusnya sudah memiliki ide dasar tentang 'sudoedit', termasuk kapan menggunakannya, dan mengapa lebih baik menggunakan 'sudo' daripada menggunakan 'sudo' ketika yang Anda inginkan hanyalah mengedit file, atau beberapa file. Tentu saja, seperti alat terkait keamanan lainnya, 'sudoedit' memiliki pangsa eksploitasinya sendiri, tetapi masih merupakan solusi yang direkomendasikan dalam banyak kasus penggunaan.


Linux
  1. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  2. Cara Menulis File Log Di RAM Menggunakan Log2ram Di Linux

  3. Cara menyalin file dengan aman antara host Linux menggunakan SCP dan SFTP

  1. Cara Menemukan Semua Pengguna Sudo Di Linux

  2. Cara Mengganti Nama Banyak File Bersama di Linux Menggunakan 3 Metode

  3. Cara Mengurutkan File di Linux menggunakan Perintah Sortir

  1. Bagaimana melakukan perbandingan file baris demi baris di Linux menggunakan perintah diff

  2. Cara Mentransfer File dengan Aman Menggunakan SCP

  3. Cara Mentransfer file dengan aman menggunakan Perintah SCP di Linux