'Rm' komutu için nasıl şifre ayarlayabilirim?


29

Arkadaşlarım terminalimi kullanarak dosyalarımı silmeye devam ediyor. Bu yüzden lütfen rmkomut için nasıl şifre oluşturacağınızı açıklayarak bana yardım edin .


50
Kullanıcı hesabını parola ile korumak isteyeceksiniz, böylece "arkadaşlar" ilk etapta erişemez.
Andrea Lazzarotto

14
Sistemin nasıl çalıştığını ve işlevselliğini nasıl kullandığını gerçekten öğrenmelisiniz.
AlexP

13
Korumasız bıraktığınızda arkadaşlarınızla birlikte çalışarak arkadaşlarınızın "size bir ders vermeye" çalışması muhtemeldir. Hesabınızı koruyarak ve konuk erişimine izin vermeyerek veya konuklara daha az izinle izin vererek bu dersi alın.
Ken Williams,

4
Lütfen unlinkkomutu da hatırlayın . Ayrıca mvkomut hakkında, çünkü onunla dosyaların üzerine yazabilirsiniz. Ayrıca ...
Kos,

17
Düşmanlara ihtiyaç duyan bu arkadaşlarla mı?
kasperd

Yanıtlar:


46

rmKomutun üzerinde böyle bir parola oluşturmanın kolay bir yolu yoktur , büyük olasılıkla apt-getpaketleri yüklemek ve dosyaları kaldırmak gibi şeyleri kırabilecek ve parolayı bin kez girmeniz veya potansiyel olarak engellemeniz gerekecek çok fazla kod kırma olmadan insanlara komuta erişim olacaktır (kendi dosyaları silmek için, sizin gibi) olması gerekiyor. Bunu, birden fazla kullanıcı hesabına ve birden fazla erişim izni kümesine sahip olarak ve giriş dizininiz gibi farklı veri bölümlerine erişimi kısıtlayarak erişemez hale getirerek yapabilirsiniz.

(Diğer seçenek, her bir kullanıcı için ayrı ayrı kullanıcı hesapları ve daha sonra Videonauth tarafından gönderilen diğer yanıtta ayrıntılandırıldığı gibi Erişim Kontrol Listeleridir )

İşte temel problem - arkadaşlarınızın sisteminizi kullanmalarına izin veriyorsunuz. Bunun çok sayıda güvenlik etkisi var - “kutuya fiziksel erişimi olan herkes sistemi kontrol edebilecek ve herhangi bir görev yapabilecek” kavramı bir fiziksel güvenlik erişimini paylaşmıyor olmanızın bir IT Güvenlik Mantrasıdır. güvenilir yetkili personel hariç.


Sadece gerçekten bunu yapmak için aklı başında bir yol arkadaşlarınız erişim vermek getirmemektir sizin gerçekten kadar dosyalar umurumda değil ki bilgisayar ve onlara kullanabileceği bir 'adanmış 'Misafir' sistemini' ver. Bu, dosyalarınızı güvende tutmanın en 'güvenli' yoludur.


Elbette, bu bir seçenek değilse, o zaman gerçekten güvenli olan tek seçeneğiniz, her kullanıcı için bir tane olmak üzere farklı giriş klasörleri olan birden fazla kullanıcı hesabını yapılandırmak ve onların kendi giriş dizininize veya başka bir kullanıcının girişine erişmesine izin vermemek dizinleri. Ardından, ana dizininizde dokunmalarını istemediğiniz her şeyi saklayın ve onlara sudoerişim, rootşifre vermeyin veya şifrenizi onlarla paylaşmayın.

Bunu şu şekilde yaparsınız:

Diyelim ki adım "Foo" ve bir arkadaşım "Bar" kullanıcısının sistemimi kullanmasını ancak dosyalarıma erişmesini istemiyorum. İlk adım, benden başka kimseye giriş yapmama izin vermemek. Bu diğer kullanıcıları izin vermektir değil dosyalarınızı silebilir, ama aynı zamanda ev dizininde etrafta geziniyorlar ve malzeme türleri ev dizininde ne var görmesini önlemek diğer kullanıcıların:

chmod 750 /home/Foo

İkinci adım "Bar" için bir kullanıcı hesabı oluşturmaktır (aşağıdaki parantez içinde ne yazmıyor, sadece bilgi amaçlıdır). Bu şekilde, kendi ayrı erişim haklarına sahip olduğundan emin olabiliriz:

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)

Üçüncü aşama kimse de kendi dosyalarına burnunu sokan böylece o zaman çok kendi dizini sınırlamaktır. Bu sadece işleri eşitliyor.

sudo chmod 750 /home/Bar

Ellerinizi yıkayın, iyice durulayın, daha sonra sistemdeki birçok kullanıcı için bu adımları tekrarlayın. Dosyalarınıza erişemezler ve onlara yönetici ayrıcalıkları vermeyeceğiniz için sudo, bunu yapmaya çalışmadan dosyalarınızı silemezler - buna izin vermediğiniz için eşyalarına dokun. Ayrıca, dosyalarınızı süper kullanıcı olmadan da göremezler; bu da burada olmaz.


HER ZAMAN BU UNUTMAYIN: Birine makineye fiziksel erişim veya genel olarak erişim vererek, dosyalarınızı ve verilerinizi riske atarsınız. Bu, BT Güvenliği dünyasında yaygın olarak kabul edilen bir gerçektir ve gerçek olmaya devam etmektedir. Arkadaşlarınızın bilgisayarınıza erişimini sağlamak, verilerinizi her zaman riske sokar, bu yüzden ya karışmalarını sağlamak için kendi sistemlerini verin ya damakinenizeerişmelerini sağlayın .


Disk şifrelemede sadece bir not

Disk şifreleme, verilerinizi üçüncü bir tarafa karşı korumak için iyi çalışsa da, sınırlamalar vardır.

  1. Sistem açıksa, diskin şifresi zaten çözülmüş olduğundan, risk altındasınız demektir.
  2. Bazı sistemlerde disk şifreleme yaklaşımları bozulmuştur . Örneğin, bazı Acer sistemleri şifrenizi yalnızca şifreleme / şifre çözme işlemlerini yetkilendirmek ve kodlanmış şifreleri kullanmak veya kolayca kırılan zayıf şifreleme kullanmak için kullanır.
  3. Her zaman 'anahtarlara' girmenin ya da bir sistem kapatıldıktan hemen sonra ama RAM verileri 'kaybolmadan' veya bozulmadan önce bunları bellekten çıkarmaya çalışmanın yöntemleri vardır. (Bunları üzerinde derinlemesine gitmeyecek, ancak bu riskler do mevcut).
  4. Makineye fiziksel erişim, sistem şifreli olsun veya olmasın, verilerinizi her zaman tehlikeye sokar. Sisteminize potansiyel olarak tam erişim vermek istemediğiniz kişilere fiziksel erişim (veya uzaktan ağ erişimi) vermeyin.

Disk Şifreleme bu sorunları çözmese de, bir tehdit oyuncusu için ekstra baş ağrısı katmanları koyar. Eğer kötü bir adam şifrelenmişse pes edebilir ya da sana işkence edebilir (zorunlu XKCD Güvenlik çizgi roman şeridi ).

Bu nedenle, sisteminiz şifrelenmişse, ancak diğer kullanıcıların kullanmasına izin veriyorsanız, şifresini çözmek için bir şifreleri vardır veya dizüstü bilgisayarınızın şifresini çözerek bırakarak SSH'ye girmelerini veya fiziksel erişimlerini sağlar. Her iki durumda da, bu kötü.

Eğer sisteminiz şifrelenmemişse, o zaman bu bölümün sizinle ilgisi olmadığını söyledi.


Dizüstü bilgisayarımın şifreli bir sabit diski var. Başkalarının erişimine izin vermek hala bir risk midir?
Tim

2
@Tim Evet, sistem açık ve şifresi çözülmüşse. Ve kapalıyken bile, potansiyel olarak hala RAM'da depolanan şifre çözme anahtarlarını bulmak için doğru teknoloji, zaman ve adanmışlıkla hala mümkündür. Disk şifrelemesi % 100 koruma değil - bunun yanında yollar var, daha çok "Kötü adam gerçekten bu kadar zaman ve çaba harcamayı istiyor" sorusudur. Ve OP'nin sorusuna göre, sistemleri açık ve şifrelenmemiş (tamamen veya kısmen) yani silme riski orada.
Thomas Ward

3
@Tim Thomas'ın cevabına eklemek için bazı dizüstü bilgisayarlarda disk şifreleme uygulaması bozuldu (eğer donanım FDE'sine güveniyorsanız). AFAIR Acer dizüstü bilgisayarlar şifrenizi şifrelemek için gerçekten kullanmazlar, şifrelemek için sadece şifreli şifreyle şifrelemek / şifresini çözmek için kullanırlar.
gronostaj

Güvenilmeyen kişi şifreli olsun ya da olmasın bir sisteme erişebiliyorsa, veriler her zaman risk altındadır
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-getçalışırdpkg , sıklıkla kullanılan komut dosyalarını çalıştırırrm . Xenial kutumda, 333'ü komutun gerçek kullanımlarına benzeyen cd /var/lib/dpkg/info; grep -P '\brm\b' *inst344 satır çıktısı alıyorrm - sadece kurulum komut dosyalarında. grep -P '\brm\b' *rmkaldırma komut dosyalarında daha da fazlasını gösterir (paket dosyalarını değil yapılandırma dosyalarını silmek için).
Eliah Kagan

19

Bu rmkomutla ilgili olmayabilir , çünkü dosyaları kullanmadan silmek için kolay yollar vardır . Sorun arkadaşlarınızın istemeden yanlışlıkla rmkomutu 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 rmkomutun 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:

  1. 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.

  2. Yanlışlıkla yapıyor olabilirler. Bu senaryoda, arkadaşlarınız kazara son derece eğilimlidir ve rmistememiş 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 rmyanlış 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 filefile

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 ).rmrm -i-irmman rm

Sen ekleyerek (kullanıcı hesabınız için) bunu yapabileceğini alias rm='rm -i'sizin için .bash_aliasesya da .bashrcdosyaya. 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/rmveya 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 rmkomutu kullanmalarını önleme yaklaşımına kıyasla :

  • Takma ad rm, rm -ihataları ö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 unlinkeş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 rmiçin rm -iherhangi 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, sudoizin verdiğinizden emin olmak için kontrol ettikten sonra programları başka bir kullanıcı olarak çalıştırmanıza izin verir. passwdKullanı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/sudove /usr/bin/passwdbunu, çalıştırdığınızda en soldaki sütunda göründüğü gibi gösterilen setuid bit setine sahip oldukları için yapabilirsiniz :sls -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/rmhiçbir vardır sonun izinler şunlardır: -rwxr-xr-xiken /usr/bin/passwdve /usr/bin/sosahip -rwsr-xr-xyerine. Bu, kimin çalıştığını passwdya 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 sudove passwdbu 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/rmbu ş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 sudove passwdkim onları gerçekten çalışıyor kontrol etmek ve o şeyi kontrol bunu yapmadan önce izin verilir; rmdoes 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

rmUbuntu'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 rmbunu 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 pythonyerine 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, rmkomutu değiştirmek (şifre gerektirmek için veya başka bir şekilde yapmak için) veya erişimi rmengellememek için erişimi kısıtlamak .


2
Gerçek kullanımda, ben GNU gibi İçin rm'ın -Iseçeneği. Yalnızca 4 veya daha fazla dosyayı silmek için veya özyinelemeli silme için ister. Bu yüzden, her zaman kullanma -f, \rmtakma adların genişlemesini önlemek veya yokumadan yazma alışkanlığı edinmezsiniz. Ancak, sizi kastedilmeden önce geri döndürdüğünüz kötü yazım hatalarından veya glob'unuz birçok dosyayla eşleştirmeye devam edecektir.
Peter Cordes,

2
Dosyaların bağlantısını kaldırmanın başka ilginç bir yolu:, mv foo.txt /tmp/.goneardından yedeklemekte olan tmpfs'leri atmak /tmp. Veya mvbirden fazla dosyayı aynı ada göre yeniden adlandırmak için kullanın , bu nedenle yalnızca sonuncusu kaldı. Veya dosyaları gizli adlarla yeniden adlandırarak gizleyebilirsiniz. Bu cevabın ilk kısmının işaret ettiği gibi, yetersizlikten ziyade kötüye karşı savunmaya çalışıyorsanız, insanları hesabınızdan çekmelisiniz.
Peter Cordes

16

Komuttaki izinleri, /bin/rmsudo erişimi olmadan yürütülmesini engelleyen aşağıdaki satırdan değiştirebilirsiniz :

sudo chmod 750 /bin/rm

Bu, özellikle rmsistem tarafından sağlanan komutu kullanmalarını önler . Dosyaları başka yollarla silmelerini engellemediğinin farkında olmalısınız.

rmdirDizinleri silmek için yaygın bir yol olan komutu kullanmalarını da önlemek için izinleri aynı şekilde çalıştırılabilir yolunda ayarlayabilirsiniz:

sudo chmod 750 /bin/rmdir

Bu komutları yalnızca sudo haklarıyla da kullanabileceğinizi hatırlatırız.

Hoşunuza gitmediyse veya diğer sorunların ortaya çıkması durumunda geri değiştirmek 755içinchmod


@Muru'nın belirttiği gibi, yukarıdakiler çok kaba bir çözümdür ve hatta kök hesapta işlemeyen sistem servislerini bile bozabilir . Bu nedenle, aynı ve muhtemelen çok daha güvenli hale getirmek için ACL'yi (erişim kontrol listeleri) kullanarak başka bir seçenek ekliyorum ( okuması iyi ve etkin olan kısmı atlayabilirsiniz, çünkü ACL genellikle bugünlerde Ubuntu sistemlerine kuruludur):

Yani sadece aynısını engellemek istediğiniz kullanıcılar için yukarıdaki gibi yapın.

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

<user-name>Dosyaları kullanmaktan kaçınmak istediğiniz kullanıcı adlarıyla değiştirin .

Olduğu gibi chmod, setfacl -mbelirli kullanıcıların çalışmasını önlemek rmve rmdiryalnızca sistem tarafından sağlanan komutlara uygulamak için kullanılır. Nautilus'ta dosyalarınızı ve klasörlerinizi silmelerini veya diğer terminal komutlarını kullanarak engellememelerini sağlar.

Açıklama:

  • -mbayrak dosyaları ACL değiştirmek anlamına gelir.
  • değişimin ilk kısmı, ukullanıcı anlamına gelir. uKullanıcı, ggrup ve odiğerleri için aşağıdaki değerlere sahip olabilir.
  • orta kısım <user-name>, değiştirmek istediğinize göre gerçek kullanıcı adını veya grup adını tutabilir. Genel değişiklikleri ayarlamak için boş bırakın.
  • Üçüncü kısım, ayarlamak istediğiniz izin türlerini tutar. Buradaki örnekte, hiçbir izin koymamak istiyoruz, böylece koyduğumuz -gibi r, okuma izinleri, wyazma izinleri ve xyürütme için aşağıdaki harfleri de içerebilir .

4
ACL'leri kullanmak, diğerleri için yürütme izinlerini kaldırmaktan daha iyidir - kök olarak çalışmayan herhangi bir sistem hizmeti şimdi engellenmiştir.
muru

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir, IIRC. ACL'yi test edebilirsinizgetfacl /bin/rm /bin/rmdir
muru

2
Bunun gibi ACL'lerin tek dezavantajı, bu uzun vadede kalmanın kötü / zor olmasıdır. Ve sistemi kullanan her kişi için sistemde bireysel kullanıcılar yoksa bakımı da imkansız . Aksi takdirde, bu iyi bir fikir.
Thomas Ward

4
@DavidFoerster Evet. Dosyaları silmek için etkili bir sınırsız sayıda yolu var rm. Burada Videonauth'un sunduğu çözüm, kaza eğilimli kullanıcıların eşya silmelerini durdurmalarına yardımcı olmak için olası bir yoldur, ancak herhangi bir gerçek güvenlik sağlamaz (eğer OP'nin arkadaşları kasıtlı olarak OP'nin isteklerini altüst etmeye çalışmıyorsa ) . Videonauth: Bu gönderiyi düzenlemeyi öneririm, böylece belirgin bir şekilde, insanların bunu yapma rmkomutuna ihtiyaç duymadıkları için dosyaları silmelerini engellemediğini açıklığa kavuşturur . (Söylemek istemiyorsanız diye kendim düzenlemekten
kaçınıyorum

1
Perl, Python ve sistemdeki tüm derleyicilerin diğer kullanıcıların da dosyaları silmesine izin verdiğini unutmayın. İnsanların dosyaları silmelerini önlemek, komuttaki izinleri değiştirmekten daha fazlasını gerektirir rm.
Jonathan Leffler

8

Bu çok basit bir cevaptır ve birisini rm komutunu şifreyle kullanmadan rahatça durduracaktır. Bu güvenli bir çözüm değildir ve diğer önerilerdeki alternatif önerilerin bir kısmına yer vermemelisiniz.

Ancak, rm komutunun davranış şeklini değiştirmek için takma ad kullanabilirsiniz. Deneyin:

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

Bu, birisi rm komutuna girdiğinde, sudo -l komutunu çalıştırır. Bu komut kullanıcıyı parolasını girmeye zorlar. Doğru yaparlarsa, ayrıcalıklarını listeler (bu çıktıyı atarız) ve 0 durumuyla çıkarlar, eğer yanlış yaparlarsa, bir hatayla oluşur.

Daha sonra sudo komutunu, aşağıdaki komuttan çıkan "&&" ile izleriz - bu durumda "rm" sadece önceki komut 0 durumundan çıkarsa - yani şifreyi doğru yapmışsa.

Bunu kalıcı hale getirmek için alias komutunu içine dahil edin ~/.bashrc.

Bunun çok kolay bir şekilde mağlup edildiğine dikkat edin (örneğin, basitçe yazabilirler) /bin/rm.


5

Bazen arkadaşlarımız değil, biz en kötü düşmanımızız.

rmİstenen OP gibi parola korumasına yönelik bir komut dosyası yazdım ancak yanlışlıkla silmenizi engellemek için düzenlemeler de yaptım :

  • /
  • /ev
  • /çöp Kutusu

Düzenleme: Mar 5 2017 - Terminalde çalışıp çalışmadığını kontrol yöntemini değiştirin.


Komut dosyasını oluşturun

gksu gedit /usr/local/bin/rmBu satırlarda kullanın ve kopyalayın:

#!/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

"WE2U" şifresini istediğiniz gibi değiştirin ve dosyayı kaydedin.

Yeni rmbetiği yürütülebilir olarak işaretle

Yeni rmbetiği kullanarak çalıştırılabilir olarak işaretle:

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

Nasıl çalışır

rm şifresi

Şifre WE2U değilse , betiği ilk kez çalıştırdığınızda "geçersiz şifre" alırsınız ve girdiğiniz şifre için şifreleme anahtarı görüntülenir. Bu şifreleme anahtarını kopyalayıp terminalden komut dosyasına yapıştırın. Ardından, terminalde şifreleme anahtarını görüntüleyen yankı ile ilgili satırı yorumlayın.

Çünkü yol /usr/local/bin, listede /binbizim komutumuzdan daha yüksek rm. Geçerli bir şifre aldıktan sonra /bin/rmgerçek kaldırma yapmak için çağırır .

Thomas Ward'ın başka bir cevabı işaret ettiği gibi, eğer bir tane sudo apt-get install ...yapacaksanız sizden şifre için binlerce kez istenebilir. Komut dosyası sudokullanılıp kullanılmadığını kontrol eder ve bir şifre sormaz. Ayrıca rm, GUI uygulaması içinden çağrıldığında şifre gerekmez.

Komut dosyası loggerher seferinde kayıt yapmak rmiçin terminali kullanarak elle çağrılır. Komut kullanımı olarak kaydedilir /var/log/syslog.


1
Şifreye basit bir karma sürümünü dahil ederek şifreyi maskeleyebilir ve daha sonra kullanıcı bir şifre girdiğinde, şifreyi basit bir şekilde kodlayabilir ve kodlanmış karmaya karşı kontrol edebilir.
InitializeSahib

@InitializeSahib şifreli şifreli destek (şifreleme) komut dosyasına eklendi.
WinEunuuchs2Unix

3

Başka bir alternatif, kök olmayan kullanıcıların erişemediği bir dizindeki önemli dosyaların yedek kopyalarını oluşturmaktır. Bunları otomatik olarak senkronize etmek rsyncveya unisonsenkronize etmek için kullanabilirsiniz , sadece yedekleme hedefinin yolundaki en az bir dizinin root ve mode 700'e ait olduğundan emin olun. Bu, tüm dosyaların iki kopyasının olmasına yol açar. Kullanması için yalnızca konuk bir kullanıcı oluşturmak daha güvenli olacaktır; ancak, bilgisayarı vermeden veya gözetimsiz bırakmadan önce her zaman kilitlemeyi veya oturumu kapatmayı unutmayın.


3
Silme işleminin yayılmasının nasıl önleneceğini belirtmek ister misiniz? Ve ideal olarak bunu kapatıp açmanın bir yolu, böylece kullanıcı kalıcı olması için silinmesi gereken bir şey yaptığında, kalıcıdır.
ostergaard,

@ ajostergaard Düşünceme göre, bilgisayarı arkadaşlarından ne zaman geri alırsa, hiçbir şeyin eksik olup olmadığını elle kontrol eder ve olan herhangi bir şeyi geri yükler. Ancak kendi tercih ettiğim araç gui etkileşimli modda kullanılan, silme işlemlerini görmeyi (ve geri almayı) kolaylaştıran ortak.
Random832,

2

Aradığınız soruya doğrudan cevap değil, ama:

Arkadaşlarınız rmkomutu kullanarak dosyalarınızı siliyorsa, ya arkadaşlarınız ya beceriksizdir, gerizekalı ya da oturumlarınızı oturum açmış ve katılımsız bırakmamanızı öğretmeye çalışan BOFH engelleridir. Her durumda, çözüm aynıdır: oturumunuzu oturumda ve gözetimsiz bırakmayın .

Bu, ne zaman yeni bir sistem geliştirirseniz veya yükseltirseniz, sistemde özel değişiklikler yapmayı hatırlamamaya gerek kalmaz ve ayrıca komut dosyalarının ve kullandığınız komutların tahmin edilemeyecek şekilde başarısızlıkla sonuçlanması beklendiği gibi davranmasını önler.

Ayrıca “arkadaşların” bir sonraki adıma geçmelerini engelleme avantajına da sahiptir. mvBasit bir kaldırmanın istediklerini yapmadığını öğrendiklerinde dosyalarınızı / dev / null konumuna taşımaya karar verirlerse, aynı zamanda "parola koruması" da ister misiniz? Böyle bir oyunda olduğunuzda tek kazanan hamle oynamak değildir.


1

Planladığım benzer bir olasılık var. Dosya sunucusunda, fotoğrafların ana depolaması ailedeki bir kişinin (daha az teknik veya kazara) bir şeyleri silebileceği yazılabilirse, dizini taşıyan gui'ye yanlışlıkla sürükleyin veya yeniden adlandırmak yerine düzenlenmiş bir sürümle orijinalin üzerine yazın .

İzinleri herkes için istenmeyen hale getirmeden, buna karşı koruyabileceğimi fark ettim. ZFS, periyodik anlık görüntüleri yapar, böylece yanlışlıkla silme veya üzerine yazma işlemi tersine çevrilebilir. (Bir yedeklemenin aksine, bir anlık görüntü hafiftir ve yazmaya basılarak depolama kullanımınızı çoğaltmaz.)

ZFS FreeBSD'ye özgüdür. Linux ayrıca anlık görüntüleri olan btrfs sahiptir.


0

Çok saçma bir sorun için çok saçma bir geçici çözüm.

Sen istemiyorsan chmod rm, rmdirya mv(için mv filename /dev/null) veya kullanım EKL'lerini, bir şifre kimsenin bir kukla kullanıcı oluşturmak olabilir ama bilen ve takma için her komutu sudo [user]ve sonra arkadaşların bilmiyorum her komut için takma adlar yapmak . Bu sayede, arkadaşlarınız rmsisteme yazarken onlardan bir şifre isteyecektir (ancak şifreyi yanlış tahmin etmek başarısızlıkla sonuçlanan girişimi kaydedecektir) ve hala rmaliasdosyaları silmek için neyi seçerseniz seçin.

Veya yalnızca giriş dizininize erişimi olmayan bir misafir hesabı oluşturabilirsiniz.


Doğru yolda olduğunuz gibi geliyor. Cevabınız, takma adın nasıl ayarlanacağını detaylandırarak geliştirilebilir sudo [user]vedummy user
WinEunuuchs2Unix

0

Rm'nin şifresini korumak istiyorsanız, bir çözüm rm için root ayrıcalıkları gerektiren bir paketleyici yapmak ve aksi takdirde bir şifre istemek olacaktır. (NOT: Bu sarmalayıcı, coreutils paketi güncellendiğinde veya yeniden yüklendiğinde kaybolabilir .) Ayrıca, bunun yalnızca rm'yi koruduğunu, bir dosyayı silmenin hala çok daha fazla yolunun olduğunu unutmayın.


Bir terminal aç ve kök ol. Sonra sudo mv /bin/rm /bin/rmoldeski rm'yi başka bir yere taşımak için koş .

Şimdi sudo nano /bin/rmbir sarmalayıcı oluşturmak için çalıştırın .

Nano'da aşağıdakini yazın:

#!/bin/bash
/bin/rmold "$@"
exit "$?"

Sonra basılı tutun CTRLve Xçıkmak için tuşuna basın . YSizden istendiğinde tuşuna basın , ardından ENTERdosyayı kaydetmek için tuşuna basın .

Son olarak, buna uygun izinleri vermemiz gerekiyor:

sudo chmod a+x /bin/rm

Ve işte gidiyorsun.


1
Çok iyi bir nedeniniz olmadığı sürece, script değişkenleri her zaman alıntılanmalıdır: $@=> "$@". Burada önerdiğiniz şey orijinal ve kasanın çok tehlikeli bir versiyonudur: Ya ( masum kullanıcıları korumak için eklenmiş) rmadlı bir dosya varsa ? foo -i -r *-i
xhienne

"@ $@Xhienne'nin söylediği gibi -quoting'e ek olarak, bir dosyayı silmek için birçok yol bulunduğundan okuyucuları bunun hiçbir güvenlik sağlamadığı konusunda açıkça uyarmanızı tavsiye ederim. Biri aramaktır rmold, ancak diğer cevaplarda ve yorumlarda tartışıldığı gibi çok sayıda başka yollar vardır. (O zaman bile, bu sorunu olacak rmolacak hissetmek o olmadan denir - bu geçerli kullanıcı gibi dosyaları siler gibi sudove normal rm! Arayan olarak çalışır - son zamanlarda ettiyseniz ancak kök olarak yapar sudoed, onlar 'kazandı t onlar bile sistem dosyalarını silerek olabileceğini fark biliyorum değişiklikle ilgili).
Eliah Kagan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.