`การอนุญาตถูกปฏิเสธ 'ลงซีดีในไดเรกทอรีแม้ว่าสิทธิ์จะถูกต้อง


13

มันแปลกมาก ล็อกอินเข้าสู่กล่อง Linux (RHEL) ในฐานะผู้ใช้ 'g' เพื่อทำการls -lahแสดง

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh

ดังนั้นผู้ใช้ 'g' ในกลุ่ม 'g' / ควร / สามารถในการอ่านและการเขียนไปยังไดเรกทอรี .ssh แต่ถ้าฉันทำฉันได้รับls -lah .ssh/ ls: .ssh/: Permission deniedฉันยังได้รับอนุญาตปฏิเสธหากฉันลองและcatไฟล์ใด ๆ ในไดเรกทอรี

ถ้าฉันไปเป็นรากและเปลี่ยนสิทธิ์ไปยัง700, 744, 766หรืออะไรตราบใดที่ 'ผู้ใช้ที่ได้รับอนุญาตคือ 7 การทำงานและฉันสามารถซีดีและ LS ไดเรกทอรีและไฟล์ภายใน

id g ผลตอบแทน

uid=504(g) gid=506(g) groups=506(g)

แก้ไข:

ฉันได้คัดลอกการอนุญาตเหล่านี้ไปยังกล่องที่เหมือนกันทุกประการและไม่มีปัญหา ฉันสามารถcdเข้าสู่ไดเรกทอรีโดยไม่ต้องใช้สิทธิ์

คำตอบ:


29

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

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied

นั่นคือยกเว้นว่ากระบวนการของคุณมีชุดความสามารถ CAP_DAC_OVERRIDE POSIX (เช่น root มี) ซึ่งอนุญาตให้คุณป้อนไดเรกทอรีโดยไม่มีชุดบิตที่เรียกใช้งานได้คือ iirc

โดยทั่วไปคุณควรพยายามเก็บไดเรกทอรี. ssh ไว้ที่ 700 และทุกอย่างในนั้นที่ 600 เพื่อความปลอดภัย หน้า man ssh ให้คำแนะนำต่อไฟล์ในการเป็นเจ้าของและโหมดการอนุญาตที่จำเป็นสำหรับไฟล์ใน ~ / .ssh


17

ไดเรกทอรีต้องการสิทธิ์ดำเนินการเพื่อที่จะcdเข้าไป นี่คือพฤติกรรมที่คาดไว้


แต่ฉันยังไม่สามารถcatไฟล์ใด ๆ ในไดเรกทอรีที่มีสิทธิ์เหมือนกันพวกเขาไม่จำเป็นต้องใช้สิทธิ์ในการอ่าน
Smudge

4
คุณต้องมีสิทธิ์ดำเนินการในไดเรกทอรีเพื่อเข้าถึงทุกสิ่งภายในไดเรกทอรี คำตอบนี้ถูกต้อง
EightBitTony

1
@samarudge พิจารณาxในไดเรกทอรีเพื่อให้สิทธิ์แก่คุณที่ "อยู่ใน" ไดเรกทอรีนั้น หากไม่มีคุณจะไม่สามารถซีดีไปยังไดเรกทอรีคุณไม่สามารถเห็นสิ่งที่อยู่ในไดเรกทอรีคุณไม่สามารถเปิดอะไรในไดเรกทอรี หากคุณไม่ได้รับอนุญาตให้อยู่ในห้องสมุดคุณจะไม่สามารถอ่านหนังสือที่นั่นได้
DerfK

ถ้าฉันเพิ่มการอนุญาตให้ดำเนินการในไดเรกทอรี (744 ไปยังไดเรกทอรี 644 ไปยังไฟล์ภายใน) ฉันได้รับข้อผิดพลาดจาก SSHD ว่าสิทธิ์ของไดเรกทอรี. ssh จะต้องเป็น 644 หรือต่ำกว่า แต่ด้วยสิทธิ์เป็น 644 มันบอกว่าไม่สามารถเข้าถึง. ssh / authorized_keys
Smudge

* มันไม่เจาะจงว่า '.ssh / directory' ไม่ใช่ไฟล์
Smudge

2

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

การอนุญาตไดเรกทอรี 700 ไฟล์และสิทธิ์ 644 นั้นเป็นสิ่งที่ดีสำหรับฉัน


สิทธิ์สำหรับไฟล์คือ644เจ้าของไฟล์คือ g: g ดังนั้นการอนุญาตของไฟล์จึงถูกต้อง ถ้าฉันเพิ่มการอนุญาตให้ดำเนินการในไดเรกทอรี SSHD บอกว่าฉันต้องยกเลิกการอนุญาตเป็น 644 หรือต่ำกว่า
Smudge

ความคิดเห็นของซันนี่นั้นถูกต้อง - ลงคะแนนรุนแรงเล็กน้อย
AndyM

0

ฉันคิดว่านี่เป็นปัญหาไฟล์ ssh หรือไม่ ไม่ใช่ปัญหา chmod ทั่วไป?

ถ้าเป็นเช่นนั้นลอง

$chmod go-w ~/
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/*
$chmod 600 ~/.ssh/.*

ปัญหาอื่นอาจเป็นจุดเชื่อมต่อมันติดตั้งจากที่อื่น CIFS, NFS หรือไม่
AndyM

0

ไดเรกทอรีต้องการชุด x บิต (สำหรับไดเรกทอรีที่บิตถูกมองว่าเป็นบิตการค้นหา) เพื่อเปิด ดังนั้นฉันจึงใช้ tree ดังนั้นฉันจะได้รับชุดโฟลเดอร์เท่านั้นและหลีกเลี่ยงฝันร้ายที่มีไฟล์ทั้งหมดที่ตั้งค่าเป็นไฟล์เรียกทำงาน (ตัวเลือกสำหรับ tree คือ -d List directories only.):

sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755  "{}"

คำเตือน!!! คุณควรนำสิ่งนี้ไปพิจารณา:

  • การใช้ chmod หรือ chown ซ้ำใน/ไดเรกทอรีรากหรือไดเรกทอรีระบบจะทำลายระบบปฏิบัติการของคุณ (จริง ๆ แล้วสิ่งที่เกิดซ้ำใน/ไดเรกทอรีหรือไดเรกทอรีระบบเป็นอันตราย)

  • นี่ไม่ใช่วิธีปฏิบัติด้านความปลอดภัยที่ดีในการตั้งค่าการอนุญาตเป็นกลุ่มเช่นนั้น

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