Theory
"Permission denied"
વહેલા કે મોડા campus નો server તમને 'Permission denied' કહેશે જ. એ Linux ની સલામતીની રચના પોતાનું કામ કરી રહી છે એની નિશાની છે. અનેક વપરાશકારો વાપરતા હોય એવા સહિયારા યંત્ર પર દરેક જણ દરેક file ને વાંચી, બદલી કે ચલાવી શકે એ યોગ્ય નથી, એટલે દરેક file પોતાની સાથે permissions રાખે છે જે કહે છે કે કોણ શું કરી શકે.
આખા વિષયના સૌથી અગત્યના મુદ્દાઓમાં આ એક છે, અને વિદ્યાર્થીઓ સૌથી વધુ ગૂંચવાય પણ આમાં જ, કારણ કે chmod જે ટૂંકો આંકડાનો સંકેત (જેમ કે 755) વાપરે છે એ ગૂંચવે છે. આપણે એને ધીરે ધીરે બાંધીશું અને દરેક ગણતરી ચકાસીશું, જેથી octal સંકેત તમને સહજ થઈ જાય.
Theory
ત્રણ permissions, ત્રણ વર્ગ
દરેક file ને ત્રણ permissions હોય છે:
- r (read): file ની અંદરનું જોવું.
- w (write): file બદલવી કે કાઢી નાખવી.
- x (execute): file ને program તરીકે ચલાવવી (અથવા directory હોય તો એની અંદર જવું).
અને આ ત્રણ વર્ગ ના લોકો માટે અલગ અલગ ગોઠવાય છે:
- user (u): file નો માલિક.
- group (g): file ના group ના સભ્યો.
- others (o): બાકીના બધા.
એટલે ls -l નવ permission ના અક્ષરો દેખાડે છે, દરેક વર્ગ માટે ત્રણ: દાખલા તરીકે -rwxr-xr-x નો અર્થ છે કે માલિક વાંચી, બદલી અને ચલાવી શકે છે; group વાંચી અને ચલાવી શકે છે; અને બાકીના પણ વાંચી અને ચલાવી શકે છે.
At a glance
| Permission | અક્ષર | કિંમત |
|---|---|---|
| વાંચવું | r | 4 |
| લખવું | w | 2 |
| ચલાવવું | x | 1 |
| (કશું નહીં) | - | 0 |
Theory
સરવાળો કરીને એક octal અંક
chmod ના સંકેત ચાલે છે એની પાછળની યુક્તિ આ છે. દરેક વર્ગ પાસે જે permissions હોય એમની કિંમતોનો તમે સરવાળો કરો છો, જેમાંથી 0 થી 7 વચ્ચેનો એક અંક મળે છે:
- rwx = 4 + 2 + 1 = 7 (ત્રણેય)
- r-x = 4 + 0 + 1 = 5 (વાંચવું અને ચલાવવું)
- rw- = 4 + 2 + 0 = 6 (વાંચવું અને લખવું)
- r-- = 4 = 4 (ફક્ત વાંચવું)
ત્રણ વર્ગ એટલે ત્રણ અંક. તેથી -rwxr-xr-x નો અર્થ થાય માલિક 7, group 5, others 5, એટલે કે પ્રખ્યાત 755. અને -rw-r--r-- નો અર્થ થાય 6, 4, 4, એટલે કે 644. આ બે, એટલે 755 અને 644, તમને સૌથી વધુ વાર મળનારી ગોઠવણો છે.
Practical
chmod કામ કરતું (ચકાસાયેલું પરિણામ)
$ chmod 755 script.sh # owner rwx=7, group r-x=5, others r-x=5
$ chmod 644 notes.txt # owner rw-=6, group r--=4, others r--=4
$ ls -l
-rwxr-xr-x 1 riya riya ... script.sh # 755
-rw-r--r-- 1 riya riya ... notes.txt # 644
# 755 is typical for scripts/programs (runnable);
# 644 is typical for ordinary data files (not runnable).Quiz
તમારે એવી file જોઈએ છે જેને માલિક વાંચી, લખી અને ચલાવી શકે, અને group તથા others ફક્ત વાંચી શકે. એના માટે chmod નો octal સંકેત કયો?
- 777, કારણ કે એ પૂરેપૂરી છૂટ છે
- 744, કારણ કે માલિક rwx = 7, group r = 4, others r = 4
- 755, કારણ કે માલિક rwx = 7, અને group તથા others r = 5
- 644, કારણ કે માલિક rw = 6
Show the answer
744, કારણ કે માલિક rwx = 7, group r = 4, others r = 4
દરેક વર્ગને અંકમાં ફેરવો. માલિકને rwx જોઈએ = 4 + 2 + 1 = 7. Group ને ફક્ત વાંચવાનું જોઈએ = r-- = 4. Others ને પણ ફક્ત વાંચવાનું જોઈએ = r-- = 4. એટલે સંકેત થાય 744. વિકલ્પ A (777) દરેકને rwx આપે છે (લખવાનું અને ચલાવવાનું પણ), જે group અને others માટે 'ફક્ત વાંચી શકે' કરતાં ઘણું વધારે છે. વિકલ્પ C (755) group અને others ને r-x = 5 આપે છે, જેમાં ચલાવવાની છૂટ પણ આવી જાય છે, પણ આપણને ફક્ત વાંચવાનું જોઈતું હતું, એટલે એમના માટે 5 ખોટો છે. વિકલ્પ D (644) માલિકને ફક્ત rw = 6 આપે છે, અને માલિક માટે જરૂરી ચલાવવાની છૂટ ચૂકી જાય છે. હંમેશા દરેક વર્ગને અલગ અલગ ફેરવો: માલિક 7, group 4, others 4, એટલે 744.
Theory
માલિકી અને મૂળભૂત permissions
Permissions નક્કી કરે છે કે દરેક વર્ગ શું કરી શકે; માલિકી નક્કી કરે છે કે કયા વર્ગમાં કોણ આવે.
- chown file નો માલિક બદલે છે (chown riya file), અને
chown user:group fileમાલિક તથા group બંને ગોઠવે છે. - chgrp ફક્ત group બદલે છે (chgrp students file).
અને તમે નવી file બનાવો ત્યારે એની શરૂઆતની permissions umask માંથી આવે છે, જે અમુક bits ને ઢાંકી દે છે. સામાન્ય umask 022 નવી files ને 644 અને નવી directories ને 755 આપે છે, અને એટલા માટે જ તાજી files બધા વાંચી શકે છે પણ ફક્ત તમે જ એમાં લખી શકો છો. (Mask લાગુ પડે એ પહેલાં directories 777 થી અને files 666 થી શરૂ થાય છે.)
Think first
Directory ને execute ની permission કેમ જોઈએ છે?
Program પર execute નો અર્થ 'એને ચલાવવું' થાય છે. પણ directory પર execute ની permission નો અર્થ શું, અને એ કેમ જોઈએ છે? વિચારીને પછી tap કરો.
Show the answer
Directory પર execute (x) નો અર્થ છે 'તમે એની અંદર જઈ શકો અને અંદરની files ને નામથી પહોંચી શકો', એટલે એ directory માંથી પસાર થવાની પરવાનગી છે, એને ચલાવવાની નહીં. આ ઝીણી વાત જ લોકોને ગૂંચવે છે. Directory પર read (r) તમને એની અંદરનાં નામોની યાદી જોવા દે છે; execute (x) તમને ખરેખર એમાં cd કરીને અંદરની ચોક્કસ file સુધી પહોંચવા દે છે. ઘણી વાર તમને બંને જોઈએ છે: x વગર તમે directory માં દાખલ જ થઈ શકતા નથી, ભલે તમને file નું ચોક્કસ નામ ખબર હોય; અને r વગર તમે ત્યાં શું છે એની યાદી જોઈ શકતા નથી. એટલા માટે જ directories સામાન્ય રીતે 755 (rwxr-xr-x) હોય છે: x વાળા bits લોકોને અંદર જવા અને files સુધી પહોંચવા દે છે, જ્યારે લખવાનું માલિક માટે અનામત રહે છે. જો કોઈ વાર અંદરની files વાંચી શકાય એવી લાગતી હોવા છતાં એ folder માં cd કરતાં 'Permission denied' મળે, તો સામાન્ય રીતે એ directory પર execute નો bit ખૂટતો હોય છે. એટલે directories માટે x ને 'બારણામાંથી પસાર થવાની ચાવી' તરીકે વિચારો, જે program ચલાવવા કરતાં જુદો અર્થ છે, પણ એ જ bit અને octal ગણતરીમાં એ જ કિંમત 1.
Summary
Key takeaways
- દરેક file ને ત્રણ permissions હોય છે, એટલે r (વાંચવું, 4), w (લખવું, 2), x (ચલાવવું, 1), અને એ ત્રણ વર્ગ માટે: user/owner, group, others.
- ls -l નવ permission ના અક્ષરો દેખાડે છે, દરેક વર્ગ માટે ત્રણ, જેમ કે -rwxr-xr-x.
- દરેક વર્ગ માટે કિંમતોનો સરવાળો કરીને એક octal અંક મેળવો: rwx=7, r-x=5, rw-=6, r--=4.
- એટલે chmod 755 = rwxr-xr-x (7,5,5), જે programs માટે સામાન્ય છે; chmod 644 = rw-r--r-- (6,4,4), જે data ની files માટે સામાન્ય છે.
- chown માલિક બદલે છે (chown user:group બંને ગોઠવે છે); chgrp group બદલે છે.
- umask bits ઢાંકીને મૂળભૂત permissions ગોઠવે છે; umask 022 નવી files ને 644 અને નવી directories ને 755 આપે છે.
- Directory પર execute (x) એટલે એની અંદર જવાની પરવાનગી; યાદ રાખવાની કડી: r=4, w=2, x=1, અને દરેક વર્ગ પ્રમાણે સરવાળો.