बारबूम और पेठ के उत्तर दोनों सही हैं: प्रतीकात्मक लिंक पर अनुमति बिट्स स्वयं अप्रासंगिक हैं (मैकओएस पर देखें; नीचे देखें), और एक प्रतीकात्मक लिंक पर अनुमति बदलना - chmod
कमांड लाइन टूल द्वारा या chmod()
सिस्टम कॉल द्वारा - बस के रूप में कार्य करेगा अगर यह प्रतीकात्मक लिंक के लक्ष्य के खिलाफ प्रदर्शन किया गया था।
SUSv4 / POSIX.1-2008 सिम्कलिन () सिस्टम कॉल का विवरण उद्धृत करने के लिए :
निर्मित प्रतीकात्मक लिंक के लिए फ़ाइल मोड बिट्स के मान अनिर्दिष्ट हैं। POSIX.1-2008 द्वारा निर्दिष्ट सभी इंटरफेस ऐसा व्यवहार करेंगे जैसे कि प्रतीकात्मक लिंक की सामग्री को हमेशा पढ़ा जा सकता है, सिवाय इसके कि फ़ाइल संरचना बिट्स का मान स्टेट संरचना के st_mode फ़ील्ड में वापस अनिर्दिष्ट है।
यहाँ, "अनिर्दिष्ट" प्रत्येक कार्यान्वयन के लिए व्याख्या का कमरा छोड़ देता है। सुनिश्चित वर्णन:
- लिनक्स पर (ext4fs का उपयोग करके परीक्षण किया गया),
stat()
रिटर्न st_mode=0777
, कोई फर्क नहीं पड़ता कि सिंबल बनाते समय ओम्स्क क्या था; ls -l
इसलिए हमेशा lrwxrwxrwx
प्रतीकात्मक लिंक के लिए प्रदर्शित करता है ।
- MacOS (HFS) और FreeBSD (UFS और ZFS दोनों) पर, एक प्रतीकात्मक लिंक की अपनी अनुमति है:
chmod -h
ऊपर उल्लिखित कमांड इस लिंक की अनुमति को बदल सकता है (जो lchown()
इसे प्राप्त करने के लिए आंतरिक रूप से एक गैर-पॉसिक्स सिस्टम कॉल का उपयोग करता है ), और stat()
सिस्टम इसके लिए कॉल रिटर्न देता है st_mode
।
POSIX द्वारा निर्दिष्ट के रूप में लिनक्स और FreeBSD पर प्रतीकात्मक लिंक का हमेशा पालन किया जा सकता है। विशेष रूप से, FreeBSD पर, इसका मतलब है कि एक प्रतीकात्मक लिंक की फ़ाइल मोड का एक्सेस नियंत्रण पर कोई प्रभाव नहीं पड़ता है।
दूसरी ओर, MacOS POSIX को थोड़ा तोड़ देता है। हालांकि एक प्रतीकात्मक लिंक का पालन इसकी पठन अनुमति के बावजूद किया जा सकता है, यदि उपयोगकर्ता की पठन अनुमति नहीं है तो (अनुमति अस्वीकृत) के readlink()
साथ विफल रहता है EACCES
:
$ sudo ln -shf target symlink
$ sudo chmod -h 444 symlink
$ ls -l symlink
lr--r--r-- 1 root staff 1 Mar 14 13:05 symlink -> target
$ sudo chmod -h 000 symlink
$ ls -l symlink
ls: symlink: Permission denied
l--------- 1 root staff 1 Mar 14 13:05 symlink
$ echo kthxbye > target
$ cat symlink
kthxbye
(ध्यान दें कि -> target
भाग दूसरी ls -l
कमांड से आउटपुट में गायब है , और यह cat symlink
अभी भी सफल हुआ और target
फ़ाइल की सामग्री को मुद्रित किया गया, भले ही उपयोगकर्ता ने पढ़ने की अनुमति नहीं दी हो symlink
।)
NetBSD जाहिरा तौर पर एक विशेष माउंट विकल्प प्रदान करता है symperm
, जिसका नाम , यदि सेट किया गया है, तो सांकेतिक लिंक को पढ़ने / readlink()
ट्रैवर्सल को नियंत्रित करने और लिंक करने की अनुमति निष्पादित करता है ।