Pertanyaan Bagaimana saya bisa membuat kata sandi untuk perintah 'rm'?


Teman saya terus menghapus file saya menggunakan terminal. Jadi tolong bantu saya dengan menjelaskan cara membuat kata sandi rm perintah.


29
2017-12-27 12:25


asal


Anda akan ingin kata sandi melindungi akun pengguna sehingga mereka "teman" tidak mengaksesnya di tempat pertama. - Andrea Lazzarotto
Anda harus benar-benar mencoba untuk mempelajari bagaimana sistem bekerja dan menggunakan fungsinya. - AlexP
Kemungkinan teman-teman Anda mencoba "mengajari Anda pelajaran" dengan bermain-main dengan komputer Anda ketika Anda membiarkannya tidak dijaga. Pelajari pelajaran itu dengan melindungi akun Anda dan tidak mengizinkan akses tamu, atau menyediakan akses tamu dengan izin yang dikurangi. - Ken Williams
Harap juga ingat tentang unlink perintah. Juga tentang mv perintah, karena Anda dapat secara efektif menimpa file dengan itu. Juga... - Kos
Dengan teman-teman seperti ini yang membutuhkan musuh? - kasperd


Jawaban:


Tidak ada cara mudah untuk mengatur kata sandi semacam itu di rm perintah itu sendiri, bukan tanpa banyak hacking kode yang mungkin akan merusak hal-hal seperti itu apt-get menginstal paket dan menghapus file, dan membuat Anda harus memasukkan kata sandi seribu kali, atau berpotensi mengganggu akses ke perintah untuk orang yang akan membutuhkannya (seperti Anda, untuk menghapus file Anda sendiri). Anda dapat mengurutkan ini dengan memiliki beberapa akun pengguna dan beberapa izin akses, dan membatasi akses ke berbagai bagian data, seperti direktori rumah Anda sehingga mereka tidak bisa mendapatkannya.

(Pilihan lainnya adalah akun pengguna individual untuk setiap pengguna, dan kemudian Daftar Kontrol Akses, seperti yang diperinci dalam jawaban lainnya yang diposting oleh Videonauth)

Inilah masalah intinya - Anda membiarkan teman Anda menggunakan sistem Anda. Ini mempunyai banyak sekali implikasi keamanan - konsep "siapa pun yang memiliki akses fisik ke kotak akan dapat mengontrol sistem dan melakukan tugas apa pun" adalah Mantra Keamanan TI, itulah sebabnya Anda tidak 'membagikan' akses sistem fisik kecuali dengan dipercaya personil yang berwenang.


Satu-satunya sungguh Cara yang waras untuk melakukan ini adalah tidak memberi teman Anda akses anda komputer, dan beri mereka "Tamu" sistem "khusus" yang dapat mereka gunakan, bahwa Anda tidak terlalu peduli tentang file pada sebanyak itu. Ini adalah cara paling aman untuk menjaga file Anda tetap aman.


Tentu saja, jika itu bukan pilihan, maka satu-satunya pilihan yang benar-benar aman adalah mengonfigurasi beberapa akun pengguna, satu untuk setiap pengguna, dengan folder rumah yang berbeda, dan tidak memungkinkan mereka mengakses direktori rumah Anda sendiri atau akses ke rumah pengguna lain direktori. Dan kemudian simpan semua yang Anda tidak ingin mereka sentuh di direktori home Anda, dan jangan berikan sudo akses, root kata sandi, atau bagikan kata sandi Anda dengan mereka.

Ini adalah bagaimana Anda akan melakukan ini:

Katakanlah nama saya "Foo" dan saya ingin pengguna "Bar", teman, untuk menggunakan sistem saya tetapi tidak mengakses file saya. Langkah pertama adalah menolak akses ke siapa pun kecuali saya ke direktori home saya. Ini untuk mengizinkan pengguna lain tidak hapus file Anda, tetapi juga mencegah pengguna lain mengintai di direktori home Anda dan melihat jenis barang apa saja yang ada di direktori rumah Anda:

chmod 750 /home/Foo

Langkah kedua adalah membuat akun pengguna untuk "Bar" (jangan ketik apa yang ada di tanda kurung di bawah ini, itu hanya untuk tujuan informasi). Dengan cara ini, kita dapat memastikan dia memiliki hak akses sendiri yang terpisah:

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

Itu ketiga Langkah selanjutnya adalah membatasi direktori rumah mereka juga sehingga tidak ada yang bisa membongkar file mereka. Ini hanya membuat semuanya sama.

sudo chmod 750 /home/Bar

Cuci tangan Anda, bilas dengan baik, kemudian ulangi langkah-langkah ini untuk bagaimanapun banyak pengguna yang Anda miliki di sistem. Mereka tidak akan dapat mengakses file Anda, dan karena Anda tidak akan memberi mereka hak administrator, mereka tidak dapat menghapus file Anda tanpa berusaha untuk sudountuk melakukannya - karena Anda tidak mengizinkan ini, mereka tidak dapat menyentuh barang Anda. Dan mereka tidak akan dapat melihat file Anda, tanpa menjadi superuser, yang tidak akan terjadi di sini.


SELALU INGATLAH INI: Dengan memberi seseorang akses fisik ke mesin, atau akses secara umum, Anda akan menempatkan file dan data Anda dalam bahaya. Ini adalah fakta yang diterima secara luas di dunia Keamanan TI, dan yang terus berlaku. Memberi teman Anda akses ke komputer Anda akan selalu membahayakan data Anda, jadi beri mereka sistem sendiri untuk dipusingkan, atau jangan berikan mereka akses ke anda mesin.


Sekadar catatan tentang enkripsi disk

Sementara enkripsi disk berfungsi dengan baik untuk melindungi data Anda dari pihak ketiga, ada keterbatasan.

  1. Jika sistem aktif, disk sudah didekripsi, jadi Anda berisiko.
  2. Beberapa sistem memilikinya rusak pendekatan enkripsi disk. Misalnya, beberapa sistem Acer menggunakan kata sandi Anda untuk hanya mengotorisasi enkripsi / dekripsi dan menggunakan kata sandi berkode keras, atau menggunakan enkripsi lemah yang mudah retak.
  3. Selalu ada metode untuk membobol tombol ',' atau mencoba untuk mengekstrak mereka dari memori hanya setelah sistem dimatikan tetapi sebelum data RAM 'hilang' atau memburuk. (Saya tidak akan membahas ini secara mendalam, tetapi risiko-risiko ini melakukan ada).
  4. Akses fisik ke mesin, apakah sistem dienkripsi atau tidak, akan selalu membahayakan data Anda. Jangan memberikan akses fisik (atau akses jaringan jarak jauh) kepada orang yang tidak ingin Anda berikan akses penuh ke sistem Anda.

Sementara Enkripsi Disk tidak menyelesaikan masalah ini, itu menempatkan lapisan tambahan sakit kepala untuk seorang aktor ancaman. Seseorang yang jahat akan menyerah jika dienkripsi, atau mereka mungkin menyiksa Anda (antrean wajib XKCD Security strip komik).

Oleh karena itu, jika sistem Anda dienkripsi, tetapi Anda membiarkan pengguna lain menggunakannya, apakah mereka memiliki kata sandi untuk didekripsi, atau Anda meninggalkan laptop Anda didekripsi sehingga mereka dapat SSH dalam atau memiliki akses fisik. Dalam kedua kasus ini, itu buruk.

Yang mengatakan, jika sistem Anda tidak dienkripsi, maka bagian ini tidak memiliki relevansi untuk Anda.


46
2017-12-27 12:40



Laptop saya memiliki hard drive terenkripsi. Apakah mengizinkan orang lain mengakses masih berisiko? - Tim
@Tim Ya, jika sistem dinyalakan dan didekripsi. Dan bahkan ketika itu off, masih mungkin dengan teknologi yang tepat, waktu, dan dedikasi untuk menemukan kunci dekripsi berpotensi masih tersimpan dalam RAM. Enkripsi disk adalah tidak 100% perlindungan - ada banyak hal di sekitarnya, ini lebih merupakan pertanyaan tentang "Apakah orang jahat bersedia benar-benar menghabiskan banyak waktu dan usaha untuk itu". Dan dilihat dari pertanyaan OP, sistem mereka aktif dan tidak dienkripsi (sepenuhnya, atau sebagian) sehingga risiko penghapusan ada di sana. - Thomas Ward♦
@Tim Untuk menambah jawaban Thomas, beberapa laptop telah melanggar implementasi enkripsi disk (jika Anda mengandalkan perangkat keras FDE). AFAIR Acer laptop tidak benar-benar menggunakan kata sandi Anda untuk enkripsi, mereka menggunakannya hanya untuk mengotorisasi mengenkripsi / mendekripsi dengan kata sandi hardcoded. - gronostaj
Data selalu berisiko jika orang yang tidak dipercaya memiliki akses ke sistem, terenkripsi atau tidak - Sergiy Kolodyazhnyy
@LightnessRacesinOrbit apt-get berjalan dpkg, yang mana menjalankan skrip yang sering digunakan rm. Di kotak Xenial saya, cd /var/lib/dpkg/info; grep -P '\brm\b' *inst menghasilkan 344 baris, 333 yang terlihat seperti kegunaan nyata rm perintah - hanya di instalasi skrip. grep -P '\brm\b' *rm menunjukkan lebih banyak lagi dalam skrip penghapusan (untuk menghapus file konfigurasi, bukan file paket). - Eliah Kagan


Ini mungkin tidak benar-benar tentang rm komando, sejak ada cara mudah untuk menghapus file tanpa menggunakannya. Jika masalahnya adalah teman-teman Anda secara tidak sengaja menyalahgunakan rm perintah, maka solusi yang membatasi penggunaan perintah itu secara khusus atau menyebabkannya bekerja dengan cara yang berbeda mungkin bisa membantu. Sebaliknya, jika masalahnya adalah teman-teman Anda dengan sengaja memperlakukan data Anda dengan cara yang tidak Anda inginkan, maka Anda perlu menerapkan tindakan keamanan yang sebenarnya, dan tidak ada solusi yang berfokus pada rm perintah itu sendiri (atau set perintah yang terpisah) akan membuat Anda tetap aman.

Apakah Anda perlu mengontrol akses, atau hanya mencegah kesalahan yang jujur?

Dengan asumsi teman Anda tahu Anda tidak ingin mereka menghapus file Anda, ada dua kemungkinan:

  1. Mereka bisa melakukannya dengan sengaja. Dalam skenario ini, teman-teman Anda dengan sengaja menghapus file Anda, dan Anda bahkan tidak bisa memercayai mereka mencoba untuk memenuhi keinginan Anda tentang bagaimana mereka memperlakukan data Anda ketika mereka menggunakan komputer Anda. Satu-satunya solusi untuk masalah ini adalah untuk menggunakan ukuran keamanan efektif yang sebenarnya, seperti yang dijelaskan Thomas Ward secara detail. Seringkali tindakan terbaik adalah menjaga mereka dari menggunakan komputer Anda. Tetapi membuat mereka menggunakan akun pengguna mereka sendiri dapat memberikan perlindungan.

  2. Mereka bisa melakukannya dengan kesalahan. Dalam skenario ini, teman-teman Anda sangat rawan kecelakaan, dan mereka terus berlari rm perintah yang mereka harapkan tidak mereka lakukan. Mereka ingin memperlakukan Anda dan data Anda dengan hormat, tetapi benar-benar buruk dalam melakukannya karena mereka terus menjalankan perintah yang salah, menghapus file yang salah ... atau sesuatu seperti itu. Meskipun akan menyenangkan untuk percaya bahwa ini adalah apa yang terjadi, saya memperingatkan Anda untuk tidak berasumsi bahwa orang yang terus menghapus data Anda setelah Anda mengatakan kepada mereka untuk berhenti beroperasi tanpa niat buruk.

    Lebih jauh lagi, bahkan jika niat mereka bagus, memberi mereka akun pengguna terpisah masih merupakan cara paling mudah untuk mencegah mereka menghapus file Anda, selain tidak mengizinkan mereka untuk menggunakan komputer Anda.

Jika situasinya benar-benar # 2 - teman-teman Anda tidak mencoba untuk menghapus file Anda tetapi hanya butuh bantuan tanpa sengaja menghapusnya, dan satu-satunya cara mereka secara tidak sengaja menghapusnya adalah melalui penyalahgunaan yang tidak disengaja dari sejumlah kecil perintah (seperti rm) bahwa mereka memiliki masalah khusus menggunakan dengan benar - kemudian teknik dalam Videonauth Jawabannya mungkin berguna. Tetapi Anda harus memahami bahwa itu bukan langkah keamanan, karena itu rm komando hanyalah salah satu dari banyak cara mudah untuk menghapus file. Lihat di bawah untuk detailnya.

Saya sarankan Anda bertanya pada diri sendiri, "Apakah situasi saya pada dasarnya sama seperti jika saya, daripada orang lain yang menggunakan komputer saya, adalah orang yang menggunakan rm salah?"

Jika jawabannya tidak, maka ini adalah masalah keamanan informasi, dan Anda perlu mencegah teman-teman Anda menggunakan akun pengguna Anda. Jika jawabannya iya nih, maka Anda dapat menggunakan pendekatan yang sama yang akan Anda gunakan jika kamu adalah orang yang menyalahgunakan rm:

  • Pendidikan. Teman-teman Anda perlu tahu apa yang mereka lakukan dan bagaimana menghindarinya.
  • Perubahan antarmuka. Tanpa menghilangkan kemampuan sebenarnya untuk menghapus file (yang membutuhkan akun pengguna terpisah), Anda dapat membuatnya lebih sulit tanpa sengaja hapus file dengan membuatnya jadi hanya berjalan rm mengajukan dengan sendirinya, tanpa tindakan lebih lanjut, tidak akan langsung dihapus file. Jawaban Videonauth memberikan satu pendekatan untuk ini. Dalam jawaban ini, saya menyajikan yang lain.

Tetapi bahkan jika teman-teman Anda tidak mencoba melakukan sesuatu yang salah, kamu harus masih pertimbangkan untuk meminta mereka menggunakan akun pengguna terpisah mereka sendiri. Ini masih akan menyelesaikan masalah - langkah keamanan yang sama yang melindungi data dari kehancuran yang disengaja akan melindunginya dari kehancuran yang tidak disengaja juga. Bahkan tanpa niat jahat, jika seseorang terus melakukan sesuatu yang Anda tidak ingin mereka lakukan, maka Anda tidak dapat mempercayai mereka untuk tidak melakukan hal itu.

Membuat rm meminta sebelum penghapusan dapat membantu mencegah beberapa kesalahan.

Untuk membantu orang menghindari tanpa sengaja menghapus file dengan rm, Anda bisa membuatnya rm Sebuah alias shell yang sebenarnya berjalan rm -i. Melewati -i bendera ke rm menyebabkannya untuk meminta pengguna sebelum menghapus setiap file (lihat man rm).

Anda bisa melakukan ini (untuk akun pengguna Anda) dengan menambahkan alias rm='rm -i' untuk Anda .bash_aliases atau .bashrc mengajukan. Lihat pertanyaan ini dan yang itu untuk detailnya. Ini akan berlaku untuk shell bash yang baru Anda buka.

Ini menyediakan tidak ada keamanan yang sebenarnya, dan tidak mudah untuk mencegah kesalahan, karena:

  • Mereka dapat memilih untuk melanjutkan penghapusan, ketika diminta.
  • Mereka dapat melewati alias dengan berbagai cara, termasuk dengan berlari /bin/rm atau menghapusnya (unalias rm).
  • Ada banyak situasi di mana ekspansi alias tidak terjadi, dan dalam situasi ini rm tidak akan dijalankan -i.
  • Mereka masih dapat menghapus file dengan menggunakan salah satu teknik untuk melakukannya sehingga tidak memerlukan rm (Seperti halnya dengan Pendekatan Videonauth -- Lihat di bawah).
  • Mereka masih dapat merusak data tanpa menghapus file apa pun, misalnya dengan menimpanya atau mengubah isinya (seperti halnya dengan pendekatan Videonauth).

Tetapi jika Anda tidak membutuhkan keamanan yang sebenarnya (lihat di atas), maka ini mungkin cara untuk pergi. Dibandingkan dengan pendekatan mencegah teman-teman Anda menggunakan sistem yang disediakan rm perintah:

  • Aliasing rm untuk rm -i kurang efektif dalam mencegah kesalahan - sampai mereka beralih menggunakan beberapa teknik lain untuk menghapus file. Pada saat itu, mencegah mereka menggunakannya rm akan sepenuhnya tidak efektif, bahkan jika mereka tidak mencoba melakukan sesuatu yang salah, karena mungkin mereka akan menggunakannya unlink (atau perintah lain yang tak terhitung jumlahnya yang menghapus file) dengan keserakahan yang sama.

  • Di sisi lain, karena ekspansi alias hanya terjadi dalam beberapa situasi - berbicara kasar, penggunaan interaktif shell biasa - teman-teman Anda mungkin berpikir mereka akan diminta ketika mereka tidak benar-benar diminta (karena perintah tersebut ada di dalam skrip, misalnya, atau dikeluarkan dari shell yang berbeda). Cara Videonauth tidak memiliki masalah ini, yang merupakan keuntungan obyektif dari metode tersebut alias rm='rm -i'.

  • Ketika skrip berjalan, kecuali jika ditulis sengaja untuk menggunakan alias, alias Anda tidak diperluas di dalamnya. Ini berarti bahwa aliasing rm untuk rm -i sangat tidak mungkin memecahkan apa pun. Ini adalah keuntungan obyektif dari alias rm='rm -i'.

rmtidak dapat melakukan apa pun yang tidak bisa dilakukan oleh program biasa lainnya.

Benar-benar tidak ada yang istimewa rm. Ini adalah cara yang nyaman dan mendokumentasikan diri untuk menghapus file, sehingga membatasi akses untuk itu berisiko melanggar banyak skrip yang bergantung padanya. Tetapi jauh dari satu-satunya cara untuk menghapus file - itu hanya sebuah program biasa.

Beberapa perintah melakukan beberapa tugas yang terbatas (tidakakar) pengguna tidak dapat melakukan tanpa menjalankannya. Sebagai contoh, sudo memungkinkan Anda menjalankan program sebagai pengguna lain, setelah memeriksa untuk memastikan Anda diizinkan untuk melakukannya. passwd mengedit basis data tempat kata sandi pengguna disimpan, tetapi hanya memungkinkan Anda mengubah kata sandi Anda sendiri (kecuali Anda root, dalam hal ini Anda dapat mengubah kata sandi siapa pun).

/usr/bin/sudo dan /usr/bin/passwd bisa melakukan itu karena mereka punya bit setuid set, seperti yang ditunjukkan oleh s yang muncul di kolom paling kiri saat Anda menjalankan ls -l:

ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root  60272 Feb 18  2016 /bin/rm
-rwsr-xr-x 1 root root  54256 Mar 29  2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo

Perhatikan itu /bin/rm tidak punya s: izinnya adalah -rwxr-xr-x, sementara /usr/bin/passwd dan /usr/bin/so memiliki -rwsr-xr-x sebagai gantinya. Ini membuatnya begitu, tidak peduli siapa yang berlari passwd atau sudo, sebenarnya berjalan sebagai pengguna root, karena root adalah pemilik executable. (Ada juga bit setgid, yang ketika disetel, menyebabkan file yang dapat dieksekusi dijalankan dengan identitas grup pemilik grup mereka dan bukan dari pemanggil.)

Kecuali untuk setiap kerentanan keamanan yang belum ditemukan (atau yang telah ditemukan tetapi belum ditambal), sudo dan passwd aman karena utilitas tersebut ditulis dengan sangat hati-hati sehingga mereka hanya dapat melakukan hal-hal yang seharusnya diizinkan oleh penelepon.

/bin/rm tidak bekerja dengan cara ini. Ini tidak setuid karena tidak perlu. Izin direktori (dan kadang-kadang izin file) mengontrol file apa yang dapat dihapus oleh pengguna, dan mereka tidak perlu menjadi root untuk melakukannya. Hanya untuk menjadi sangat jelas, tolong jangan pernah mengatur bit setuid pada rm. Implikasi keamanan akan menjadi bencana, sejak saat itu, tidak peduli siapa yang berlari rm, seolah-olah root menjalankannya! (Utilitas suka sudo dan passwd periksa siapa yang benar-benar menjalankannya dan periksa apakah sesuatu diizinkan sebelum melakukannya; rm tidak melakukan hal seperti itu.)

Memeriksa apakah setuid (atau setgid) bit diatur pada eksekusi akan memberi tahu Anda jika membatasi siapa yang dapat menjalankannya memiliki peluang untuk meningkatkan keamanan. Executables yang tidak setuid (atau setgid) tidak memiliki status khusus, dan siapa saja dapat menyalinnya dan menjalankan salinan, membawa salinan mereka sendiri dari komputer lain, menulis skrip atau program yang melakukan hal yang sama, atau menggunakan program lain untuk melakukannya.

Menghapus File Tanpa rm

Cara yang jelas untuk menghapus file tanpa rm di Ubuntu adalah untuk menavigasi ke lokasinya di browser file grafis (Nautilus, jika Anda menggunakan Unity atau GNOME Shell) dan hapus file tersebut. Ada juga banyak perintah yang dapat digunakan untuk menghapus file dari terminal, tanpa pernah menggunakannya rm.

Misalnya, untuk menghapus file bernama foo.txt dalam direktori saat ini, perintah berikut, yang bekerja di luar kotak pada Ubuntu dan tidak memerlukan akses rm, akan mencapai itu. (Hanya untuk memastikan, saya mengujinya sistem minimal 16.04 diinstal hanya dengan utilitas sistem standar, setelah menghapus /bin/rm.)

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")' (python dari pada python3 dalam rilis yang lebih lama)

Daftar itu tentu saja tidak lengkap. Tidak ada daftar lengkap dari perintah tersebut. Mencegah penghapusan file adalah salah satu hal yang memisahkan akun pengguna dan izin file dan direktori yang ada untuk mencapainya. Mereka bekerja sangat baik untuk mencegahnya. Sebaliknya, mengubah rm perintah (untuk membuatnya memerlukan kata sandi, atau dengan cara lain) atau membatasi akses ke rm jangan mencegahnya sama sekali.


19
2017-12-27 19:51



Untuk penggunaan yang sebenarnya, saya suka GNU rm's -I pilihan. Ini meminta hanya menghapus 4 atau lebih file, atau untuk penghapusan rekursif. Jadi Anda tidak terbiasa selalu menggunakannya -f, \rm untuk menghindari ekspansi alias, atau mengetik y tanpa membaca. Tapi itu akan tetap menyelamatkan Anda dari kesalahan ketik yang buruk di mana Anda menekan kembali sebelum Anda bermaksud, atau gumpalan Anda cocok dengan banyak file. - Peter Cordes
Cara lain yang menarik untuk membatalkan tautan file: mv foo.txt /tmp/.gone, lalu reboot, buang tmpfs yang sedang backing /tmp. Atau gunakan saja mv untuk mengganti nama banyak file semuanya menjadi nama yang sama, jadi hanya yang terakhir yang tersisa. Atau cukup sembunyikan file dengan mengganti nama mereka dengan nama yang tidak jelas. Sebagai bagian pertama dari jawaban ini menunjukkan, jika Anda mencoba membela diri dari kebencian daripada ketidakmampuan, Anda hanya perlu mengunci orang-orang dari akun Anda. - Peter Cordes


Anda dapat mengubah izin di /bin/rm perintah melalui baris berikut yang akan mencegahnya dieksekusi tanpa akses sudo:

sudo chmod 750 /bin/rm

Ini secara khusus mencegah mereka menggunakan rm perintah yang disediakan oleh sistem. Anda harus menyadari bahwa itu tidak mencegah mereka dari menghapus file dengan cara lain.

Untuk juga mencegah mereka menggunakan rmdir perintah, yang merupakan cara umum untuk menghapus direktori, Anda dapat mengatur izin dengan cara yang sama pada jalur yang dapat dieksekusi:

sudo chmod 750 /bin/rmdir

Ingatkan bahwa Anda juga hanya dapat menggunakan perintah ini dengan hak sudo juga.

Untuk mengubahnya kembali jika Anda tidak suka atau masalah lain terjadi digunakan 755 untuk chmod


Seperti yang ditunjukkan @muru di atas adalah solusi yang sangat kasar dan bahkan dapat merusak layanan sistem yang tidak berjalan di akar rekening. Oleh karena itu saya tambahkan di sini opsi lain menggunakan ACL (daftar kontrol akses) untuk melakukan hal yang sama dan mungkin jauh lebih aman (bagus untuk dibaca juga dan Anda dapat melewati bagian yang memungkinkan karena ACL biasanya diinstal pada sistem Ubuntu saat ini):

Jadi untuk melakukan hal yang sama seperti di atas hanya untuk pengguna yang ingin Anda blokir

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

Ganti saja <user-name> dengan nama pengguna yang sebenarnya Anda ingin mencegah menggunakan file.

Seperti chmod, menggunakan setfacl -m untuk mencegah pengguna tertentu berlari rm dan rmdir berlaku hanya untuk perintah yang disediakan oleh sistem. Itu tidak membuat mereka menghapus file dan folder Anda di Nautilus atau dengan menggunakan perintah terminal lainnya.

Penjelasan:

  • itu -m berarti bendera untuk memodifikasi file ACL.
  • bagian pertama dari perubahan, itu u singkatan dari pengguna. Ini dapat memiliki nilai-nilai berikut u untuk pengguna, g untuk grup dan o untuk yang lainnya
  • bagian tengah <user-name> dapat menyimpan nama pengguna atau nama grup yang sebenarnya sesuai dengan apa yang ingin Anda ubah. Untuk mengatur perubahan keseluruhan, Anda membiarkannya kosong.
  • bagian ketiga memegang jenis izin yang ingin Anda tetapkan. Di sini, di contoh kami ingin mengatur tidak ada izin sama sekali sehingga kami menempatkan -, bisa juga memuat huruf-huruf berikut r untuk izin baca, w untuk izin menulis dan x untuk eksekusi.

16
2017-12-27 12:40



Akan lebih baik menggunakan ACL daripada menghapus mengeksekusi perizinan untuk orang lain - layanan sistem apa pun yang tidak berjalan sebagai root sekarang cacat. - muru
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir, IIRC. Anda dapat menguji ACL dengan getfacl /bin/rm /bin/rmdir - muru
Satu-satunya downside ke ACL seperti ini adalah jahat / sulit untuk mempertahankan jangka panjang ini. Dan tidak mungkin untuk mempertahankan jika tidak ada pengguna individu pada sistem untuk setiap orang menggunakan sistem. Kalau tidak, itu ide yang bagus. - Thomas Ward♦
@DavidFoerster Ya. Ada cara nomor tidak terbatas yang efektif untuk menghapus file tanpa rm. Solusi Videonauth telah diberikan di sini adalah cara yang mungkin untuk membantu pengguna yang rawan kecelakaan berhenti menghapus hal-hal, tetapi itu tidak memberikan keamanan yang sebenarnya (yang mungkin baik-baik saja, jika teman-teman OP tidak dengan sengaja mencoba untuk menumbangkan keinginan OP). Videonauth: Saya sarankan mengedit posting ini sehingga jelas mengklarifikasi bahwa itu tidak benar-benar mencegah orang dari menghapus file karena mereka tidak memerlukan rm perintah untuk melakukannya. (Saya menahan diri dari mengeditnya sendiri, jika Anda tidak ingin mengatakan itu.) - Eliah Kagan
Jangan lupa bahwa Perl, Python, dan semua kompiler pada sistem memungkinkan pengguna lain untuk menghapus file juga. Mencegah orang dari menghapus file membutuhkan lebih dari sekadar mengubah izin di rm perintah. - Jonathan Leffler


Ini adalah jawaban yang sangat sederhana dan akan menghentikan seseorang dengan santai menggunakan perintah rm tanpa memberikan kata sandi. Ini bukan solusi aman dan Anda harus mengajukan beberapa saran alternatif dalam jawaban lainnya.

Namun, Anda bisa menggunakan alias untuk mengubah cara perintah rm berperilaku. Mencoba:

alias rm="sudo -l >/dev/null && rm"

Apa yang dilakukan adalah ketika seseorang memasuki perintah rm, ia menjalankan perintah sudo-l. Perintah ini memaksa pengguna untuk memasukkan kata sandinya. Jika mereka melakukannya dengan benar, daftar hak istimewa mereka (kami membuang output ini) dan keluar dengan status 0, jika mereka salah, itu ada dengan kesalahan.

Kami kemudian mengikuti perintah sudo dengan "&&", yang keluar dari perintah berikut - dalam hal ini "rm" hanya jika perintah sebelumnya keluar dengan status 0 - yaitu mereka mendapatkan kata sandi yang benar.

Untuk membuatnya permanen, sertakan perintah alias di ~/.bashrc.

Perhatikan ini sangat mudah dikalahkan (misalnya, mereka bisa mengetik /bin/rm.


8
2017-12-27 18:05





Kadang-kadang itu bukan teman kita, kita adalah musuh terburuk kita sendiri

Saya telah menulis skrip untuk melindungi kata sandi rm seperti yang diminta OP tetapi juga dimasukkan ke dalam pengeditan untuk mencegah Anda menghapus secara tidak sengaja:

  • /
  • /rumah
  • /tempat sampah

Edit: Mar 5 2017 - Ubah metode pemeriksaan jika berjalan di terminal.


Buat skripnya

Menggunakan gksu gedit /usr/local/bin/rm dan salin di baris ini:

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

Ubah kata sandi "WE2U" menjadi apa pun yang Anda suka dan simpan file.

Tandai baru rm skrip sebagai dapat dieksekusi

Tandai baru rm skrip sebagai dieksekusi menggunakan:

sudo chmod +x /usr/local/bin/rm

Bagaimana itu bekerja

rm password

Kecuali kata sandinya WE2U, saat pertama kali Anda menjalankan skrip, Anda akan mendapatkan "kata sandi tidak sah" dan kunci enkripsi untuk kata sandi yang Anda masukkan ditampilkan. Salin dan sisipkan kunci enkripsi ini dari terminal ke skrip. Kemudian komentar garis dengan echo yang menampilkan kunci enkripsi pada terminal.

Karena jalannya /usr/local/bin lebih tinggi pada daftar /bin perintah kita rm disebut. Setelah mendapatkan kata sandi yang valid panggilannya /bin/rm untuk melakukan pemindahan sebenarnya.

Sebagai Thomas Ward menunjukkan dalam jawaban lain, jika Anda melakukan sudo apt-get install ... Anda bisa diminta kata sandi seribu kali. Skrip memeriksa jika sudo digunakan dan tidak meminta kata sandi. Selanjutnya jika rm dipanggil dari dalam aplikasi GUI, tidak perlu kata sandi.

Panggilan skrip logger untuk mencatat setiap waktu rm secara manual disebut menggunakan terminal. Penggunaan perintah direkam ke /var/log/syslog.


5
2017-12-30 02:32



Anda dapat menutupi kata sandi dengan hanya menyertakan versi hash di skrip, dan kemudian setiap kali pengguna memasukkan kata sandi, itu bisa saja hash dan periksa dengan hash keras-kode. - InitializeSahib
@InitializeSahib hashed dukungan sandi (enkripsi) telah ditambahkan ke skrip. - WinEunuuchs2Unix


Alternatif lain adalah membuat salinan cadangan file penting di direktori yang tidak dapat diakses oleh pengguna non-root. Anda bisa menggunakannya rsync atau unison untuk menyinkronkannya secara otomatis, cukup pastikan setidaknya satu direktori di jalur ke tujuan pencadangan dimiliki oleh root dan mode 700. Ini akan menghasilkan dua salinan dari semua file. Akan lebih aman jika hanya membuat pengguna tamu untuk mereka gunakan, kecuali Anda memang perlu mengingat untuk selalu mengunci atau keluar sebelum memberi mereka komputer atau meninggalkannya tanpa pengawasan.


3
2017-12-27 14:38



Anda mungkin ingin menunjukkan cara menghindari penghapusan yang disebarkan? Dan idealnya sebuah cara untuk mematikan dan mematikannya sehingga ketika pengguna melakukan sesuatu yang membutuhkan penghapusan permanen, itu permanen. - ajostergaard
@ajostergaard Pemikiran saya adalah bahwa setiap kali dia mendapatkan komputernya kembali dari teman-temannya, dia memeriksa secara manual bahwa tidak ada yang hilang dan mengembalikan apa pun yang ada. Tetapi alat yang saya sukai sendiri serentak digunakan dalam mode interaktif gui, yang membuatnya mudah untuk melihat (dan membalik) penghapusan. - Random832


Bukan jawaban langsung untuk pertanyaan yang Anda cari, tetapi:

Jika teman Anda menghapus file Anda menggunakan rm perintah maka teman-teman Anda tidak kompeten, tersentak, atau mereka BOFH Wannabes yang mencoba mengajarkan Anda untuk tidak meninggalkan sesi Anda login dan tanpa pengawasan. Dalam semua kasus, solusinya sama: jangan biarkan sesi Anda masuk dan tanpa pengawasan.

Ini memiliki keuntungan karena tidak perlu mengingat untuk membuat perubahan khusus pada sistem setiap kali Anda memutakhirkan atau mendapatkan sistem baru, dan juga mencegah skrip dan hal-hal lain yang Anda gunakan yang bergantung pada perintah berperilaku seperti yang diharapkan dari kegagalan dalam cara yang tidak dapat diprediksi.

Ini juga memiliki keuntungan menghentikan "teman" dari pindah ke langkah berikutnya. Apakah Anda juga ingin "kata sandi melindungi" mv perintah jika mereka memutuskan untuk memindahkan file Anda ke / dev / null ketika mereka mengetahui bahwa penghapusan sederhana tidak melakukan apa yang mereka inginkan? Ketika Anda berada dalam permainan seperti ini, satu-satunya langkah kemenangan adalah tidak bermain.


2
2017-12-29 15:32