Bu rm
komutla ilgili olmayabilir , çünkü dosyaları kullanmadan silmek için kolay yollar vardır . Sorun arkadaşlarınızın istemeden yanlışlıkla rm
komutu kötüye kullanması durumunda, bu komutun kullanımını özellikle kısıtlayan veya farklı şekilde çalışmasına neden olan çözümler biraz yardımcı olabilir. Aksine, sorun arkadaşlarınızın kasıtlı olarak verilerinizi istemediğiniz şekilde ele alması ise , gerçek güvenlik önlemleri uygulamanız ve rm
komutun kendisine odaklanan herhangi bir çözüm (veya herhangi bir ayrı komutlar dizisi) uygulamanız gerekmez. Seni güvende tutacağım.
Erişimi denetlemeniz mi yoksa yalnızca dürüst hataları engellemeniz mi gerekiyor?
Arkadaşlarınızın dosyalarınızı silmelerini istemediğinizi bildiğini varsayarsak, iki olasılık vardır:
Bilerek yapabilirlerdi. Bu senaryoda, arkadaşlarınız kasıtlı olarak dosyalarınızı siler ve hatta bilgisayarınızı kullanırken verilerinizi nasıl kullandıklarına ilişkin isteklerine uymaya çalışacaklarına bile güvenemezsiniz . Bu sorunun tek çözümü Thomas Ward'ın ayrıntılı olarak açıkladığı gibi gerçek bir etkili güvenlik önlemi kullanmaktır . Çoğu zaman bu tür bir önlem, bilgisayarınızı kullanmalarını engellemektir. Ancak kendi kullanıcı hesaplarını kullanmalarını sağlamak bazı korumalar sağlayabilir.
Yanlışlıkla yapıyor olabilirler. Bu senaryoda, arkadaşlarınız kazara son derece eğilimlidir ve rm
istememiş oldukları komutları çalıştırmaya devam ederler. Size ve verilerinize saygılı davranmak istiyorlar ancak pratikte bunu yapmakta gerçekten kötüler çünkü yanlış komutu çalıştırıyorlar, yanlış dosyayı siliyorlar ... ya da böyle bir şey. Bunun olup bittiğine inanmak güzel olsa da, verilerinizi susturmaya devam etmelerini durduktan sonra insanların kötü niyetli irade olmadan çalıştıklarını varsaymanıza karşı sizi uyarıyorum.
Ayrıca, niyetleri iyi olsa bile, onlara ayrı kullanıcı hesapları vermek, bilgisayarınızı kullanmalarına izin vermemek yerine, dosyalarınızı silmelerini önlemenin en kolay yoludur.
Durum gerçekten 2. ise - Arkadaşlarınızın değildir çalışırken dosyalarınızı silmek ama sadece değil ihtiyaç yanlışlıkla silmeden, onlar hiç bunları yanlışlıkla silmek tek yolu (gibi komutları az sayıda yanlışlıkla kötüye geçer rm
) Özel olarak doğru kullanmakta zorlandıkları için - Videonauth'un cevabındaki teknikler bir miktar kullanım olabilir. Ama çünkü onlar, güvenlik önlemleri olmadıklarını anlamak gerekir komut sadece biridir birçok silme dosyalara kolay yollarından . Detaylar için aşağıya bakınız.rm
Kendine şunu sormanı tavsiye ederim, "Durumum temelde bilgisayarımı kullanan diğer insanlardan ziyade rm
yanlış kullanan kişi ile aynı mı?"
Eğer cevap hayır , bu bilgiler güvenlik meselesi olduğunu ve kullanıcı hesabınızı kullanarak arkadaşlarınızı engellemek gerek. Cevabınız evet ise, kötüye kullanan kişi olsaydınız kullanacağınız yaklaşımları kullanabilirsiniz rm
:
- Eğitim. Arkadaşlarınızın ne yaptıklarını ve bundan nasıl kaçınacaklarını bilmeleri gerekir.
- Arayüz değişiklikleri. Dosyaları (gerçek kullanıcı hesaplarını gerektiren) silme özelliğini ortadan kaldırmadan, dosyaları yanlışlıkla silmeyi zorlaştırabilir, böylece başka bir işlem yapmadan, yalnızca kendi kendine çalışarak derhal silinmez . Videonauth'un cevabı buna bir yaklaşım getiriyor . Bu cevapta başka bir tane daha sunuyorum.
rm file
file
Ama arkadaşların şey yanlış yapmaya çalışmıyoruz bile, sen gerektiğini hala onlara kendi ayrı kullanıcı hesaplarını kullanmak zorunda düşünün . Bu hala problemi çözecektir - verileri kasıtlı imhalardan koruyan aynı güvenlik önlemleri de onu istemeden imhadan koruyacaktır. Kötü niyetli bir niyet olmasa bile, biri yapmalarını istemediğiniz bir şey yapmaya devam ederse, o şeyi yapmaktan sakınmaları konusunda güvenemezsiniz.
Silmeden rm
önce istemi yapmak , bazı hataların önlenmesine yardımcı olabilir.
İnsanların yanlışlıkla dosyaları silmekten kaçınmasına yardımcı olmak için , gerçekten çalışan bir kabuk takma adırm
yapabilirsiniz . Geçme bayrağı nedenler her dosya (bkz silmeden önce kullanıcıdan ).rm
rm -i
-i
rm
man rm
Sen ekleyerek (kullanıcı hesabınız için) bunu yapabileceğini alias rm='rm -i'
sizin için .bash_aliases
ya da .bashrc
dosyaya. Bkz bu soruyu ve Şunu detayları için. Bu, yeni açılan bash mermileriniz için geçerli olacak.
Bu, gerçek bir güvenlik sağlamaz ve hataları önlemekte de kusursuz değildir, çünkü:
- İstendiğinde silme işlemine devam etmeyi seçebilirler.
- Takma adı çalıştırma
/bin/rm
veya unaliasing ( unalias rm
) dahil olmak üzere çeşitli şekillerde atlayabilirler .
- Diğer ad genişlemenin oluşmadığı birçok durum vardır ve bu durumlarda
rm
çalıştırılmayacaktır -i
.
- Hala gerektirmeyen tekniklerden herhangi birini kullanarak dosyaları silebilirler
rm
( Videonauth'un yaklaşımında olduğu gibi - aşağıya bakınız).
- Üzerine yazma veya başka bir şekilde içeriğini değiştirme gibi herhangi bir dosyayı silmeden verilere zarar verebilirler (Videonauth'un yaklaşımında olduğu gibi).
Fakat gerçek güvenliğe ihtiyacınız yoksa (yukarıya bakın), o zaman bu yol böyle olabilir. Arkadaşlarınızın sistem tarafından sağlanan rm
komutu kullanmalarını önleme yaklaşımına kıyasla :
Takma ad rm
, rm -i
hataları önlemede daha az etkilidir - dosyaları kaldırmak için başka bir teknik kullanmaya devam edene kadar. Bu noktada, onları kullanmaktan alıkoymak rm
, yanlış bir şey yapmaya çalışmasalar bile, tamamen etkisiz olacaktır, çünkü büyük olasılıkla unlink
eşit düşüncesizlikle (veya bir dosyayı kaldıran sayısız komuttan herhangi birini) kullanacaklardır .
Öte yandan, takma adın genişlemesi yalnızca bazı durumlarda ortaya çıkar - kabaca konuşma, kabuğun sıradan etkileşimli kullanımı - arkadaşlarınız gerçekten istenmediğinde sorulacaklarını düşünebilirler (çünkü komut örneğin bir komut dosyası veya farklı bir kabuktan yazılmış). Videonauth'un yolu bu yönteme sahip değil, bu yöntemin nesnel bir avantajı alias rm='rm -i'
.
Bir komut dosyası çalıştırıldığında, takma ad kullanmak için kasıtlı olarak yazılmadığı sürece, takma adlarınız içinde genişletilmez. Aliasing o Bu araçlar rm
için rm -i
herhangi bir şey kırmak için çok olası değildir. Bu, nesnel bir avantajdır alias rm='rm -i'
.
rm
sıradan bir programın yapamadığı mükemmel bir program yapamaz.
Gerçekten özel bir şey yok rm
. Dosyaları kaldırmak için uygun ve kendi kendini belgeleyen bir yöntemdir, bu nedenle erişimi kısıtlamak, ona dayanan çok sayıda komut dosyasını kırma riskini taşır. Ancak dosyaları silmenin tek yolundan çok uzaktır - bu sadece sıradan bir program.
Birkaç komut, sınırlı ( root olmayan ) bir kullanıcının bunları çalıştırmadan gerçekleştiremediği bir görevi yerine getirir. Örneğin, sudo
izin verdiğinizden emin olmak için kontrol ettikten sonra programları başka bir kullanıcı olarak çalıştırmanıza izin verir. passwd
Kullanıcı parolalarının saklandığı veritabanını düzenler, ancak yalnızca kendi parolanızı değiştirmenize izin verir (root olmadıkça, bu durumda herhangi birinin şifresini değiştirebilirsiniz).
/usr/bin/sudo
ve /usr/bin/passwd
bunu, çalıştırdığınızda en soldaki sütunda göründüğü gibi gösterilen setuid bit setine sahip oldukları için yapabilirsiniz :s
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
Uyarı /bin/rm
hiçbir vardır s
onun izinler şunlardır: -rwxr-xr-x
iken /usr/bin/passwd
ve /usr/bin/so
sahip -rwsr-xr-x
yerine. Bu, kimin çalıştığını passwd
ya da çalıştığını sudo
, aslında root kullanıcısı olarak çalıştığını, çünkü çalıştırılabilir dosyanın sahibinin sahibi olmasını sağlar. (Ayarlandığında çalıştırılabilir dosyaların, arayan kişinin yerine grup sahibinin grup kimliği ile çalışmasına neden olan bir setgid biti de vardır.)
Henüz keşfedilmemiş (veya keşfedilmiş ancak henüz yamalanmamış) güvenlik açıkları dışında sudo
ve passwd
bu araçlar güvenlidir çünkü bu araçlar çok dikkatli bir şekilde yazılmıştır, böylece yalnızca arayan kişinin izin vermesi gereken şeyleri yapabilirler yapmak.
/bin/rm
bu şekilde çalışmıyor. Kararlı değil çünkü olması gerekmiyor. Dizin izinleri (ve bazen de dosya izinleri ) bir kullanıcının hangi dosyaları silebileceğini kontrol eder ve bunu yapmak için root olmaları gerekmez. Sadece tamamen net olmak için, lütfen setuid parçasını asla çalıştırmayınrm
. Güvenlik sonuçları feci olurdu, o zamandan beri, kim olursa olsun koşmasın rm
, sanki kök koştu sanki! (Gibi Kamu sudo
ve passwd
kim onları gerçekten çalışıyor kontrol etmek ve o şeyi kontrol bunu yapmadan önce izin verilir; rm
does bir şey yoktur.)
Setuid (veya setgid) bitinin çalıştırılabilir bir dosyada olup olmadığını kontrol etmek, kimin çalıştıracağını kısıtlamanın güvenliği arttırma şansı olduğunu size söyleyecektir. Setuid (veya setgid) olmayan çalıştırmaların özel bir durumu yoktur ve herkes bunları kopyalayıp çalıştırabilir, başka bir makineden kendi kopyasını getirebilir, aynı şeyi yapan bir komut dosyası veya program yazabilir veya kullanabilir Bunu yapmak için başka bir program.
Dosyaları Olmadan Silme rm
rm
Ubuntu'da olmayan bir dosyayı silmenin en açık yolu , grafik dosya tarayıcısındaki konumuna gitmek (Unity veya GNOME Shell kullanıyorsanız Nautilus) ve dosyayı silmek. Bir dosyayı bir terminalden, hiç kullanmadan silmek için kullanılabilecek çok sayıda komut vardır rm
.
Örneğin foo.txt
, geçerli dizinde adı verilen bir dosyayı kaldırmak için , Ubuntu'da kullanıma hazır olan ve erişim gerektirmeyen aşağıdaki komutlar rm
bunu başaracaktır. (Emin olmak için, silme işleminden sonra yalnızca standart sistem yardımcı programlarıyla yüklenen en az 16.04 sistemde test ettim /bin/rm
.)
unlink foo.txt
busybox rm foo.txt
perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
( eski sürümlerde python
yerine python3
)
Bu liste, elbette, hiçbir yere yakın olamaz. Bu tür komutların tam bir listesi mümkün değildir. Dosya silmeyi önlemek, kullanıcı hesaplarını ayırmak ve dosya ve dizin izinlerini elde etmek için var olan şeylerden biridir. Bunu önlemek için çok iyi çalışıyorlar. Buna karşılık, rm
komutu değiştirmek (şifre gerektirmek için veya başka bir şekilde yapmak için) veya erişimi rm
engellememek için erişimi kısıtlamak .