อะไรคือ Ubuntu ที่เทียบเท่ากับ OSX `chmod -h` flag


13

ใน OSX ฉันสามารถตั้งค่าการอนุญาตของ symlink เอง (แทนที่จะเป็นสิ่งที่ชี้ไปที่ใช้ -h) จากหน้าคน:

 -h      If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to.

ใน Ubuntu 14.04 ฉันพยายามตั้งค่าการอนุญาต symlink แต่ตั้งไว้ที่เป้าหมาย symlink เท่านั้น

มันเกี่ยวกับ symlink จาก/home/nagios/.ssh/someprivatekeyถึง/somewhere/else/privatekeyดังนั้นการอนุญาตมีความสำคัญสำหรับ ssh ฉันจะบรรลุสิ่งนี้ได้อย่างไร


แล้วทำไมคุณต้องใช้ symlink นี้
muru

1
คุณแน่ใจหรือว่า ssh ใส่ใจกับการอนุญาตในลิงก์สัญลักษณ์และไม่ใช่การอนุญาตใน / ที่ / ที่อื่น / ที่อื่น / privatekey?
Random832

@ Random832 ใช่ฉันอาจได้ข้อสรุปที่ไม่ถูกต้องฉันก็สับสนเล็กน้อยเกี่ยวกับวิธีการแสดงสิทธิ์ในls -lผลลัพธ์ ( lrwxrwxrwx)
Ray Burgemeestre

@muru ฉันกำลังสร้างอิมเมจ (buildserver) Docker ซึ่งใช้คีย์ ssh เพื่อเข้าถึงเซิร์ฟเวอร์ทุกชนิด ฉันไม่ต้องการใส่กุญแจส่วนตัวไว้ข้างในเนื่องจากเหตุผลที่แตกต่างกัน (เช่นถ้าฉันต้องการโฮสต์ไว้ที่ฮับนักเทียบท่า) ดังนั้นฉันจึงเชื่อมโยงมันและชี้ไปที่ระดับเสียงที่ติดตั้งเมื่อภาพวิ่ง แม้ว่าลองคิดดูสิฉันอาจเปลี่ยนตำแหน่งสำคัญโดยใช้.ssh/config:)
Ray Burgemeestre

คำตอบ:


18

เป็นไปไม่ได้. ไม่มีวิธีเนื่องจากการให้สิทธิ์บน symlink นั้นไม่มีความหมาย (symlink ไม่ใช่ไฟล์ แต่จะชี้ไปที่ไฟล์เท่านั้น) วิธีการที่จะทำเช่นนี้กับลินุกซ์คือผ่านACLแม้ว่า

symlinkอธิบายว่าเ ​​...

ค่าของบิตโหมดไฟล์สำหรับลิงก์สัญลักษณ์ที่สร้างขึ้นไม่ได้ระบุไว้ อินเตอร์เฟสทั้งหมดที่ระบุโดย POSIX.1-2008 จะทำงานเสมือนว่าเนื้อหาของลิงก์สัญลักษณ์สามารถอ่านได้เสมอยกเว้นค่าบิตบิตโหมดไฟล์ที่ส่งคืนในฟิลด์ st_mode ของโครงสร้าง stat นั้นไม่ได้ระบุไว้


ข้อแตกต่างอยู่ที่นี่: chmodและchmod ... เป็น BSD กับ Linux


ไม่แน่ใจว่ามันสำคัญหรือไม่ แต่เกี่ยวกับ SSH: ใช้ สถิติ (2)ไม่ใช่ lstat (2) เพื่อรับสิทธิ์

  • สถิติ () สถิติไฟล์ที่ชี้ไปตามพา ธ และเติมใน buf
  • lstat () เหมือน stat () ยกเว้นว่าถ้า path เป็นลิงค์สัญลักษณ์ดังนั้นลิงค์นั้นคือ stat-ed ไม่ใช่ไฟล์ที่อ้างถึง

2
ความสามารถในการตั้งค่าการอนุญาตบน symlink ไม่ได้ระบุไว้ในเวอร์ชันล่าสุดเป็นส่วนขยาย BSD
Random832

1
@ Random832 hmm ที่อาจเกิดขึ้นได้มากขึ้นใช่ ฉันอ่านบิตนี้ในวันนี้เพื่อ SO แต่ไม่ได้ตรวจสอบเกี่ยวกับเรื่องนี้: D
Rinzwind

4
POSIX บังเอิญระบุfchmodatฟังก์ชั่นซึ่งสามารถใช้ในการเปลี่ยนโหมดการเชื่อมโยงสัญลักษณ์ (คุณสมบัติเสริม - ระบบที่ไม่รองรับรวมถึง Linux, ส่งคืนข้อผิดพลาด EOPNOTSUPP) แต่ไม่มีอะไรในchmodคำสั่งที่จะใช้สิ่งนี้ เฉพาะ-Rที่กำหนดไว้ใน POSIX
Random832

2
สิทธิ์ symlink มีความหมายบน Linux บนระบบที่คุณสามารถเปลี่ยนพวกเขา (ด้วยlchmod(2)หรือfchmodat(2)... ) พวกเขามีความหมาย (อนุญาต / ปฏิเสธreadlink()(อ่าน) หรือความละเอียดของเส้นทางผ่านพวกเขา (รัน) สิทธิ์ในการเขียนมักจะไม่เกิดขึ้นเนื่องจากคุณไม่สามารถเปลี่ยนเป้าหมายของ symlink ได้
Stéphane Chazelas

Unix จะไม่เห็นด้วยกับคุณว่า "symlink ไม่ใช่ไฟล์" symlink เป็นไฟล์พิเศษ
ฮอบส์

9

คุณทำไม่ได้ การchmodเรียกระบบพื้นฐานไม่รองรับสิ่งนี้ใน Linux และสำหรับเรื่องนั้น Linux ไม่สนใจสิทธิ์ของลิงก์เช่นกัน จากman chmod:

chmod never changes the permissions of symbolic links; the chmod system
call cannot change their permissions.  This is not a problem since  the
permissions  of  symbolic  links  are  never  used.   However, for each
symbolic link listed on the command line, chmod changes the permissions
of  the  pointed-to  file.   In  contrast, chmod ignores symbolic links
encountered during recursive directory traversals.

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


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