จะป้องกันผู้ใช้ใหม่จากการทำอะไรที่อันตราย


31

ฉันเพิ่งติดตั้งเซิร์ฟเวอร์ Ubuntu บนเซิร์ฟเวอร์ของฉันเพื่อลองใช้ linux ในฐานะผู้ใช้ใหม่ ฉันติดตามการสอนเกี่ยวกับวิธีการตั้งค่าเว็บเซิร์ฟเวอร์ซึ่งกล่าวว่าฉันต้องการchmod 777เว็บเซิร์ฟเวอร์ dir เพื่อให้สามารถเขียนลงใน

อย่างไรก็ตามฉันได้สร้างบัญชีใหม่สำหรับเพื่อนชายคนหนึ่งเพื่อให้เขาเห็นไฟล์บางไฟล์บนเซิร์ฟเวอร์ที่ฉันวางไว้ในบ้านของเขา:

adduser francis

หลังจากสร้างบัญชีฉันได้ตรวจสอบการเข้าถึงของเขาด้วย

groups francis

มันบอกว่า "francis: francis" ดังนั้นจึงไม่ใช่ปัญหาที่ฉันคิดอูบุนตูไม่ได้รวมเขาไว้ในกลุ่มใด ๆ โดยค่าเริ่มต้นซึ่งสมเหตุสมผลแล้วมันสร้างเขาขึ้นมาโดยไม่ต้องมีการรักษาความปลอดภัยที่เข้มงวด หนึ่งสัปดาห์ต่อมาด้วยความสยองขวัญที่สมบูรณ์และสมบูรณ์ที่สุดฉันพบว่าแม้ว่าเขาจะไม่สามารถทำสิ่งต่าง ๆ เช่น SUDO หรือยุ่งเหยิงในไดเรกทอรีของระบบเขาสามารถเข้าถึงเกือบทุกอย่างอื่นบนเซิร์ฟเวอร์ ตัวอย่างเช่นเขามีการเข้าถึงแบบเต็มอ่าน / เขียนไฟล์เว็บเซิร์ฟเวอร์ของฉันที่ / var / www (และรหัสผ่านที่เก็บไว้ในไฟล์ php configs ฯลฯ ) แม้ว่าไดเรกทอรีนั้นจะไม่อยู่ในไดเรกทอรีบ้านของเขาและฉันไม่เคยเพิ่มเขาลงในกลุ่มใด ๆ เข้าถึงไดเรกทอรีนั้นและฉันไม่อนุญาตให้เขาเข้าถึงสิ่งใด ๆ เป็นพิเศษหลังจากทำการเพิ่มผู้ใช้

อย่างไรก็ตามเกิดอะไรขึ้นที่นี่ ฉันจะฆ่าเขาเข้าถึงสิ่งที่สำคัญได้อย่างไร เขาไม่สามารถเข้าถึงสิ่งต่าง ๆ เช่น / media หรือ / var / www ฉันคิดว่าผู้ใช้ใหม่โดยค่าเริ่มต้นป้องกันไม่ให้ทำสิ่งที่เป็นอันตรายหรือสอดแนมที่พวกเขาไม่ควรจะเป็น

โดยรวมแล้วฉันต้องอนุญาตให้เขาเข้าถึงไดเรกทอรีที่ฉันระบุด้วยตนเอง + ไปยังไดเรกทอรีที่เขาต้องการทำงานอย่างถูกต้อง (บ้าน dir, vim, nano ฯลฯ .. )

ขอขอบคุณ


30
คุณกำลังทำ chmod 777 และถามว่าทำไมทุกคนสามารถอ่านเขียนได้ที่นั่น? อ่านหน้าคนสำหรับ chmod
Anwar

16
ใช่ 777 เป็นปัญหาของคุณด้วยเหตุผลหลายประการ
Android Dev

21
@Askerman - ไม่เมื่อคุณให้ 777 ทุกคนสามารถเข้าถึงทุกอย่างได้โปรดอ่าน: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
เราทุกคนทำผิดพลาดโดยเฉพาะอย่างยิ่งเมื่อเราเรียนรู้ในสภาพแวดล้อมใหม่ทั้งหมด นี่เป็นสิ่งที่ดีที่จะเรียนรู้จากมันแน่นอนว่าคุณควรแยกความคิดของคุณว่าสิ่งต่าง ๆ ทำงานอย่างไรใน Windows เมื่อใช้ระบบปฏิบัติการบน Linux หลังจากคืนค่าการอนุญาตของคุณคุณควรสังเกตว่าผู้ใช้ไม่สามารถเปลี่ยนแปลงสิ่งที่พวกเขาไม่สามารถทำได้ หากคุณใช้chmodที่อื่นคุณอาจมีปัญหาอื่น ๆ
59

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

คำตอบ:


40

นี่คือการออกแบบ และที่แย่กว่านั้นคือ chmod 777 หมายถึง ... "ฉันต้องการให้เจ้าของทุกคนในกลุ่มของเขาและทุกคนที่มีสิทธิ์อ่านเขียนและดำเนินการ"

ซึ่งน่ากลัวมาก

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

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


4
จุดเล็ก ๆ น้อย ๆ : "เจ้าของทุกคนในกลุ่มของเขา ... " - เจ้าของไฟล์ไม่จำเป็นต้องอยู่ในกลุ่มไฟล์เสมอไป
alex_d

2
ดี ฉันชอบที่คุณพูดถึงคำตอบที่ยอมรับใน servfault
Elder Geek

3
ศัพท์แสงทางประวัติศาสตร์สำหรับสถานการณ์นี้คือ " โลกอ่าน / เขียนได้"
Kaz

19

โดยพื้นฐานแล้วมันจะแยกย่อยดังนี้:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

ดังนั้นการอ่านสิทธิ์จะเท่ากับ 4 อ่านและเขียนจะเท่ากับ 6 อ่านและดำเนินการจะเท่ากับ 5 และทั้งหมด (อ่านเขียนดำเนินการ) เท่ากับ 7 นี่คือวิธีที่คุณคำนวณค่าออคเต็ตการอนุญาตสำหรับเจ้าของกลุ่มเจ้าของ หรือทุกคน

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

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

ดังนั้นถ้าฉันต้องการให้ตัวเองและกลุ่มของฉันอ่านเขียนและดำเนินการอนุญาตไปยังโฟลเดอร์ที่ฉันเป็นเจ้าของ แต่ฉันไม่ต้องการให้ทุกคนสามารถอ่านได้ฉันจะใช้:

$ chmod 770 myDirectory

สำหรับข้อมูลเพิ่มเติมตรวจสอบหน้า man สำหรับ chmod :

$ man chmod

chmod ugo+rwx <...>หากคุณไม่สามารถจำบิตเพื่อเพิ่มร่วมกันเพื่อให้สิทธิ์ที่ถูกต้องในการสั่งซื้อที่เหมาะสมแล้วคุณยังสามารถใช้เนื้อหาให้อ่านง่ายขึ้น ตัวละครหมายถึงu ser, g roup, o ther; r ead, w rite, e x ecute คุณสามารถใช้ '-' ที่จะลบ (เช่นchmod go-wx <...>) เพิ่งทราบว่าสิ่งนี้จะเพิ่มหรือลบสิ่งที่คุณพิมพ์เท่านั้น chmod ugo+rwx <file>; chmod u+rwx <file> ไม่ลบการเข้าถึงสำหรับกลุ่ม / อื่น ๆ
ReactiveRaven

@ ReactiveRaven นั่นเป็นจุดที่ดี แต่ OP เห็นได้ชัดว่าสับสนเกี่ยวกับสิ่งที่chmod 777ทำดังนั้นฉันจึงเป็นผู้กำกับคำอธิบายของฉัน
แอรอน

@ ซานน่าโทรดี!
แอรอน

6

ตามที่คนอื่นพูดถึงคุณไม่ควรตั้งค่าการอนุญาตเป็น 777

นี่คือแผ่นอ้างอิงที่เป็นประโยชน์ที่ฉันใช้

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
ดี! นี่เป็นความช่วยเหลือครั้งใหญ่สำหรับผู้คน (เช่นฉัน) ที่เป็นผู้เรียนรู้ด้วยภาพ
แอรอน

3

ในการแบ่งปันไฟล์กับบุคคลที่คุณให้การเข้าสู่ระบบคุณไม่จำเป็นต้องทำอะไรเป็นพิเศษ ในการติดตั้ง Debian เริ่มต้นผู้ใช้สามารถเข้าถึงโฮมไดเร็กตอรี่ของกันและกันได้

ตัวอย่างเช่น

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

สิทธิ์ในไดเรกทอรีบ้านของฉันคืออ่าน (r)และการเข้าถึง (x)สำหรับผู้ใช้ในระบบของฉัน เฉพาะฉันเท่านั้นที่สามารถเข้าถึงการเขียน (w)ได้

นอกจากนี้ค่าเริ่มต้นumaskบน Ubuntu ก็คือไฟล์และไดเรกทอรีที่ผู้ใช้สร้างเป็นค่าเริ่มต้นที่โลกสามารถอ่านได้โดยค่าเริ่มต้นคุณสามารถตั้งค่าumaskการ077ถ้าคุณไม่ต้องการที่

สิ่งนี้หมายความว่าในการตั้งค่าเริ่มต้นหากผู้ใช้youต้องการแบ่งปันเอกสาร~/README.txtกับฉันแล้วไม่youจำเป็นต้องทำอะไร ฉันสามารถดูได้ง่ายๆ:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

ฉันไม่สามารถแก้ไขหรือลบไฟล์ได้ แต่ฉันสามารถคัดลอกไปยังตำแหน่งที่ฉันได้รับอนุญาตให้เขียน จากนั้นฉันก็เป็นเจ้าของสำเนา:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

มีเหตุผลที่ดีว่าทำไมระบบส่วนใหญ่จึงสามารถอ่านได้ทั่วโลกตามที่ฉันได้อธิบายไว้ในคำตอบอื่นใน AskUbuntuAskUbuntu อย่างไรก็ตามในระบบที่ใช้ร่วมกันมันอาจสมเหตุสมผลที่จะทำให้โฮมไดเร็กทอรีไม่สามารถเข้าถึงได้สำหรับผู้ที่ไม่ใช่เจ้าของ:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... เนื่องจากผู้ใช้หลายคนไม่ทราบว่าเป็นค่าเริ่มต้น - QED ;-) มันจะฉลาดกว่าหากทำให้ผู้ใช้ทราบว่าการอนุญาตไฟล์ไม่ได้ป้องกันความลับ


1

ใน Ubuntu ผู้ใช้ทุกคนมีสิทธิ์ superuser ที่เพิ่มในกลุ่ม 'sudo' โปรดตรวจสอบเพื่อให้แน่ใจว่าไม่มีผู้ใช้อื่นเพิ่มในกลุ่มนี้

เพื่อรักษาความปลอดภัยไฟล์และไดเรกทอรีของคุณจากผู้ใช้รายอื่นคุณสามารถตั้งค่าการอนุญาตตามคำแนะนำจาก Mr. Journeyman Geek ในคำตอบข้างต้น

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.