ലിനക്സ് ഫയല്‍ സിസ്റ്റങ്ങള്‍ #3

സുബിന്‍ പി. റ്റി on 29 മാർച്ച്, 2019

ഇന്ന് ഉപയോഗത്തിലിരിക്കുന്ന മിക്കവാറും ഫയല്‍ സിസ്റ്റങ്ങളില്‍ ഓരോ ഫയലിനും വിവിധ തരത്തിലുള്ള അനുമതികള്‍ ഉണ്ട്. ഒരൊറ്റ ഉപഭോക്താവിനെ മാത്രം പിന്‍തുണക്കുന്ന ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളില്‍ ഇതിന് പ്രസക്തിയില്ല. എന്നാല്‍ ഒരേ സമയം ഒന്നിലധികം ആളുകള്‍ക്ക് ഉപയോഗിക്കാന്‍ സാധിക്കുന്ന ആധുനിക ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളില്‍ ഓരോ ഉപഭോക്താവിന്റെയും ഫയലുകളെ മറ്റുള്ളവര്‍ ഉപയോഗിക്കുന്നതില്‍ നിന്നും അവയില്‍ മാറ്റങ്ങള്‍ വരുത്തുന്നതില്‍ നിന്നും സംരക്ഷിക്കേണ്ടതുണ്ട്.

ലിനക്സില്‍ ഓരോ ഫയലിന്റെയും അനുമതി മൂന്ന് വിഭാഗങ്ങളായാണ് ക്രമീകരിച്ചിരിക്കുന്നത്. ആ ഫയല്‍ ഉണ്ടാക്കിയ ആള്‍ അഥവാ ആ ഫയലിന്റെ ഉടമ (യൂസര്‍), ഉടമ ഉള്‍പ്പെടുന്ന ഉപഭോക്താക്കളുടെ കൂട്ടം (ഗ്രൂപ്പ്), മറ്റുള്ളവര്‍ (അദേഴ്സ്) എന്നിങ്ങനെ. ഈ മൂന്ന് വിഭാഗങ്ങളില്‍ ഉള്ളവര്‍ക്കും വായിക്കുക (റീഡ്), എഴുതുക/മാറ്റം വരുത്തുക (റൈറ്റ് ), പ്രവര്‍ത്തിപ്പിക്കുക (എക്സിക്യൂട്ട്) എന്നിങ്ങനെ അനുമതികള്‍ കൊടുത്തിരിക്കും. താഴെക്കൊടുത്തിരിക്കുന്ന ചിത്രം നോക്കൂ,

ഫയല്‍ ഗ്രൂപ്പു്

1 എന്നുള്ളത് ഒരു വിഭാഗത്തിന്ആ പ്രവര്‍ത്തി ചെയ്യാന്‍ അനുവാദമുണ്ട് എന്നും 0 അനുവാദമില്ല എന്നും സൂചിപ്പിക്കുന്നു.ഈ ചിത്രത്തില്‍ കാണുന്നതുപോലെ ആണെങ്കില്‍ ഉടമക്ക്ആ ഫയലിനെ വായിക്കാനും, മാറ്റം വരുത്താനും പ്രവര്‍ത്തിപ്പിക്കാനും ഉള്ള അനുവാദമുണ്ട്. കൂട്ടത്തിനും മറ്റുള്ളവര്‍ക്കുംആ ഫയലിനെ വായിക്കാന്‍ മാത്രമേ അനുവാദമുള്ളു. ഈ ബിറ്റുകളെ ബൈനറി സംഘ്യ ആയി പരിഗണിച്ചാല്‍ഒക്റ്റല്‍ നമ്പര്‍ സിസ്റ്റത്തില്‍ 0744 എന്ന് എഴുതാന്‍ സാധിക്കും. ഈ രീതിയിലാണ് സാധാരണ ഫയല്‍ അനുമതികള്‍ എഴുതാറുള്ളത്. 0660 എന്നാണെങ്കില്‍ ഉടമക്കും കൂട്ടത്തിനും വായിക്കാനും എഴുതാനും അനുവാദമുണ്ട്, മറ്റുള്ളവര്‍ക്ക് ആ ഫയല്‍ ഉപയോഗിക്കാന്‍ സാധിക്കില്ല എന്നാണ്. (ബൈനറിയില്‍ 110 110 000, ഏറ്റവും ഇടതുവശത്തുള്ള 0 ഈ സംഘ്യ ഒക്റ്റല്‍ സംഘ്യാ രീതിയി എഴുതപ്പെട്ടതാണ് എന്നതിനെ സൂചിപ്പിക്കുന്നു.) ലിനക്സിലെ ls കമാന്റ് ഉപയോഗിക്കുമ്പോള്‍ ഇതിനെ rwxrwxrwx എന്നാണ് കാണിക്കാറൂള്ളത്. r - read, w - write, x - execute. ആദ്യത്തെ മൂന്നെണ്ണം ഉടമയുടെയും പിന്നീടുള്ളവ യഥാക്രമം കൂട്ടത്തിന്റെയും മറ്റുള്ളവരുടെയും അനുമതികള്‍ ആണ്. 0744 എന്ന അനുവാദത്തെ rwxr--r-- എന്ന് എഴുതാം. 0660 ത്തിനെ rw-rw---- എന്നും.

ലിനക്സ് റൂട്ട് ഫയല്‍ സിസ്റ്റത്തിലെ /etc പോലെയുള്ള ഡയറക്റ്ററികളില്‍ ചില പ്രോഗ്രാമുകളുടെ ക്രമീകരണങ്ങള്‍ സൂക്ഷിച്ചിരിക്കുന്ന ഫയലുക്കള്‍ക്ക് ചില പ്രത്യേക അനുവാദങ്ങള്‍ നിര്‍ബന്ധമാണ്. ആ അനുവാദങ്ങളില്‍ മാറ്റം വരുത്തിയാല്‍ അത്തരം പ്രോഗ്രാമുകള്‍ പിന്നീട് പ്രവര്‍ത്തിക്കാന്‍ വിസമ്മതിക്കും. ഉദാഹരണത്തിന് sudo പ്രോഗ്രാമിന്റെ ക്രമീകരണങ്ങള്‍ ഉള്‍ക്കൊള്ളുന്ന ഫയലായ /etc/sudoers ഇന്റെ അനുവാദങ്ങള്‍ നോക്കൂ, നിങ്ങളുടെ കമ്പ്യൂട്ടറില്‍ ഒരു റൂട്ട് യൂസര്‍ ഇല്ലെങ്കില്‍ ഇത് പരീക്ഷിക്കരുത്. സാധാരണ ഉബുണ്ടു/ഡെബിയന്‍ സിസ്റ്റങ്ങളില്‍ ഡിഫാള്‍ട്ട് ആയി ഒരു റൂട്ട് യൂസര്‍ ഉണ്ടാകില്ല. നിങ്ങള്‍ ഇത് പരീക്ഷിക്കുന്നുണ്ടെങ്കില്‍ അതിനു മുന്‍പേ sudo passwd root എന്ന കമാന്റ് ഉപയോഗിച്ച് റൂട്ട് യൂസറുടെ പാസ് വേര്‍ഡ് ക്രമീകരിക്കേണ്ടതാണ്. പിന്നീട് su കമാന്റ് വഴി റൂട്ട് ആയി ലോഗിന്‍ ചെയ്ത് ഈ ഫയലിന്റെ അനുവാദങ്ങള്‍ പഴയപടി ആക്കാം. അതുവരെ പിന്നെ sudo കമാന്റും അതുമായി ബന്ധപ്പെട്ട gksu പോലെയുള്ള കമാന്റുകളും പ്രവര്‍ത്തിക്കുകയില്ല. ഇത് വലിയ പ്രശ്നങ്ങള്‍ ഉണ്ടാക്കും.

subin@anna:~$ ls -l /etc/sudoers
-r--r----- 1 root root 723 Jan 31  2012 /etc/sudoers

ആദ്യം കാണുന്നത് അനുവാദം, പിന്നെ ലിങ്കുകളുടെ എണ്ണം (പിന്നാലെ), പിന്നെ ഉടമ, കൂട്ടം, ഫയല്‍ ഉണ്ടാക്കിയ തീയതി, ഫയലിന്റെ പേര് എന്നിങ്ങനെ. ഈ ഫയലിന്റെ ഉടമ റൂട്ട് ആണ്. റൂട്ടിനും പിന്നെ റൂട്ട് ഉപഭോക്താക്കളുടെ കൂട്ടത്തിനും മാത്രമേ ഈ ഫയല്‍ വായിക്കാന്‍ അനുവാദമുള്ളു. ഇനി ഈ ഫയലിന്റെ ഉടമയെ മാറ്റി നോക്കാം,

subin@anna:~$ sudo chown subin:subin /etc/sudoers
subin@anna:~$ ls -l /etc/sudoers
-r--r----- 1 subin subin 723 Jan 31  2012 /etc/sudoers

ഇപ്പോള്‍ ഫയലിന്റെ ഉടമ സുബിന്‍ ആണ്. ഇനി ഞാന്‍ sudo പ്രോഗ്രാം പ്രവര്‍ത്തിപ്പിക്കാന്‍ ശ്രമിക്കുമ്പോള്‍,

subin@anna:~$ sudo fdisk -l
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

എന്ന എറര്‍ സന്ദേശമാണ് കിട്ടുക.അനുവാദങ്ങള്‍ പഴയപടി ആക്കിയാല്‍ ഇത് വീണ്ടും പ്രവര്‍ത്തിച്ച് തുടങ്ങും.

പ്രവര്‍ത്തിപ്പിക്കാന്‍ കഴിയുന്ന ഫയലുകള്‍ക്ക് (എക്സിക്യൂട്ടബിള്‍ ഫയലുകള്‍) ലിനക്സില്‍ മറ്റുചില അനുവാദങ്ങള്‍ കൂടിയുണ്ട്. സെറ്റ് യുഐഡി, സെറ്റ്ജിഐഡി തുടങ്ങിയവ. ഒരു കമ്പ്യൂട്ടര്‍ സിസ്റ്റത്തില്‍ ചില കാര്യങ്ങള്‍ ചെയ്യാന്‍ അഡ്മിനിസ്ട്രേറ്റര്‍ യൂസര്‍ അഥവാ റൂട്ട് യൂസറിന് മാത്രമേ അനുവാദമുള്ളു. എന്നിരുന്നാലും ചിലപ്പോള്‍ സാധാരണ ഉപഭോക്താക്കള്‍ക്കും ഇത്തരം കാര്യങ്ങള്‍ ചെയ്യേണ്ടതായി വരും. ഒരേ പ്രോഗ്രാം തന്നെ വിവിധ ഉപഭോക്താക്കള്‍ പ്രവര്‍ത്തിക്കുമ്പോള്‍ അവയുടെ പ്രവര്‍ത്തനം വിവിധ രീതിയിലായിരിക്കും. ഒരു സിസ്റ്റത്തില്‍ ഒരു പുതിയ ഉപഭോക്താവിനെ ചേര്‍ക്കുന്നത്, ഉള്ള ഒരാളെ നീക്കം ചെയ്യുന്നത് തുടങ്ങിയ കാര്യങ്ങള്‍ ഒക്കെ റൂട്ടിന് മാത്രമായി നീക്കി വച്ചാല്‍ പോലും ഉപഭോക്താക്കള്‍ അവരവരുടെ പാസ്‌‌വേര്‍ഡുകള്‍ മാറ്റുന്നത്, വേറൊരു കമ്പ്യൂട്ടറിനെ നെറ്റ്‌‌വര്‍ക്കില്‍ ping ചെയ്യുന്നത് തുടങ്ങിയവ പ്രത്യേക അധികാരങ്ങള്‍ വേണ്ടീവരുന്ന കാര്യങ്ങളാണ്. ഇതിനായി ഉള്ള പ്രൊഗ്രാമുകള്‍ സാധാരണയായി ചെയ്യുന്നത് setuid, setgid പോലെയുള്ള സിസ്റ്റം കോളുകള്‍ ഉപയോഗിച്ച് അവയുടെ അധികാരങ്ങള്‍ താല്‍ക്കാലികമായി ഉയര്‍ത്തുകയാണ്. പക്ഷേ ഏതൊരു പ്രോഗ്രാമിനും ഇങ്ങനെ ചെയ്യാന്‍ അവസരമുണ്ടായാല്‍ ദുഷ്ടപ്രോഗ്രാമുകള്‍ക്ക് കമ്പ്യൂട്ടറിലെ ഏത് ഫയല്‍ വേണമെങ്കിലും മായ്ചുകളയാനോ മാറ്റം വരുത്താനോ ഒക്കെ സാധിക്കുമല്ലോ. അതിനാല്‍ സെറ്റ് യുഐഡി, സെറ്റ്ജിഐഡി തുടങ്ങിയ അനുവാദങ്ങള്‍ ഉള്ള ഫയലുകള്‍ക്ക് മാത്രമേ ഇത് ചെയ്യാന്‍ സാധിക്കുകയുള്ളു.

ഇനി ബാക്കിയുള്ള പ്രത്യേക അനുവാദം സ്റ്റിക്കി ബിറ്റ് ആണ്. ഇതും എക്സിക്യൂട്ടബിള്‍ ഫയലുകള്‍ക്ക് മാത്രമായി ഉള്ള അനുവാദമാണ്. ഈ അനുവാദമുള്ള ഫയലുകള്‍ (പ്രോഗ്രാം) എക്സിക്യൂട്ട് ചെയ്ത ശേഷവും (പ്രോസസ്) അവയെ മെമ്മറി അല്ലെങ്കില്‍ സ്വാപ്പ് ഏരിയയില്‍ തന്നെ തുടരാന്‍ അനുദിക്കും. വീണ്ടും എക്സിക്യൂട്ട് ചെയ്യുമ്പോള്‍ വേഗത്തില്‍ പ്രവര്‍ത്തനമാഅംഭിക്കാന്‍ ഇതിനാല്‍ അവക്ക് സാധിക്കുന്നു.

ഒക്റ്റല്‍സംഖ്യാരീതിയില്‍ രേഖപ്പെടുത്തുമ്പോള്‍ സ്റ്റിക്കിബിറ്റ് 01000,സെറ്റ്‌‌ജിഐഡി 02000, സെറ്റ്‌‌യുഐഡി 04000 എന്നിങ്ങനെയാണ് രേഖപ്പെടുത്തുക. നേരത്ത് പറഞ്ഞ മൂന്ന് അനുവാദങ്ങളുമായി ചേര്‍ക്കുമ്പോള്‍ മൊത്തം നാല് അക്കങ്ങളാകും. ഉദാഹരണത്തിന് 04777 എന്ന അനുവാദമാണെങ്കില്‍ എല്ലാവര്‍ക്കും വായിക്കാനും മാറ്റം വരുത്താനും പ്രവര്‍ത്തിപ്പിക്കാനും കഴിയും, കൂടെ പ്രവര്‍ത്തന സമയത്ത് യു ഐ ഡി സെറ്റ് ചെയ്യാനുള്ള അനുവാദവും.

ഈ ലേഖനം ശ്രീ സുബിന്‍ പി. റ്റി അദ്ദേഹത്തിന്റെ ബ്ലോഗില്‍ ക്രിയേറ്റീവ് കോമണ്‍സ് സിസി-ബൈ-എസ്.എ 3.0 ലൈസന്‍സ് പ്രകാരം പ്രസിദ്ധീകരിച്ചതാണ്.