ฉันจะตั้งรหัสผ่านสำหรับคำสั่ง 'rm' ได้อย่างไร


29

เพื่อนของฉันทำการลบไฟล์ของฉันโดยใช้เทอร์มินัล ดังนั้นโปรดช่วยฉันด้วยการอธิบายวิธีสร้างรหัสผ่านสำหรับrmคำสั่ง


50
คุณจะต้องใช้รหัสผ่านเพื่อป้องกันบัญชีผู้ใช้เพื่อให้ "เพื่อน" เหล่านั้นไม่สามารถเข้าถึงได้ตั้งแต่แรก
Andrea Lazzarotto

14
คุณควรพยายามเรียนรู้วิธีการทำงานของระบบและการใช้งานฟังก์ชั่นของมัน
AlexP

13
อาจเป็นไปได้ว่าเพื่อนของคุณกำลังพยายามที่จะ "สอนบทเรียนให้คุณ" ด้วยการใช้คอมพิวเตอร์ของคุณเมื่อคุณไม่ระวัง เรียนรู้บทเรียนนั้นด้วยการปกป้องบัญชีของคุณและไม่อนุญาตการเข้าถึงของผู้เยี่ยมชมหรือให้สิทธิ์การเข้าถึงแก่แขกที่มีสิทธิ์ลด
Ken Williams

4
โปรดจำไว้เกี่ยวกับunlinkคำสั่งด้วย ยังเกี่ยวกับmvคำสั่งเพราะคุณสามารถเขียนทับไฟล์ได้อย่างมีประสิทธิภาพด้วย อีกทั้ง ...
คอส

17
กับเพื่อน ๆ เช่นนี้ที่ต้องการศัตรู?
kasperd

คำตอบ:


46

ไม่มีวิธีง่ายๆในการตั้งค่ารหัสผ่านบนrmคำสั่งนั้นไม่ใช่การแฮ็ครหัสจำนวนมากที่อาจทำลายสิ่งต่าง ๆ เช่นการapt-getติดตั้งแพคเกจและลบไฟล์และทำให้คุณต้องป้อนรหัสผ่านพันครั้งหรืออาจรบกวน เข้าถึงคำสั่งให้กับผู้ที่จะต้องการมัน (เช่นคุณจะลบไฟล์ของคุณเอง) คุณสามารถจัดเรียงได้โดยมีบัญชีผู้ใช้หลายบัญชีและสิทธิ์การเข้าถึงหลายชุดและ จำกัด การเข้าถึงส่วนต่างๆของข้อมูลเช่นโฮมไดเร็กตอรี่ของคุณเพื่อให้พวกเขาไม่สามารถเข้าถึงได้

(ตัวเลือกอื่นคือบัญชีผู้ใช้แต่ละบัญชีสำหรับผู้ใช้แต่ละคนจากนั้นรายการควบคุมการเข้าถึงตามรายละเอียดในคำตอบอื่น ๆที่โพสต์โดยVideonauth )

นี่คือปัญหาหลัก - คุณปล่อยให้เพื่อนของคุณใช้ระบบของคุณ สิ่งนี้มีผลกระทบด้านความปลอดภัยมากมาย - แนวคิดของ "ใครก็ตามที่สามารถเข้าถึงกล่องได้จะสามารถควบคุมระบบและทำงานต่าง ๆ ได้" คือ IT Security Mantra ซึ่งเป็นเหตุผลว่าทำไมคุณไม่แชร์การเข้าถึงระบบทางกายภาพ ยกเว้นบุคลากรผู้มีอำนาจที่เชื่อถือได้


วิธีเดียวที่มีเหตุผลอย่างแท้จริงในการทำเช่นนี้คือการไม่ให้เพื่อนของคุณเข้าถึงคอมพิวเตอร์ของคุณและให้พวกเขามีระบบ "แขก" โดยเฉพาะ "ที่พวกเขาสามารถใช้งานได้โดยที่คุณไม่สนใจไฟล์มากนัก นี่เป็นวิธีที่ปลอดภัยที่สุดในการทำให้ไฟล์ของคุณปลอดภัย


แน่นอนถ้าไม่ใช่ตัวเลือกตัวเลือกเดียวที่ปลอดภัยจริงๆของคุณคือการกำหนดค่าบัญชีผู้ใช้หลายบัญชีหนึ่งบัญชีสำหรับผู้ใช้แต่ละรายมีโฟลเดอร์บ้านที่แตกต่างกันและไม่อนุญาตให้พวกเขาเข้าถึงโฮมไดเร็กตอรี่ของคุณเอง ไดเรกทอรี จากนั้นให้ทุกสิ่งที่คุณไม่ต้องการให้พวกเขาสัมผัสในโฮมไดเร็กตอรี่ของคุณและไม่ให้พวกเขาsudoเข้าถึงrootรหัสผ่านหรือแชร์รหัสผ่านกับพวกเขา

นี่คือวิธีที่คุณจะทำ:

สมมติว่าชื่อของฉันคือ "Foo" และฉันต้องการให้ผู้ใช้ "บาร์" เพื่อนใช้ระบบของฉัน แต่ไม่สามารถเข้าถึงไฟล์ของฉันได้ ขั้นตอนแรกคือการปฏิเสธการเข้าถึงทุกคนยกเว้นฉันในไดเรกทอรีบ้านของฉัน นี่เป็นการอนุญาตให้ผู้ใช้รายอื่นไม่ลบไฟล์ของคุณ แต่ยังป้องกันไม่ให้ผู้ใช้รายอื่น ๆ สอดแนมในโฮมไดเร็กตอรี่ของคุณและดูประเภทของสิ่งที่คุณมีในโฮมไดเร็กตอรี่ของคุณ:

chmod 750 /home/Foo

ขั้นตอนที่สองคือการสร้างบัญชีผู้ใช้สำหรับ "บาร์" (ห้ามพิมพ์สิ่งที่อยู่ในวงเล็บด้านล่างเพื่อวัตถุประสงค์ในการให้ข้อมูลเท่านั้น) ด้วยวิธีนี้เราสามารถตรวจสอบให้แน่ใจว่าเขามีสิทธิ์การเข้าถึงแยกต่างหาก:

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)

สามขั้นตอนคือการ จำกัด การแล้วไดเรกทอรีบ้านของพวกเขามากเกินไปจึงไม่มีใครสามารถแงะเป็นไฟล์ของพวกเขาอย่างใดอย่างหนึ่ง นี่เป็นสิ่งที่ทำให้เท่าเทียมกัน

sudo chmod 750 /home/Bar

ล้างมือให้สะอาดล้างออกแล้วทำซ้ำขั้นตอนเหล่านี้สำหรับผู้ใช้หลายคนที่คุณมีอยู่ในระบบ พวกเขาจะไม่สามารถเข้าถึงไฟล์ของคุณและเนื่องจากคุณจะไม่ให้สิทธิ์ผู้ดูแลระบบแก่พวกเขาพวกเขาไม่สามารถลบไฟล์ของคุณโดยไม่พยายามsudoทำเช่นนั้น - เนื่องจากคุณไม่อนุญาตให้ทำเช่นนี้ สัมผัสสิ่งของของคุณ และพวกเขาจะไม่สามารถดูไฟล์ของคุณได้เช่นกันโดยไม่ต้องเป็น superuser ซึ่งจะไม่เกิดขึ้นที่นี่


จำไว้เสมอว่า:เมื่อให้ผู้อื่นเข้าถึงเครื่องหรือเข้าถึงโดยทั่วไปคุณจะต้องทำให้ไฟล์และข้อมูลของคุณมีความเสี่ยง นี่เป็นข้อเท็จจริงที่ได้รับการยอมรับอย่างกว้างขวางในโลก IT Security และเป็นสิ่งที่ยังคงเป็นจริง การให้เพื่อนของคุณเข้าถึงคอมพิวเตอร์ของคุณจะทำให้ข้อมูลของคุณตกอยู่ในความเสี่ยงเสมอดังนั้นให้ระบบของพวกเขายุ่งเหยิงกับพวกเขาหรือไม่ให้พวกเขาเข้าถึงเครื่องของคุณ


เพียงบันทึกการเข้ารหัสดิสก์

แม้ว่าการเข้ารหัสดิสก์จะทำงานได้ดีในการปกป้องข้อมูลของคุณจากบุคคลที่สาม แต่ก็มีข้อ จำกัด

  1. หากระบบเปิดอยู่ดิสก์จะถูกถอดรหัสแล้วดังนั้นคุณจึงมีความเสี่ยง
  2. ระบบบางส่วนได้เสียวิธีการเข้ารหัสดิสก์ ตัวอย่างเช่นระบบ Acer บางระบบใช้รหัสผ่านของคุณเพื่ออนุญาตการเข้ารหัส / ถอดรหัสเท่านั้นและใช้รหัสผ่านแบบตายตัวหรือใช้การเข้ารหัสที่อ่อนแอซึ่งสามารถถอดรหัสได้ง่าย
  3. มีวิธีการเจาะเข้าไปใน 'keys' อยู่เสมอหรือพยายามดึงออกมาจากหน่วยความจำหลังจากปิดระบบ แต่ก่อนที่ข้อมูล RAM จะ 'หายไป' หรือเสื่อมสภาพ (ฉันจะไม่ไปในเชิงลึกเกี่ยวกับเหล่านี้ แต่ความเสี่ยงเหล่านี้ทำอยู่)
  4. การเข้าถึงเครื่องทางกายภาพไม่ว่าระบบจะถูกเข้ารหัสหรือไม่ก็ตามจะทำให้ข้อมูลของคุณตกอยู่ในความเสี่ยง อย่าให้การเข้าถึงทางกายภาพ (หรือการเข้าถึงเครือข่ายระยะไกล) กับคนที่คุณไม่ต้องการให้เข้าถึงระบบของคุณได้อย่างเต็มที่

ในขณะที่การเข้ารหัสดิสก์ไม่สามารถแก้ปัญหาเหล่านี้ได้ แต่ก็ทำให้ปวดหัวเป็นชั้น ๆ สำหรับนักแสดงภัยคุกคาม ใครที่เป็นคนเลวอาจให้ขึ้นถ้ามันมีการเข้ารหัสหรือพวกเขาอาจทรมานคุณ (คิวบังคับXKCD การรักษาความปลอดภัยการ์ตูน )

ดังนั้นหากระบบของคุณถูกเข้ารหัส แต่คุณอนุญาตให้ผู้ใช้รายอื่นใช้งานได้พวกเขามีรหัสผ่านเพื่อถอดรหัสหรือคุณออกจากแล็ปท็อปของคุณถอดรหัสเพื่อให้พวกเขาสามารถ SSH หรือเข้าถึงทางกายภาพ ในทั้งสองกรณีนี้มันแย่

ที่กล่าวว่าหากระบบของคุณไม่ได้รับการเข้ารหัสส่วนนี้จะไม่มีความเกี่ยวข้องสำหรับคุณ


แล็ปท็อปของฉันมีฮาร์ดไดรฟ์เข้ารหัส การอนุญาตให้ผู้อื่นเข้าถึงยังคงมีความเสี่ยงอยู่หรือไม่?
ทิม

2
@Tim ใช่ถ้าระบบเปิดและถอดรหัส และแม้ว่าจะปิดอยู่ก็ยังคงเป็นไปได้ด้วยเทคโนโลยีเวลาและการอุทิศตนเพื่อค้นหาคีย์ถอดรหัสที่อาจเก็บอยู่ใน RAM การเข้ารหัสดิสก์ไม่ใช่การป้องกัน 100% - มีวิธีการอยู่รอบตัวมันเป็นคำถามเพิ่มเติมของ "เป็นคนเลวที่เต็มใจที่จะใช้เวลาและความพยายามในการ" และตัดสินโดยคำถามของ OP ระบบของพวกเขาเปิดอยู่และไม่เข้ารหัส (เต็มหรือบางส่วน) ดังนั้นความเสี่ยงในการลบจึงอยู่ที่นั่น
โธมัสวอร์ด

3
@Tim หากต้องการเพิ่มคำตอบของโทมัสแล็ปท็อปบางเครื่องมีการนำการเข้ารหัสดิสก์ไปใช้งานไม่ได้ (หากคุณใช้ฮาร์ดแวร์ FDE) แล็ปท็อปของ AFAIR Acer ไม่ได้ใช้รหัสผ่านของคุณในการเข้ารหัส แต่จะใช้เพื่ออนุญาตการเข้ารหัส / ถอดรหัสด้วยรหัสผ่าน hardcoded เท่านั้น
gronostaj

ข้อมูลมีความเสี่ยงเสมอหากบุคคลที่ไม่น่าเชื่อถือสามารถเข้าถึงระบบเข้ารหัสหรือไม่
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-getทำงานdpkgซึ่งเรียกใช้สคริปต์rmที่มักจะใช้ ในกล่อง Xenial ของฉันcd /var/lib/dpkg/info; grep -P '\brm\b' *instเอาต์พุต 344 บรรทัดซึ่ง 333 ดูเหมือนการใช้rmคำสั่งจริง - ในสคริปต์การติดตั้ง grep -P '\brm\b' *rmแสดงมากขึ้นในสคริปต์ลบ (เพื่อลบไฟล์กำหนดค่าไม่ใช่ไฟล์แพ็คเกจ)
Eliah Kagan

19

นี้อาจไม่ได้จริงๆจะเกี่ยวกับrmคำสั่งตั้งแต่มีวิธีที่ง่ายต่อการลบไฟล์โดยไม่ต้องใช้มัน หากปัญหาคือเพื่อนของคุณใช้rmคำสั่งในทางที่ผิดโดยไม่ตั้งใจดังนั้นวิธีแก้ปัญหาที่ จำกัด การใช้คำสั่งนั้นโดยเฉพาะหรือทำให้มันทำงานในวิธีที่แตกต่างกันอาจเป็นประโยชน์ ในทางตรงกันข้ามหากปัญหาคือว่าเพื่อนของคุณตั้งใจที่จะรักษาข้อมูลของคุณในแบบที่คุณไม่ต้องการคุณจะต้องใช้มาตรการรักษาความปลอดภัยที่แท้จริงและไม่มีวิธีแก้ปัญหาที่มุ่งเน้นไปที่rmคำสั่งเอง (หรือชุดคำสั่งแยก) จะทำให้คุณปลอดภัย

คุณต้องการควบคุมการเข้าถึงหรือเพียงแค่ป้องกันข้อผิดพลาดที่ซื่อสัตย์?

สมมติว่าเพื่อนของคุณรู้ว่าคุณไม่ต้องการให้พวกเขาลบไฟล์ของคุณมีสองวิธี:

  1. พวกเขาสามารถทำได้ตามวัตถุประสงค์ ในสถานการณ์นี้เพื่อนของคุณตั้งใจลบไฟล์ของคุณและคุณไม่สามารถเชื่อใจได้ว่าพวกเขาพยายามที่จะปฏิบัติตามความต้องการของคุณเกี่ยวกับวิธีที่พวกเขาปฏิบัติต่อข้อมูลของคุณเมื่อพวกเขาใช้คอมพิวเตอร์ของคุณ ทางออกเดียวที่จะแก้ไขปัญหานี้คือการใช้มาตรการรักษาความปลอดภัยที่เกิดขึ้นจริงที่มีประสิทธิภาพ , โทมัสวอร์ดได้อธิบายในรายละเอียด บ่อยครั้งที่มาตรการที่ดีที่สุดคือป้องกันไม่ให้ใช้คอมพิวเตอร์ของคุณ แต่การทำให้พวกเขาใช้บัญชีผู้ใช้ของตนเองสามารถให้ความคุ้มครองได้บ้าง

  2. พวกเขาอาจทำผิดพลาด ในสถานการณ์นี้เพื่อนของคุณเกิดอุบัติเหตุได้ง่ายมากและพวกเขายังคงเรียกใช้rmคำสั่งที่พวกเขาต้องการ พวกเขาต้องการที่จะปฏิบัติต่อคุณและข้อมูลของคุณด้วยความเคารพ แต่ในทางปฏิบัตินั้นไม่ดีจริง ๆ เพราะพวกเขาใช้คำสั่งที่ไม่ถูกต้องลบไฟล์ผิด ... หรืออะไรทำนองนั้น แม้ว่าจะเป็นการดีที่จะเชื่อว่านี่คือสิ่งที่เกิดขึ้นฉันขอเตือนคุณว่าสมมติว่าคนที่ลบข้อมูลของคุณต่อไปหลังจากที่คุณบอกให้พวกเขาหยุดทำงานโดยไม่เจตนา

    นอกจากนี้แม้ว่าความตั้งใจของพวกเขาจะดีการให้บัญชีผู้ใช้แยกต่างหากยังคงเป็นวิธีที่ป้องกันไม่ได้ส่วนใหญ่ในการป้องกันไม่ให้ลบไฟล์ของคุณนอกเหนือจากการไม่อนุญาตให้ใช้คอมพิวเตอร์ของคุณ

หากสถานการณ์เป็น # 2 - เพื่อนของคุณไม่ได้พยายามลบไฟล์ของคุณ แต่ต้องการความช่วยเหลือโดยไม่ตั้งใจลบและวิธีเดียวที่พวกเขาตั้งใจลบพวกเขาโดยบังเอิญคือการใช้คำสั่งในทางที่ผิดโดยไม่ตั้งใจ (เช่นrm) พวกเขามีปัญหาในการใช้อย่างถูกต้อง - เทคนิคในคำตอบของ Videonauthอาจเป็นประโยชน์ แต่คุณต้องเข้าใจว่าพวกเขาไม่ได้เป็นมาตรการรักษาความปลอดภัยเพราะคำสั่งเป็นเพียงหนึ่งในหลายวิธีที่ง่ายที่จะลบไฟล์ ดูรายละเอียดด้านล่างrm

ผมขอแนะนำให้คุณถามตัวเองว่า "สถานการณ์ของฉันเป็นเช่นเดียวกับถ้าผมมากกว่าคนอื่น ๆ ที่ใช้คอมพิวเตอร์ของฉันเป็นคนหนึ่งที่ใช้rmอย่างไม่ถูกต้อง?"

หากคำตอบคือไม่แสดงว่านี่เป็นเรื่องของความปลอดภัยของข้อมูลและคุณต้องป้องกันไม่ให้เพื่อนของคุณใช้บัญชีผู้ใช้ของคุณ หากคำตอบคือใช่คุณสามารถใช้วิธีการเดียวกันกับที่คุณใช้หากคุณใช้วิธีที่ผิดrm:

  • การศึกษา. เพื่อนของคุณต้องรู้ว่าพวกเขากำลังทำอะไรและจะหลีกเลี่ยงได้อย่างไร
  • การเปลี่ยนแปลงอินเตอร์เฟซ โดยไม่ต้องสละความสามารถที่แท้จริงลบไฟล์ (ซึ่งจะต้องมีบัญชีผู้ใช้ที่แยกต่างหาก) คุณสามารถทำให้มันยากที่จะเผลอลบไฟล์โดยการทำให้มันดังนั้นเพียงแค่ทำงานด้วยตัวเองโดยไม่ต้องดำเนินการใด ๆ จะไม่ลบทันที คำตอบของ Videonauthให้วิธีการนี้ ในคำตอบนี้ฉันนำเสนออีกrm filefile

แต่ถึงแม้ว่าเพื่อนของคุณไม่ได้พยายามที่จะทำผิดอะไรที่คุณควรจะยังคงพิจารณามีพวกเขาใช้บัญชีผู้ใช้ของตัวเองต่างหาก สิ่งนี้จะยังคงแก้ปัญหา - มาตรการรักษาความปลอดภัยเดียวกับที่ปกป้องข้อมูลจากการถูกทำลายโดยเจตนาจะปกป้องมันจากการทำลายโดยไม่ตั้งใจเช่นกัน แม้จะไม่มีเจตนาร้าย แต่ถ้ามีคนทำในสิ่งที่คุณไม่ต้องการให้ทำคุณก็ไม่สามารถไว้ใจให้พวกเขาละเว้นการทำสิ่งนั้นได้

การดำเนินการrmพรอมต์ก่อนการลบสามารถช่วยป้องกันข้อผิดพลาดได้

เพื่อช่วยให้คนหลีกเลี่ยงไม่ได้ตั้งใจลบไฟล์ที่มีrmคุณสามารถทำให้นามแฝงเปลือกที่จริงวิ่ง การส่งแฟล็กเพื่อให้ผู้ใช้แจ้งก่อนลบแต่ละไฟล์ (ดู)rmrm -i-irmman rm

คุณสามารถทำได้ (สำหรับบัญชีผู้ใช้ของคุณ) โดยเพิ่มalias rm='rm -i'ลงในไฟล์.bash_aliasesหรือ .bashrcดูคำถามนี้และที่หนึ่งสำหรับรายละเอียด สิ่งนี้จะมีผลสำหรับ bash shell ที่เพิ่งเปิดใหม่

สิ่งนี้ไม่ให้ความปลอดภัยที่แท้จริงและไม่สามารถป้องกันความผิดพลาดได้เนื่องจาก:

  • พวกเขาสามารถเลือกที่จะไปข้างหน้าด้วยการลบเมื่อได้รับแจ้ง
  • พวกเขาสามารถข้ามนามแฝงได้หลายวิธีรวมถึงโดยการเรียกใช้/bin/rmหรือยกเลิกการลบล้าง ( unalias rm)
  • มีหลาย ๆ สถานการณ์ที่ขยายตัวนามแฝงไม่ได้เกิดขึ้นเป็นและในสถานการณ์เหล่านี้จะไม่ได้ทำงานด้วยrm-i
  • พวกเขายังสามารถลบไฟล์ได้โดยใช้เทคนิคใด ๆ ที่ไม่จำเป็นrm(เช่นในกรณีของวิธีการของ Videonauth - ดูด้านล่าง)
  • พวกเขายังสามารถสร้างความเสียหายข้อมูลโดยไม่ต้องลบไฟล์ใด ๆ เช่นโดยการเขียนทับพวกเขาหรือเปลี่ยนแปลงเนื้อหาของพวกเขา (เช่นในกรณีของแนวทางของ Videonauth)

แต่ถ้าคุณไม่ต้องการความปลอดภัยที่แท้จริง (ดูด้านบน) นี่อาจเป็นวิธีที่จะไป โดยเปรียบเทียบกับวิธีการป้องกันไม่ให้เพื่อนของคุณใช้rmคำสั่งที่ระบบจัดเตรียมไว้ให้:

  • การใช้นามแฝงrmถึงrm -iมีประสิทธิภาพน้อยกว่าในการป้องกันข้อผิดพลาด - จนกว่าจะใช้เทคนิคอื่นเพื่อลบไฟล์ ณ จุดนั้นการป้องกันไม่ให้ผู้ใช้ใช้งานrmจะไม่ได้ผลทั้งหมดแม้ว่าพวกเขาจะไม่พยายามทำอะไรผิดก็ตามเนื่องจากสันนิษฐานว่าพวกเขาจะใช้unlink(หรือคำสั่งอื่น ๆ นับไม่ถ้วนที่ลบไฟล์) ด้วยความไร้ความคิดเท่ากัน

  • ในอีกทางหนึ่งเนื่องจากการขยายนามแฝงเกิดขึ้นในบางสถานการณ์เท่านั้น - การพูดโดยทั่วไปการใช้เชลล์แบบโต้ตอบโดยทั่วไป - เพื่อนของคุณอาจคิดว่าพวกเขากำลังได้รับแจ้งเมื่อไม่ได้รับการแจ้งเตือนจริง ๆ (เนื่องจากคำสั่งอยู่ใน ตัวอย่างเช่นสคริปต์หรือออกจากเปลือกที่แตกต่างกัน) วิธีของ Videonauthไม่มีปัญหานี้ซึ่งเป็นข้อได้เปรียบตามวัตถุประสงค์ของวิธีการalias rm='rm -i'นั้น

  • เมื่อสคริปต์ทำงานยกเว้นว่ามีการเขียนโดยเจตนาให้ใช้นามแฝงนามแฝงของคุณจะไม่ถูกขยายเข้าไป ซึ่งหมายความว่า aliasing rmจะrm -iมากไม่น่าจะผิดอะไร alias rm='rm -i'นี้เป็นข้อได้เปรียบวัตถุประสงค์ของ

rm ไม่สามารถทำสิ่งใด ๆ ที่โปรแกรมปกติสมบูรณ์แบบอื่น ๆ ไม่สามารถทำได้

rmมีจริงๆไม่มีอะไรพิเศษเกี่ยวกับ มันเป็นวิธีที่สะดวกและการจัดทำเอกสารด้วยตนเองในการลบไฟล์ดังนั้นการ จำกัด การเข้าถึงไฟล์จึงเสี่ยงต่อการทำลายสคริปต์จำนวนมากที่ต้องใช้ แต่มันอยู่ไกลจากวิธีเดียวในการลบไฟล์ - เป็นเพียงโปรแกรมทั่วไป

คำสั่งสองสามคำสั่งทำงานบางอย่างที่ผู้ใช้ที่ จำกัด (ไม่ใช่ผู้ใช้root ) ไม่สามารถดำเนินการได้หากไม่ได้ทำงาน ตัวอย่างเช่นsudoให้คุณเรียกใช้โปรแกรมในฐานะผู้ใช้รายอื่นหลังจากตรวจสอบเพื่อให้แน่ใจว่าคุณได้รับอนุญาต passwdแก้ไขฐานข้อมูลที่จัดเก็บรหัสผ่านของผู้ใช้ แต่ให้คุณเปลี่ยนรหัสผ่านของคุณเองเท่านั้น (เว้นแต่ว่าคุณรูทซึ่งในกรณีนี้คุณสามารถเปลี่ยนรหัสผ่านของใครก็ได้)

/usr/bin/sudoและ/usr/bin/passwdสามารถทำได้เนื่องจากมีsetuid bit set ดัง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

ขอให้สังเกตว่า/bin/rmไม่มีs: สิทธิ์ของมันคือ-rwxr-xr-xในขณะที่/usr/bin/passwdและ/usr/bin/soมี-rwsr-xr-xแทน สิ่งนี้ทำให้มันไม่ว่าใครจะทำงานpasswdหรือsudoมันทำงานได้จริงในฐานะผู้ใช้รูทเนื่องจากรูทเป็นเจ้าของไฟล์ปฏิบัติการ (นอกจากนี้ยังมีบิต setgid ซึ่งเมื่อตั้งค่าจะทำให้ไฟล์ปฏิบัติการรันด้วยข้อมูลประจำตัวกลุ่มของเจ้าของกลุ่มแทนที่จะเป็นของผู้โทร)

ยกเว้นช่องโหว่ความปลอดภัยที่ยังไม่ได้ค้นพบ (หรือที่ถูกค้นพบ แต่ยังไม่ได้รับการแก้ไข) sudoและpasswdมีความปลอดภัยเพราะยูทิลิตี้เหล่านั้นเขียนอย่างระมัดระวังเพื่อให้พวกเขาสามารถทำสิ่งที่ผู้โทรควรได้รับอนุญาตเท่านั้น ทำ.

/bin/rmไม่ทำงานด้วยวิธีนี้ มันไม่ได้ setuid เพราะมันไม่จำเป็นต้องเป็น สิทธิ์ไดเรกทอรี (และสิทธิ์ไฟล์บางครั้ง ) ควบคุมไฟล์ที่ผู้ใช้สามารถลบได้และไม่จำเป็นต้องกลายเป็นรูทเพื่อทำ เพียงเพื่อจะชัดเจนสมบูรณ์โปรดอย่าที่เคยตั้งค่าบิต setuid rmบน ผลกระทบด้านความปลอดภัยจะเป็นหายนะนับ แต่นั้นมาไม่ว่าใครจะวิ่งrmมันก็เหมือนกับว่ารูทวิ่งมา! (ยูทิลิตี้ที่ชอบsudoและpasswdตรวจสอบว่าใครกำลังใช้งานพวกเขาจริงๆและตรวจสอบว่ามีบางอย่างที่ได้รับอนุญาตก่อนที่จะทำมัน; rmไม่ทำสิ่งนั้น)

การตรวจสอบว่าบิต setuid (หรือ setgid) ถูกตั้งค่าบนตัวประมวลผลจะบอกคุณหรือไม่ว่าการ จำกัด ผู้ที่อาจเรียกใช้นั้นมีโอกาสในการปรับปรุงความปลอดภัยหรือไม่ ปฏิบัติการที่ไม่ได้ setuid (หรือ setgid) ไม่มีสถานะพิเศษและทุกคนสามารถคัดลอกและเรียกใช้สำเนานำสำเนาของตนเองจากเครื่องอื่นเขียนสคริปต์หรือโปรแกรมที่ทำสิ่งเดียวกันหรือใช้ โปรแกรมอื่นที่จะทำ

การลบไฟล์โดย rm

วิธีที่ชัดเจนในการลบไฟล์ที่ไม่มีrmใน Ubuntu คือการนำทางไปยังตำแหน่งในเบราว์เซอร์ไฟล์กราฟิก (Nautilus หากคุณใช้ Unity หรือ GNOME Shell) แล้วลบไฟล์ rmนอกจากนี้ยังมีคำสั่งจำนวนมากที่สามารถใช้ในการลบไฟล์จากขั้วโดยไม่เคยใช้

ตัวอย่างเช่นหากต้องการลบไฟล์ที่เรียกว่าfoo.txtในไดเรกทอรีปัจจุบันคำสั่งต่อไปนี้ซึ่งทำงานนอกกรอบบน Ubuntu และไม่จำเป็นต้องเข้าถึงrmจะทำได้ (เพียงเพื่อให้แน่ใจว่าฉันทดสอบพวกเขาในระบบขั้นต่ำ 16.04ติดตั้งกับสาธารณูปโภคระบบมาตรฐานเพียงหลังจากการลบ/bin/rm)

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")'( pythonแทนที่จะเป็นpython3รุ่นเก่ากว่า)

แน่นอนว่ารายการนั้นไม่มีที่ไหนใกล้เสร็จสมบูรณ์ ไม่สามารถทำรายการคำสั่งทั้งหมดได้ การป้องกันการลบไฟล์เป็นหนึ่งในสิ่งที่แยกบัญชีผู้ใช้และสิทธิ์ของไฟล์และไดเรกทอรีที่มีอยู่เพื่อให้บรรลุ พวกเขาทำงานได้ดีมากเพื่อป้องกัน ในทางตรงกันข้ามการเปลี่ยนrmคำสั่ง (เพื่อให้ต้องใช้รหัสผ่านหรือวิธีอื่นใด) หรือ จำกัด การเข้าถึงเพื่อrmไม่ให้ป้องกันเลย


2
สำหรับการใช้งานจริงฉันชอบตัวเลือกrmของGNU -Iมันพร้อมท์สำหรับการลบ 4 ไฟล์ขึ้นไปหรือสำหรับการลบซ้ำ ดังนั้นคุณจึงไม่ได้รับในนิสัยของเสมอใช้-f, \rmเพื่อหลีกเลี่ยงการขยายตัวนามแฝงหรือพิมพ์yโดยไม่ต้องอ่าน แต่มันจะช่วยคุณให้รอดพ้นจากการพิมพ์ผิดที่คุณต้องตีย้อนกลับไปก่อนที่คุณจะตั้งใจหรือคุณจะจับคู่ไฟล์จำนวนมาก
Peter Cordes

2
อีกวิธีที่น่าสนใจในการยกเลิกการลิงก์ไฟล์: mv foo.txt /tmp/.goneจากนั้นรีบูตทิ้ง tmpfs ที่สำรอง/tmpไว้ หรือใช้mvเพื่อเปลี่ยนชื่อไฟล์หลาย ๆ ไฟล์ให้เป็นชื่อเดียวกันดังนั้นจึงเหลือเพียงไฟล์เดียวเท่านั้น หรือเพียงแค่ซ่อนไฟล์ด้วยการเปลี่ยนชื่อไฟล์ด้วยชื่อที่ไม่ชัดเจน ดังที่ส่วนแรกของคำตอบนี้ชี้ให้เห็นว่าหากคุณพยายามป้องกันความอาฆาตพยาบาทแทนที่จะเป็นคนไร้ความสามารถคุณจะต้องล็อคคนให้พ้นจากบัญชีของคุณ
Peter Cordes

16

คุณสามารถเปลี่ยนการอนุญาตใน/bin/rmคำสั่งผ่านบรรทัดต่อไปนี้ซึ่งจะป้องกันไม่ให้มีการดำเนินการโดยไม่ต้องเข้าถึง sudo:

sudo chmod 750 /bin/rm

สิ่งนี้จะป้องกันไม่ให้พวกเขาใช้rmคำสั่งจากระบบ คุณควรระวังว่ามันไม่ได้ป้องกันการลบไฟล์ด้วยวิธีอื่น

ในการป้องกันไม่ให้ใช้rmdirคำสั่งซึ่งเป็นวิธีการทั่วไปในการลบไดเรกทอรีคุณสามารถตั้งค่าการอนุญาตในลักษณะเดียวกันบนพา ธ ที่สามารถใช้งานได้:

sudo chmod 750 /bin/rmdir

เตือนว่าเช่นกันคุณสามารถใช้คำสั่งนี้กับสิทธิ์ sudo เท่านั้น

หากต้องการเปลี่ยนกลับหากคุณไม่ชอบหรือปัญหาอื่น ๆ เกิดขึ้นใช้755สำหรับchmod


ในฐานะที่เป็น @muru ชี้ให้เห็นข้างต้นเป็นโซลูชั่นที่หยาบมากและอาจหยุดบริการระบบที่ไม่ได้ทำงานบนบัญชีรูท ดังนั้นฉันจึงเพิ่มตัวเลือกอื่นที่นี่โดยใช้ ACL (รายการควบคุมการเข้าถึง) เพื่อทำสิ่งเดียวกันและอาจจะปลอดภัยกว่า ( อ่านได้ดีและคุณสามารถข้ามส่วนที่เปิดใช้งานได้เนื่องจาก ACL มักติดตั้งบนระบบ Ubuntu ในปัจจุบัน):

ดังนั้นการทำเช่นเดียวกับข้างต้นเพียงสำหรับผู้ใช้ที่คุณต้องการจะบล็อก

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

เพียงแทนที่<user-name>ด้วยชื่อผู้ใช้จริงที่คุณต้องการป้องกันการใช้ไฟล์

เช่นเดียวกับการchmodใช้setfacl -mเพื่อป้องกันผู้ใช้ที่ระบุไม่ให้รันrmและrmdirใช้กับคำสั่งที่ระบบจัดเตรียมไว้เท่านั้น มันไม่ได้ป้องกันพวกเขาจากการลบไฟล์และโฟลเดอร์ของคุณใน Nautilus หรือโดยใช้คำสั่งเทอร์มินัลอื่น ๆ

คำอธิบาย:

  • -mธงหมายถึงการปรับเปลี่ยนไฟล์ ACL
  • ส่วนแรกของการเปลี่ยนแปลงuหมายถึงผู้ใช้ สามารถมีค่าต่อไปนี้uสำหรับผู้ใช้gสำหรับกลุ่มและoสำหรับคนอื่น ๆ ทั้งหมด
  • ส่วนตรงกลาง<user-name>สามารถโฮลชื่อผู้ใช้จริงหรือชื่อกลุ่มตามสิ่งที่คุณต้องการเปลี่ยนแปลง ในการตั้งค่าการเปลี่ยนแปลงโดยรวมคุณปล่อยให้มันว่างเปล่า
  • ส่วนที่สามเก็บประเภทของสิทธิ์ที่คุณต้องการตั้งค่า ในตัวอย่างนี้เราไม่ต้องการตั้งค่าการอนุญาตเลยดังนั้นเรา-จึงสามารถใส่ตัวอักษรต่อไปนี้rสำหรับการอ่านการอนุญาตwการเขียนและxการดำเนินการ

4
มันจะเป็นการดีกว่าถ้าจะใช้ ACLs มากกว่าลบการอนุญาตให้เรียกใช้งานสำหรับผู้อื่น - บริการของระบบใด ๆ ที่ไม่ทำงานเนื่องจากรูทไม่สามารถใช้งานได้
muru

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdirIIRC คุณสามารถทดสอบ ACL ด้วยgetfacl /bin/rm /bin/rmdir
muru

2
ข้อเสียเพียงอย่างเดียวของ ACL เช่นนี้คือความชั่วร้าย / ยุ่งยากในการรักษาระยะยาวเหล่านี้ และเป็นไปไม่ได้ที่จะรักษาหากไม่มีผู้ใช้แต่ละคนในระบบสำหรับแต่ละคนที่ใช้ระบบ มิฉะนั้นมันเป็นความคิดที่ดี
โธมัสวอร์ด

4
@DavidFoerster ใช่ มีวิธีที่ไม่ จำกัด rmจำนวนได้อย่างมีประสิทธิภาพในการลบไฟล์โดยไม่ต้องเป็น วิธีการแก้ Videonauth ได้ให้ที่นี่เป็นวิธีที่เป็นไปได้เพื่อช่วยให้ผู้ใช้เกิดอุบัติเหตุได้ง่ายหยุดการลบสิ่งที่ แต่ก็ไม่ได้ให้การรักษาความปลอดภัยที่เกิดขึ้นจริงใด ๆ (ซึ่งอาจจะไม่เป็นไรถ้าเพื่อนของ OP จะไม่ได้จงใจพยายามที่จะล้มล้างความปรารถนาของ OP) . Videonauth: ฉันขอแนะนำให้แก้ไขโพสต์นี้เพื่อให้ชัดเจนว่ามันไม่ได้ป้องกันผู้คนจากการลบไฟล์เพราะพวกเขาไม่ต้องการrmคำสั่งให้ทำ (ฉันละเว้นการแก้ไขด้วยตนเองในกรณีที่คุณไม่ต้องการพูดอย่างนั้น)
Eliah Kagan

1
อย่าลืมว่า Perl, Python และคอมไพเลอร์ทั้งหมดในระบบทำให้ผู้ใช้รายอื่นสามารถลบไฟล์ได้เช่นกัน การป้องกันผู้คนจากการลบไฟล์ต้องการมากกว่าแค่การเปลี่ยนการอนุญาตในrmคำสั่ง
Jonathan Leffler

8

นี่เป็นคำตอบที่ง่ายมากและจะหยุดบางคนโดยใช้คำสั่ง rm โดยไม่ต้องให้รหัสผ่าน มันไม่ใช่โซลูชันที่ปลอดภัยและคุณควรใช้คำแนะนำอื่นในคำตอบอื่น

อย่างไรก็ตามคุณสามารถใช้นามแฝงเพื่อเปลี่ยนวิธีการทำงานของคำสั่ง rm ลอง:

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

สิ่งนี้จะเกิดขึ้นเมื่อมีคนป้อนคำสั่ง rm จะรันคำสั่ง sudo -l คำสั่งนี้บังคับให้ผู้ใช้ป้อนรหัสผ่าน หากพวกเขาทำให้ถูกต้องมันจะแสดงรายการสิทธิ์ของพวกเขา (เราจะลบล้างเอาต์พุตนี้) และออกจากสถานะ 0 หากพวกเขาทำผิดมันจะมีข้อผิดพลาดอยู่

จากนั้นเราปฏิบัติตามคำสั่ง sudo ด้วย "&&" ซึ่งออกจากคำสั่งต่อไปนี้ - ในกรณีนี้ "rm" เฉพาะเมื่อคำสั่งก่อนหน้าออกจากสถานะ 0 - นั่นคือพวกเขาได้รับรหัสผ่านที่ถูกต้อง

~/.bashrcที่จะทำให้ถาวรนี้รวมถึงคำสั่งนามแฝงใน

โปรดทราบว่านี่เป็นวิธีที่พ่ายแพ้ได้ง่ายมาก (ตัวอย่างเช่นพวกเขาสามารถพิมพ์/bin/rmได้อย่างง่ายดาย


5

บางครั้งมันไม่ใช่เพื่อนของเราเราเป็นศัตรูที่เลวร้ายที่สุดของเราเอง

ฉันได้เขียนสคริปต์เพื่อป้องกันรหัสผ่านrmเช่น OP ร้องขอ แต่ยังแก้ไขเพื่อป้องกันคุณจากการลบโดยไม่ตั้งใจ:

  • /
  • /บ้าน
  • / bin

แก้ไข: 5 มีนาคม 2017 - เปลี่ยนวิธีการตรวจสอบว่าทำงานใน terminal


สร้างสคริปต์

ใช้gksu gedit /usr/local/bin/rmและคัดลอกในบรรทัดเหล่านี้:

#!/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" เป็นทุกอย่างที่คุณต้องการและบันทึกไฟล์

ทำเครื่องหมายrmสคริปต์ใหม่เป็นไฟล์เรียกทำงาน

ตั้งค่าสถานะrmสคริปต์ใหม่เป็นไฟล์เรียกทำงานโดยใช้:

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

มันทำงานอย่างไร

รหัสผ่าน rm

ยกเว้นว่ารหัสผ่านคือWE2Uในครั้งแรกที่คุณเรียกใช้สคริปต์คุณจะได้รับ "รหัสผ่านไม่ถูกต้อง" และรหัสการเข้ารหัสสำหรับรหัสผ่านที่คุณป้อนจะปรากฏขึ้น คัดลอกและวางคีย์การเข้ารหัสนี้จากเทอร์มินัลลงในสคริปต์ จากนั้นคอมเม้นท์บรรทัดด้วยเสียงสะท้อนที่แสดงคีย์การเข้ารหัสบนเทอร์มินัล

เนื่องจากเส้นทาง/usr/local/binสูงกว่าในรายการมากกว่า/binคำสั่งของเราrmถูกเรียก หลังจากได้รับรหัสผ่านที่ถูกต้องมัน/bin/rmจะทำการลบออกจริง ๆ

ดังที่โธมัสวอร์ดชี้ให้เห็นในคำตอบอื่นถ้าคุณต้องทำsudo apt-get install ...คุณอาจถูกขอรหัสผ่านเป็นพันครั้ง สคริปต์ตรวจสอบว่าsudoมีการใช้งานและไม่ขอรหัสผ่านหรือไม่ นอกจากนี้หากrmถูกเรียกจากภายในแอปพลิเคชัน GUI ไม่จำเป็นต้องใช้รหัสผ่าน

สคริปต์ที่เรียกใช้loggerเพื่อบันทึกทุกครั้งrmถูกเรียกด้วยตนเองโดยใช้เทอร์มินัล /var/log/syslogการใช้งานคำสั่งจะถูกบันทึกตาม


1
คุณสามารถซ่อนรหัสผ่านได้โดยรวมรุ่นที่ถูกแฮชไว้ในสคริปต์จากนั้นเมื่อใดก็ตามที่ผู้ใช้ป้อนรหัสผ่านก็สามารถแฮชรหัสผ่านและตรวจสอบกับแฮชที่เข้ารหัสแบบตายตัว
เริ่มต้นซาฮิบ

@InitializeSahib เพิ่มการสนับสนุนรหัสผ่านแบบแฮช (การเข้ารหัส) ลงในสคริปต์แล้ว
WinEunuuchs2Unix

3

อีกทางเลือกหนึ่งคือการสร้างสำเนาสำรองของไฟล์สำคัญในไดเรกทอรีที่ผู้ใช้ที่ไม่ใช่รูทไม่สามารถเข้าถึงได้ คุณสามารถใช้rsyncหรือunisonซิงโครไนซ์มันโดยอัตโนมัติเพียงแค่ให้แน่ใจว่าอย่างน้อยหนึ่งไดเรกทอรีในเส้นทางไปยังปลายทางการสำรองข้อมูลเป็นเจ้าของโดย root และโหมด 700 ซึ่งจะส่งผลให้มีไฟล์ทั้งหมดสองชุด มันจะปลอดภัยกว่าเพียงแค่สร้างผู้ใช้เป็นแขกเพื่อให้พวกเขาใช้เว้นแต่คุณจะต้องจำไว้เสมอว่าต้องล็อคหรือออกจากระบบก่อนที่จะส่งมอบคอมพิวเตอร์ให้พวกเขาหรือทิ้งไว้โดยไม่มีใครดูแล


3
คุณอาจต้องการชี้ให้เห็นว่าจะหลีกเลี่ยงการลบการแพร่กระจายได้อย่างไร และวิธีที่ดีที่สุดในการปิดและเปิดเพื่อว่าเมื่อผู้ใช้ทำบางสิ่งที่ต้องลบเพื่อให้ถาวรจะเป็นการถาวร
ostergaard

@ajostergaard ความคิดของฉันคือเมื่อใดก็ตามที่เขาได้รับคอมพิวเตอร์ของเขากลับมาจากเพื่อนของเขาเขาตรวจสอบด้วยตนเองว่าไม่มีอะไรหายไปและเรียกคืนสิ่งที่เป็น แต่เครื่องมือที่ฉันต้องการคือใช้งานพร้อมกันในโหมดโต้ตอบ gui ซึ่งทำให้ง่ายต่อการดู (และย้อนกลับ) การลบ
Random832

2

ไม่ใช่คำตอบที่ตรงกับคำถามที่คุณกำลังมองหา แต่:

หากเพื่อนของคุณกำลังลบไฟล์ของคุณโดยใช้rmคำสั่งแสดงว่าเพื่อนของคุณไม่มีความสามารถกระตุกกระตุกหรือเป็นเพื่อนกัน BOFHที่พยายามสอนคุณไม่ให้ออกจากการเข้าสู่ระบบและไม่ต้องสนใจ ในทุกกรณีการแก้ปัญหาคือเดียวกัน: ไม่ต้องออกจากเซสชันของคุณเข้าสู่ระบบและไม่ต้องใส่

สิ่งนี้มีข้อดีที่ไม่จำเป็นต้องจำไว้ว่าต้องทำการเปลี่ยนแปลงพิเศษกับระบบเมื่อใดก็ตามที่คุณอัพเกรดหรือรับระบบใหม่และยังป้องกันสคริปต์และสิ่งอื่น ๆ ที่คุณใช้ซึ่งขึ้นอยู่กับคำสั่งที่ทำงานตามที่คาดไว้

นอกจากนี้ยังมีข้อได้เปรียบในการหยุด "เพื่อน" จากการไปยังขั้นตอนต่อไป คุณจะต้องการ " mvคำสั่งป้องกันรหัสผ่าน" หรือไม่หากพวกเขาตัดสินใจที่จะย้ายไฟล์ของคุณไปยัง / dev / null เมื่อพวกเขาพบว่าการลบแบบง่ายไม่ได้ทำในสิ่งที่พวกเขาต้องการ เมื่อคุณอยู่ในเกมแบบนี้การย้ายที่ชนะเพียงอย่างเดียวไม่สามารถทำได้


1

ฉันมีความเป็นไปได้ที่คล้ายกันซึ่งฉันวางแผนไว้ บนเซิร์ฟเวอร์ไฟล์หากหน่วยเก็บข้อมูลหลักของภาพถ่ายสามารถเขียนได้ว่าบางคนในครอบครัว (น้อยกว่าด้านเทคนิคหรือโดยบังเอิญ) อาจลบบางสิ่งบางอย่างโดยบังเอิญลาก gui ที่ย้ายไดเรกทอรีหรือเขียนทับต้นฉบับด้วยเวอร์ชันที่แก้ไขแทนที่จะเปลี่ยนชื่อ .

ฉันรู้ว่าฉันสามารถป้องกันสิ่งนั้นได้โดยไม่ให้สิทธิ์ไม่สามารถเขียนได้สำหรับทุกคน ZFS สร้างสแนปชอตเป็นระยะเพื่อให้สามารถลบหรือเขียนทับโดยไม่ตั้งใจได้ (ซึ่งแตกต่างจากการสำรองข้อมูลภาพรวมมีน้ำหนักเบาและคัดลอกเมื่อเขียนดังนั้นจึงไม่ทวีคูณการใช้พื้นที่เก็บข้อมูลของคุณ)

ZFS มีถิ่นกำเนิดใน FreeBSD Linux มี btrfs ซึ่งมีสแน็ปช็อตด้วย


0

วิธีแก้ปัญหาที่โง่มากสำหรับปัญหาที่โง่มาก

หากคุณไม่ต้องการchmod rm, rmdirหรือmv(สำหรับmv filename /dev/null) หรือการใช้ ACL ของคุณสามารถสร้างผู้ใช้หุ่นที่มีรหัสผ่านไม่มีใคร แต่คุณรู้และนามแฝงแต่ละคำสั่งไปsudo [user]แล้วทำให้นามแฝงสำหรับแต่ละคำสั่งที่เพื่อนของคุณไม่ทราบว่า . วิธีนี้เมื่อเพื่อนของคุณพิมพ์rmระบบจะแจ้งให้พวกเขาใส่รหัสผ่าน (แต่เดารหัสผ่านผิดจะบันทึกความพยายามที่ล้มเหลว) และคุณยังสามารถพิมพ์rmaliasหรืออะไรก็ตามที่คุณเลือกที่จะลบไฟล์จริง

หรือคุณเพียงแค่สร้างบัญชีผู้เยี่ยมชมที่ไม่มีสิทธิ์เข้าถึงโฮมไดเร็กตอรี่ของคุณ


ดูเหมือนว่าคุณกำลังติดตามถูก คำตอบของคุณอาจได้รับการปรับปรุงโดยอธิบายเกี่ยวกับวิธีตั้งค่านามแฝงsudo [user]และdummy user
WinEunuuchs2Unix

0

หากคุณต้องการป้องกัน rm รหัสผ่านโซลูชันจะทำ wrapper สำหรับrmที่ต้องการสิทธิ์รูทและขอรหัสผ่านเป็นอย่างอื่น (หมายเหตุ: wrapper นี้อาจหายไปเมื่อแพ็คเกจcoreutilsได้รับการปรับปรุงหรือติดตั้งใหม่) นอกจากนี้โปรดทราบว่านี่เป็นเพียงการรักษาความปลอดภัย rm ยังมีอีกหลายวิธีในการลบไฟล์


เปิดเทอร์มินัลและกลายเป็นรูท จากนั้นวิ่งsudo mv /bin/rm /bin/rmoldเพื่อย้ายrmเก่าไปยังที่อื่น

ตอนนี้ทำงานsudo nano /bin/rmเพื่อสร้างเสื้อคลุม

ใน Nano ให้พิมพ์ดังต่อไปนี้:

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

จากนั้นCTRLกดค้างและกดXเพื่อออก กดYเมื่อคุณได้รับพร้อมท์จากนั้นกดENTERเพื่อบันทึกไฟล์

ในที่สุดเราจำเป็นต้องให้สิทธิ์ที่เหมาะสมนี้:

sudo chmod a+x /bin/rm

และคุณไป


1
ถ้าคุณมีเหตุผลที่ดีมากตัวแปรสคริปต์ควรเสมอจะยกมา: =>$@ "$@"ที่นี่สิ่งที่คุณเสนอเป็นเวอร์ชั่นดั้งเดิมที่อันตรายและปลอดภัยrm: จะเกิดอะไรขึ้นถ้ามีไฟล์ชื่อfoo -i -r *( -iเพิ่มเพื่อปกป้องผู้ใช้ที่ไร้เดียงสา)?
xhienne

นอกจาก"-quoting $@เป็น @xhienne แล้วฉันขอแนะนำให้คุณเตือนผู้อ่านอย่างชัดเจนว่านี่ไม่ได้ให้ความปลอดภัยเลยเนื่องจากมีหลายวิธีในการลบไฟล์ หนึ่งคือการโทรrmoldแต่มีวิธีอื่นมากมายตามที่กล่าวไว้ในคำตอบและความคิดเห็นอื่น ๆ ที่พวกเขา (ถึงอย่างนั้นนี่จะมีปัญหาที่rmจะรู้สึกเหมือนมันลบไฟล์ในฐานะผู้ใช้ปัจจุบัน - มันถูกเรียกโดยไม่ต้องsudoและrmทำงานปกติในฐานะผู้โทร - แต่จะเป็นราก! ถ้าพวกเขาเพิ่งsudoed พวกเขาชนะ ' ไม่แจ้งให้ทราบว่าพวกเขาอาจลบไฟล์ระบบแม้ว่าพวกเขารู้เกี่ยวกับการเปลี่ยนแปลง)
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.