GNU/Linux >> Belajar Linux >  >> Linux

Kembalikan Izin yang Dapat Dieksekusi ke Perintah Chmod Di Linux

Saya menemukan utas diskusi yang menarik di Twitter. Ini tentang pertanyaan Wawancara. Pertanyaannya adalah - Apa yang Anda lakukan jika izin yang dapat dieksekusi dari perintah Chmod terhapus secara tidak sengaja? Seperti yang Anda ketahui, chmod (singkatan dari Ch usia mod e) perintah digunakan untuk mengatur atau mengubah hak akses file atau direktori dalam sistem mirip Unix. Jadi, jika izin eksekusi chmod dihapus, Anda tidak dapat menetapkan izin ke program apa pun, termasuk perintah chmod itu sendiri. Anda sedang duduk di panel wawancara dan pewawancara baru saja menanyakan pertanyaan ini. Jadi, bagaimana Anda mengembalikan izin yang dapat dieksekusi ke perintah chmod di Linux?

"Saya akan menyalin biner chmod dari sistem lain?", Anda mungkin menjawab. Nah, Anda hanya diberikan satu sistem. Jadi Anda tidak dapat menyalin biner chmod dari sistem lain. Anda dapat menjawab lagi, "Saya akan mengatur bit eksekusi dari perl.". Pewawancara mengatakan "Tidak ada juru bahasa di mesin Anda.". Juga tidak ada koneksi Internet/Telepon, maka Anda juga tidak dapat menghubungi siapa pun untuk meminta bantuan. Dalam situasi yang mengerikan seperti itu, bagaimana Anda mengembalikan izin yang dapat dieksekusi dari perintah Chmod? Jika Anda sudah tahu jawabannya, acungkan jempol untuk kecerdasan Anda. Jika Anda bukan pemikir kritis (seperti saya!), silakan baca terus.

Peringatan:

Tolong jangan mencoba untuk menghapus izin eksekusi dari perintah chmod di sistem produksi. Coba ini di VM atau mesin uji. Ini hanya untuk tujuan pendidikan.

Apa yang Anda lakukan jika Anda secara tidak sengaja menghapus izin yang dapat dieksekusi dari perintah Chmod?

Katakanlah Anda secara tidak sengaja menjalankan perintah berikut:

# chmod -x $(which chmod)

Di sini, -x flag akan menghapus izin yang dapat dieksekusi dari program yang diberikan. Dalam kasus kami, ini adalah chmod.

Anda sangat ingin tahu dan Anda benar-benar tidak tahu apa yang akan dilakukan perintah ini. Sekarang Anda kehilangan izin yang dapat dieksekusi dari perintah chmod. Tidak ada cara untuk mengembalikan izin eksekusi chmod lagi. Jika Anda mencoba untuk mengatur izin perintah berikut:

# chmod +x $(which chmod)

Anda akan mendapatkan pesan kesalahan berikut:

bash: /usr/bin/chmod: Permission denied

Bahkan jika Anda keluar dan mencoba dari pengguna sudo lain, Anda tidak dapat menetapkan izin menggunakan perintah chmod:

$ sudo chmod +x $(which chmod)
sudo: chmod: command not found

Bagaimana Anda mengembalikan izin chmod kembali ke aslinya? Yah, ini lebih mudah dari yang Anda pikirkan.

Kembalikan Izin yang Dapat Dieksekusi ke Perintah Chmod Di Linux

Ada beberapa cara untuk mengembalikan izin eksekusi ke chmod. Di sini, saya telah memberikan 7 metode.

Metode 1 - Salin konten biner chmod ke biner lain yang berfungsi

Harap diingat bahwa kami menghapus izin yang dapat dieksekusi dari perintah chmod saja, tetapi bukan izin perintah lain. Benar? Ya! Perintah lain masih memiliki izin yang dapat dieksekusi. Jadi, kita dapat memperbaiki masalah ini dengan menyalin isi perintah chmod ke perintah executable lainnya, misalnya "mkdir", dan mengembalikan izin chmod executable kembali ke aslinya.

Sebelum menyalin, mari kita backup perintah mkdir menggunakan perintah:

# cp /usr/bin/mkdir /usr/bin/mkdir.bak

Selanjutnya salin isi /usr/bin/chmod ke /usr/chmod/mkdir menggunakan perintah "cat":

# cat /usr/bin/chmod > /usr/bin/mkdir

Sekarang, perintah mkdir telah menjadi perintah chmod (karena kita menyalin isi chmod ke biner mkdir).

Dan kemudian, pulihkan izin yang dapat dieksekusi dari biner chmod aktual menggunakan perintah:

# mkdir +x /usr/bin/chmod

Atau, Anda dapat menyalin konten mkdir kembali ke biner chmod:

# mv /usr/bin/mkdir /usr/bin/chmod

Terakhir, pulihkan perintah mkdir asli dari cadangan:

# mv /usr/bin/mkdir.bak /usr/bin/mkdir

Selesai! Kami berhasil memulihkan izin eksekusi ke perintah chmod.

Periksa apakah izin yang dapat dieksekusi dipulihkan dengan perintah "ls":

# ls -l /usr/bin/chmod

Atau,

# ls -l $(which chmod)
-r-xr-xr-x 1 root root 63864 May 27 07:16 /usr/bin/chmod

Perhatikan huruf "x" pada output di atas. Ini menunjukkan izin eksekusi.

Anda juga dapat memverifikasinya dengan menetapkan izin yang dapat dieksekusi ke program lain dengan chmod seperti di bawah ini:

# chmod +x ostechnix.sh
# ls -l
total 0
-rwxr-xr-x 1 root root 0 May 27 07:43 ostechnix.sh

Ini adalah metode termudah karena Anda tidak perlu menghafal apa pun. Kami hanya menyalin isi chmod ke perintah lain menggunakan perintah cat dan kemudian mengembalikan izin eksekusi.

Saya mengujinya di edisi server Ubuntu 20.04. Di distribusi Linux lainnya, file biner chmod mungkin tersedia di /bin/ direktori. Anda dapat menemukan lokasi biner chmod menggunakan perintah berikut:

$ which chmod

Namun, ini bukan hanya caranya. Saya melakukan pencarian Google cepat dan menemukan beberapa metode lagi. Anda mungkin perlu mengingat perintah berikut.

Metode 2 - Menggunakan perintah cp

Ini cara lain untuk mengembalikan izin yang dapat dieksekusi ke chmod.

Dalam metode ini, kami menggunakan perintah "cp" untuk menyalin atribut:

# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod

Metode 3 - menggunakan GNU linker/loader (ld)

Dalam metode ini, Anda dapat menjalankan loader "ld" secara langsung, dan meneruskan perintah yang ingin Anda jalankan seperti di bawah ini:

# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod

Jika Anda menggunakan sistem 32 bit, perintahnya adalah:

$ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod

Jalur ke loader mungkin sangat tergantung pada distribusi Linux yang Anda gunakan. Perintah di atas adalah untuk Ubuntu dan turunannya. Di distro lain, jalurnya mungkin berbeda:

# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod

Metode 4 - Menggunakan setfacl

Kami dapat memulihkan izin eksekusi chmod menggunakan perintah "setfacl".

Pertama, ubah ACL dari file biner chmod untuk pengguna dengan izin baca dan eksekusi:

# setfacl -m u::rx /usr/bin/chmod

Kemudian, pulihkan izin chmod kembali ke aslinya:

# chmod +x $(which chmod)

Terakhir, hapus semua entri ACL dari chmod. Ini opsional.

# setfacl -b /usr/bin/chmod

Jika perintah setfacl tidak tersedia, instal paket "acl". Misalnya, jalankan perintah berikut untuk menginstal acl di Debian, Ubuntu dan turunannya:

# apt install acl

Metode 5 - Menggunakan rsync

Rsync tidak hanya untuk menyalin atau mencadangkan file dan direktori antar sistem. Itu juga dapat digunakan untuk menetapkan izin untuk file juga.

Pertama, mari kita salin file biner chmod ke lokasi /tmp sambil memberikan izin yang dapat dieksekusi untuk semua, yaitu pengguna, grup, dan lainnya:

# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x

Selanjutnya, periksa apakah izin yang dapat dieksekusi ditetapkan ke chmod:

$ ls -l /tmp/chmod

Contoh keluaran:

-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod

Jika izinnya OK, cukup timpa file asli dengan file /tmp/chmod:

# mv /tmp/chmod /usr/bin

Metode 6 - Menggunakan Busybox

Beberapa distribusi Linux terbaru memiliki "Busybox" diinstal secara default. Dari halaman manual Busybox,

BusyBox menggabungkan versi kecil dari banyak utilitas umum UNIX ke dalam satu executable kecil. Ini menyediakan penggantian minimalis untuk sebagian besar utilitas yang biasanya Anda temukan di GNU coreutils, util-linux, dll. Utilitas di BusyBox umumnya memiliki lebih sedikit opsi daripada sepupu GNU berfitur lengkap; namun, opsi yang disertakan menyediakan fungsionalitas yang diharapkan dan berperilaku sangat mirip dengan rekan-rekan GNU mereka.

Untuk memulihkan izin eksekusi Chmod dengan busybox, jalankan:

# busybox chmod +x /usr/bin/chmod

Metode 7 - Menggunakan Perl

Untuk berjaga-jaga jika Perl tersedia di sistem Anda, Anda dapat memperbaiki izin eksekusi Chmod dengan perintah:

# perl -e 'chmod 0755, "/usr/bin/chmod"'

Seperti yang Anda lihat, ini adalah masalah sepele yang dapat dengan mudah diselesaikan oleh pengguna Linux yang cerdas. Jika Anda pengguna Linux pemula atau menengah, Anda mungkin tidak pernah mengetahuinya. Pertanyaan semacam ini mungkin ditanyakan untuk memeriksa keberadaan pikiran orang yang diwawancarai dan bagaimana dia berpikir di luar kebiasaan. Berkat utas Twitter yang disebutkan di atas, saya belajar sesuatu yang berguna hari ini. Semoga bermanfaat bagi Anda juga.

Bacaan terkait:

  • Cara Menemukan File Berdasarkan Izinnya Di Linux
  • Cara Menyalin File Dan Mengubah Kepemilikan, Izin Pada Saat Yang Sama

Linux
  1. Perintah mv Linux

  2. Linux du perintah

  3. Perintah chmod Linux

  1. Perintah ip Linux

  2. Perintah cd Linux

  3. 7 Contoh Perintah Chmod untuk Pemula

  1. Pengenalan perintah chmod Linux

  2. Contoh Perintah Dasar "chmod" di Linux

  3. Linux:Tetapkan izin hanya untuk direktori