Saturday, February 15, 2014

Manage File Permission, OwnerShip and Special Permission

                     အခု post ကတော့ Linux ၏ file permission အကြောင်းတွေ owership သတ်မှတ်ပုံ, umask အကြောင်း ထို့နောက် Linux ၏ special permission ဖြစ်တဲ့ SUID, SGID and Sticky bit အကြောင်းတွေ ကို ဆွေး နွေးပါမယ်။

                    Linux file permission အကြောင်းကို ပြောမယ်ဆိုရင် other OS တွေ မှာ လိုပဲ read permission, write permission and execute permission ဆိုပြီး သုံးမျိုးရှိတယ်။ ထို permission များ ကို user, group and other တွေပေါ်မှာ သတ်မှတ်နိုင်တယ်။ နောက်တစ်ခု အနေနဲ့ permission တွေ သတ် မှတ်ရာမှာ "name" နှင့်လဲ သတ်မှတ်နိုင်သလို  number များနှင့်လဲ Linux မှာ သတ်မှတ် နိုင်ပါ တယ်။ Linux မှာ file permission သတ်မှတ်ရာတွင် "chmod" ဆိုတဲ့ command ကို အသုံးပြုပါတယ်။ အဆိုပါ command ဖြင့် permission သတ်မှတ်ရာ "name" ဖြင့် ဆိုလျှှုင် u (user), g (group), o (other) ဖြင့်သတ်မှတ် နိုင်ပြီး permission ကိုတော့ " r (read) " , " w (write) " , " x (execute) " ဆိုပြီး သတ်မှတ် နိုင်ပါတယ်။ Number များနှင့် ဆိုလျှှုင် read=4, write=2 and execute=1 နှင့် အသုံး ပြုပါတယ်။ အခု အောက်မှာ ပြထားတဲ့ ပုံကတော့ testfolder အောက်မှာ ရှိ တဲ့ folder , file များ၏ permission list ကိုပြထားတာ ဖြစ်ပါတယ်။
အခု အဲ့ဒီမှာ ကျွန်တော် color ၃ ရောင် ခွဲထားပါတယ်။ ကျွန်တော်တို့ file,folder များမှာ permission သတ်မှတ် ပြီ ဆိုလျှင် Owner(Owner user) အတွက် နေရာ, Group အတွက်နေရာ  နောက် Other တစ်နည်း အားဖြင့် windows မှာဆိုရင် Everyone အတွက် နေရာဆိုပြီး သတ်မှတ် နိုင်ပါတယ်။ တစ်ကွက်  မှာ 3character ဖြင့် သတ်မှတ် ပါတယ်။ အခု ပထမဆုံး  file1.txt နဲ့ folder1 ၏ ပထမ အဝါရောင် အကွက်သည် ထို file,folder များကို create လုပ်လိုက်သော owner (own user) ၏ နေရာဖြစ်ပါတယ်။ အဝါကွက် ထဲတွင် ရေးထားသည်မှာ "rw-" for file1 and "rwx" for folder1 ဆိုလိုသည်မှာ owner အတွက် file1.txt အပေါ်တွင် ရရှိသော permission မှာ "read,write" ဖြစ်ပြီး "-" ဆိုသည်ကတော့ execute permission owner ကိုမပေးထားဘူးဆိုလိုခြင်း ဖြစ်ပါတယ်။  folder1 အတွက် ဆိုလျှင် owner permission မှာ "read,write,execute" ဖြစ်ပါတယ်။ နောက် နှစ်နေရာ စလုံး၏ အစိမ်းရောင်နေရာ သည် Group အတွက် သတ်မှတ်ထားသော permission နေရာဖြစ်ပါတယ်။ ်file1.txt အတွက် group permission "rw-" (read,write) ပဲ ရပြီး folder1 အတွက် group permission "rwx" (read,write,execute) သုံမျိုးစလုံး ပေးထားပါတယ်။ နောက်ဆုံး တစ်ခု အပြာရောင် အကွက် သည်က တော့ "others" အတွက် ရည်ညွှန်းပါတယ်။ တစ်နည်းအားဖြင့် ထို file,folder များ နှင့် လုံး၀ မသက်ဆိုင် သော others users များ ကို အနည်းဆုံး permission ပေးထားပါတယ်။ file1.txt အတွက်ဆိုလျှှုင် "r--" (read only) ပဲ ရပြီး folder1 အတွက်ဆိုလျှင် "r-x" (read and execute) ပဲ ရရှိပါတယ်။ နောက် က name နှစ်ခု ဖြစ်သော "yan" "yan" သည် အရှေ့က "yan" သည် owner user ကို ရည် ညွှန်းပြီး နောက်က "yan" သည် group ကို ရည်ညွှန်းပါတယ်။ ဆိုလိုသည်မှာ owner user ဖြစ်သော "yan" သည် owner user permission အတိုင်း လုပ်ဆောင်ခွင့် ရပြီး group "yan" ထဲတွင် member ဝင်ထားသော တစ်ခြား users များသည်လဲ သတ်မှတ်ထားသော "group permission" အတိုင်း လုပ်ဆောင် နိုင်မည်ဖြစ်သည်။ Permission အကွက်များ ရဲ့ ရှေ့မှာ file1.txt တွင် "-" sign ပါရှိပြီး folder1 တွင် "d" ပါရှိသည်ကို တွေ့ရပါမည်။ ဆိုလို သည်မှာ "-" သည် file ဖြစ်သည်ကို ရည်ညွှန်းပြီး "d" သည် directory/folder ဖြစ်သည်ကို ရည်ညွှန်းပါ သည်။ အကျဉ်းချုံး ပြန်ရေးလျှင် "-(file)rwx(owner)rw-(group)r--(other)" ဖြစ်ပါတယ်။                          
       
              အခု Linux permission အကြောင်းပြော ပြီးတဲ့ အခါ permission များကို users တွေနဲ့ ဘယ်လို သတ်မှတ် မလဲ ဆိုတဲ့ အကြောင်းကို ပြောပါမယ်။ Permission သတ်မှတ် တဲ့အခါမှာ အထက် တွင် ပြောခဲ့သလိုပဲ Name နှင့်သတ်မှတ်လို့ ရသလို Number များနှင့်လဲ သတ်မှတ်လို့ ရပါတယ်။

             အခု အပေါ်က ပုံမှာ "chmod" command ကို အသုံးပြုပြီး permission ကို "name" နှင့် ပြုလုပ် ပြသွားတာဖြစ်ပါတယ်။ ပုံထဲ ပြထားသည်က "chmod ugo+rwx" ဆိုသည်မှာ file1.txt ကို u(user), g(group), o(other) စလုံး r(read), w(write), x(execute) permission ရအောင် ပေးလိုက်ခြင်းဖြစ်ပါ တယ်။ 
  
            
                အခု အပေါ် က ပုံ မှာ ပြထားတဲ့ permission သတ်မှတ်ပုံကတော့တော့ အစောပိုင်းကလို ugo ဆိုပြီး အားလုံးကို ခြုံပြီး မသတ်မှတ်ပဲ သတ်သတ်ခွဲပြီး သတ်မှတ်ထားတာဖြစ်ပါတယ်။ Default အနေနဲ့ file2.txt ရဲ့ permission မှာ "rw-rw-r--" ဖြစ်ပါတယ်။ စစချင်း owner နေရာမှာ "read,write" ပဲ ရှိနေ တဲ့ အတွက် "chmoe u+x" ဆိုပြီး "execute" permission ကို ထည့်ပါတယ်။ နောက် "ls" command ဖြင့် ပြန်ကြည့် လျှင် user နေရာမှာ "rwx" ဖြစ်နေပါတယ်။ ထိုနည်း အတိုင်းပဲ "read,write" ပဲ ရတဲ့ group ကိုလဲ "chmod g+x" ဆိုပြီး သတ်မှတ်နိုင်ပြီး နောက်ဆုံး permission remove လုပ်မယ် ဆိုလျှင် တော့ "-" sign ကို အသုံးပြုရမှာ ဖြစ်ပါတယ်။ ပုံမှာ other ကို default permission ဖြစ်တဲ့ "read" ကို chmod command ဖြင့် remove လုပ်တာဖြစ်ပါတယ် "chmoe o-r" ။ ဆိုတော့ add လုပ်မည် ဆို လျှှုင် "+" sing ကို သုံးပြီး remove ဆိုလျှှုင် "-" sign ကို Name ဖြင့် permission သတ်မှတ်ရာမှာအသုံး ပြုပါတယ်။

              နောက်တစ်နည်း ဖြစ်တဲ့ permission ကို number ဖြင့် ပေးပါမယ်။ Number ကို ပြန်ပြောလျှင် Read Permission = 4 , Write Permission = 2 , Execute Permission = 1 ဟူရျ် သတ်မှတ်ပါတယ်။ ဆိုတော့ "rwx" ဆိုလျှင် "4+2+1=7" ဖြစ်သောကြောင့် user အတွက် "rwx" သတ်မှတ် ချင်လျှင် "7" ဟု သုံးမှ permission အပြည့်အ၀ ရမည် ဖြစ်ပါတယ်။

             
           အထက်ပါ ပုံတွင် ဆိုလိုသည်မှာ "chmod 777 " သည် user,group,other စလုံးကို "read,write,execute" အကုန် ပေးထားသည်ဟူရျ် ဖြစ်ပါတယ်။ 


          အထက်ပါပုံ တွင် ပထမဆုံး file4 ၏ default permission မှာ "rw-rw-r" ဆိုရျ် ဖြစ်သည်။ ပထမ ဆုံး command မှာ chmod ဖြင့် file4 ကို user only အတွက်ပဲ "rwx" ပေးသည့် ပုံစံ ပြုလုပ်ထားပါတယ်။ " chmod 700 " ဆိုသည်မှာ user အတွက် (7 = 4+2+1) ကျန်သော group (0) , other (0) ဟူ ရျ် ဖြစ်ပါသည်။ ဒုတိယ command "chmod 760 " သည် user အတွက် "rwx" "7"  group အတွက် " 4+2 = 6 " "read,write" permission သတ်မှတ်ပြီး other အတွက် " no access = 0 " သတ်မှတ် ပါတယ်။  နောက်ဆုံး command " chmod 705 " သည် user အတွက် "rwx=7" group အတွက် " no access=0" နှင့် other အတွက် " 4+1=read+execute" သတ်မှတ် ထားခြင်းဖြစ်ပါတယ်။ ဒါဆိုရင် Linux ၏ file permission အကြောင်းနှင့် ပေးပုံ ပေးနည်းကို သိလောက်ပြီထင်ပါတယ်။



UMASK

             umask value ဆိုသည်မှာ အခု ကျွန်တော်တို့ အထက်မှာ file တွေ folder တွေ တည်ဆောက် ခဲ့တယ် permission တွေ သတ်မှတ်ခဲ့တယ် ဒါပေမဲ့ အရင်ဆုံး စစချင်း fileတွေ directory တွေ ဆောက်ပြီး တာ နဲ့ ရရှိလာတဲ့ default permission တွေကို အခု ဒီ umask က သတ်မှတ်ပေးတာပါ။ ဒါကြောင့် ကျွန်တော် တို့ တွေသည် umask ၏ default permission တွေကို ပြင်ဆင်သတ်မှတ်နိုင်ပါတယ်။ ပြောချင် သည်က အခုလို umask value ပြင်ဆင်လိုက်လျှှုင် နောင် file,folder တွေ တည်ဆောက်တဲ့ အချိန်မှာ စစချင်း အားလုံးကို ဥပမာ full access "777" လိုမျိုးဖြစ်စေချင်ရင် "chmod" command တွေ သုံးစရာ မလိုပဲ default permission အနေနဲ့ ရလာမှာ ဖြစ်ပါတယ်။

              umask ၏ permission သတ်မှတ်ပုံ နှစ်မျိုး ရှိပါတယ်။ သာမန် user တွေ တစ်နည်းအားဖြင့် linux မှာ user id 200 နှင့် အထက်ကို normal user အနေနဲ့ သတ်မှတ်ပြီး uid 200 အောက်ကိုတော့ system users တွေ အတွက် သတ်မှတ်ထားပါတယ်။ အခု umask မှာ normal user အတွက်ဆိုရင် umask value "002" ဟု သတ်မှတ်ပြီး root အတွက်ဆိုလျှှုင် umask value "022" ဆိုပြီး default သတ်မှတ် ထားပါတယ်။အောက်က ပုံတွင်ပြထားပါတယ်။


              ပုံမှာ "umask" command ကို အသုံးပြုပြီး normal user နဲ့ root user umask value ကွဲပြားပုံ ကို ယှဉ်ပြထားပါတယ်။ ပုံထဲမှာ "0002" "0022" ဖြင့် ရှေ့ က zero တစ်လုံးပို နေတယ် ထိုသည်က နောက် လာမည့် special permission ဆိုတဲ့ အခန်း ရောက် မှ အသုံးချ မှာပါ။ လောလောဆယ်ကတော့ umask value သည် ၃ခု ပဲ ဖြစ်ပါတယ်။ နောက်တစ်ခု အနေနှင့်က umask value ကိုတွက်ချက် ကြည့်မှာပါ။




                 umask ၏ default အရ normal user mode တွင်  file permission မှာ "664" ဖြစ်ပြီး folder permission မှာ "775" ဖြစ်ပါတယ်။ ၎င်း permission များ ဘယ်လို ရလာလဲ ဆိုသည်ကို ပြောမှာ ဖြစ်ပါတယ်။ သတ်မှတ် ပုံမှာ file အတွက် base permission မှာ "666" ဖြစ်ပြီး folder/directory အတွက် base permission မှာ "777" ဖြစ်ပါတယ်။ ထို့နောက် umask value နှင့် subtract လုပ်မှ file အတွက် ဆိုလျှင် normal user အတွက် "666-002=664" ရလာသည် ဖြစ်သည်။ နောက် normal user mode folder/directory permission "775" default ရလာသည်မှာ "777-002=775" ကြောင့်ဖြစ်သည်။ Normal user mode အတွက် default umask value မှာ "002" ဖြစ်သည်။ 

                root user အတွက်ဆို လျှင်တော့ umask value သည် "022" ဖြစ်သော ကြောင့် file အတွက် ဆိုလျှှုင် (666-022=644) default permission ရသည် ဖြစ်ပြီး folder အတွက် ဆိုလျှင် (777-022=755) default permission ရခြင်း ဖြစ်ပါတယ်။

Changing umask value
                   umask value ကို permanent မပြင်ဘဲ file,folder တစ်ချို့ အတွက် သာ သက်သက် customize ပေးချင်တယ်ဆိုလျှင် terminal ပေါ်မှာ အရင်ဆုံး $umask 000 ဆိုပြီး ပေးလိုက်ပါ ထို့နောက် မှ မိမိ တည်ဆောက်လိုသော file များ folder များကို တည်ဆောက်ပါ ပြီးလျှင် permission ကြည့်ကြည့် ပါက 000 ဖြစ်သောကြောင့် file သည် rw-rw-rw ရနေမည်ဖြစ်ပြီး folder သည် "rwxrwxrwx" ရနေမည် ဖြစ်သည်။ အောက်ကပုံတွင်ကြည့်ါပါ။

                
                 အခု umask value ကို permanent ပြင်ချင်တယ် ဆိုလျှင်တော့ user အားလုံးအတွက်ဆို လျှှုင် "/etc/bashrc or /etc/profile" မှာ ပြင်ရမည် ဖြစ်ပြီး အခု ရောက်နေတဲ့ current user အတွက် ဆို လျှင် " ~/.bashrc " ထဲမှာ ဝင်ရောက် ပြင်ဆင်ပေးရမှာ ဖြစ်ပါတယ်။ အခု အောက်က ပုံ မှာ လောလော ဆယ် ဝင်ထားတဲ့ current user ၏ umask ကို ပြောင်းလဲထားပုံကို ပြထားပါတယ်။ Note အနေနဲ့ umask value ပြောင်းပြီးလျှင် စက်ကို reboot တစ်ခါချမှ effect ဖြစ်မည်ဖြစ်ပါတယ်။ Computer ကို reboot ချပြီး ကြည့် လျှင် umask value 000 ဖြစ်နေမည် ဖြစ်ပြီး ပုံတွင် အရင် ရှိ ပြီးသာ file1 နှင့် umask change ပြီးမှ ဖွဲ့လိုက်သော file2 ၏ permission ကိုပြထားပါသည်။





OwnerShip
                 အခု tutorial မှာတော့ Linux မှာ ownership ဘယ်လိုသတ်မှတ်လဲ ဆိုတာပြောမှာပါ။ Ownership ဆိုတာက ဥပမာ ဒီ file ကို ဘယ် user က ပိုင်တယ် ဘယ် group ကပိုင်တယ် ဆိုပြီး သတ်မှတ် ခြင်းဖြစ်ပါတယ်။ Ownership သတ်မှတ်ရန် အတွက် Linux တွင် "chown" နှင့် "chgrp" နှစ်မျိုး ကို အသုံးပြုပါတယ်။ အောက်တွင် ပြထားသော ပထမ ပုံတွင် "chown yan file1.txt" သည် user နေရာ ကို root အစား user "yan" နှင့် အစားထိုး ခြင်းဖြစ်သည်။ နောက် "chgrp yan file1.txt" ဆိုသည် မှာ  group " root " ကို  group "yan" နှင့် ပြောင်းလဲ သတ်မှတ်လိုက်ခြင်းဖြစ်ပါတယ်။

                 ဒီပုံမှာတော့ "chown" command ဖြင့် တစ်ခါတည်း "user,group" သတ်မှတ်လို့ ရနိုင် တာကို လုပ်ပြထားပါတယ် "chown yan:yan file2.txt" ဆိုပြီးတော့ပါ။ နောက်တစ်နည်း အနေ နှင့် "chown -R" command ဖြင့် အသုံးပြုပါက folder အပါဝင် folder အတွင်းရှိ files များပါ user နေရာတွင် သတ်မှတ်လိုက် သော user တစ်ခါ ထဲ ရောက်သွားမည် ဖြစ်သည်။   


  


         
SUID, SGID AND Sticky Bit

                     အခု post ရဲ့ နောက်ဆုံး topic ကိုရောက်လာပါပြီ။ အခု တွေ့နေရတဲ့ suid (Set User ID),sgid (Set Group ID) and sticky bit ဆိုတာတွေ က linux ၏ special permission တွေ ဖြစ်ပါတယ်။ နည်းနည်းတော့ ရှုပ်သလို ရှိနိုင်ပါတယ်။ ဒါကြောင့် အကျဉ်းချူံး ဘယ် permission က ဘယ်လို အကျိုးသက်ရောက်သလဲ ဆိုတာကို ပြောပါမယ်။ အရင် ဆုံး suid အကြောင်းကို စပြောပါမယ်။ အခု ဒီ special permisson တွေ သတ်မှတ်ရင်လည်း permission ပေးတဲ့ နေရာမှာ အသုံးပြုတဲ့ "chmod" command ကို ပဲ အသုံးပြုမှာ ဖြစ်ပါတယ်။ အရင်ဆုံး တစ်ခုချင်းဆီမှာ သူတို့၏ တန်ဖိုး နံပါတ်တွေ ရှိပါတယ် "suid=4" , "sgid=2" and "stickybit=1" read,write,execute permission တန်ဖိုးတွေလိုပဲ ဖြစ်ပါတယ်။

                     SUID ကို အထူးသဖြင့် executable file တွေမှာအသုံးပြုပါတယ်။ ပုံမှန် အားဖြင့် script file တစ်ခုကို other မှာ executable permission သတ်မှတ်ထားလျှင် currently logged in ဝင်ထားတဲ့ users တိုင်းသည် ကိုယ်ပိုင် access ဖြင့် အသုံးပြုနိုင်သည်။ ထို script ဖိုင်ကို suid သတ်မှတ်လိုက် လျှင် နောက်ပိုင်း မည်သည့် users မဆို run လျှင် script owner ၏ permission ဖြင့်သာ ဥပမာ owner သည် root ဖြစ်ပါက "user1" နှင့်ပဲ log-in ဝင်ပြီး အသုံးပြုစေကာမူ root ၏ permission ဖြင့်သာ သွားမည် ဖြစ်ပါသည်။ SUID သတ်မှတ်ပုံမှာ "name" နှင့်လဲ ရသလို "number" နှင့်လဲ ရပါသည် "chmod u+s " or "chmod 4755" ဆိုပြီး သတ်မှတ်နိုင်ပါသည်။ သတ်မှတ်လိုက်လျှင် user နေရတွင် ရှိသော "rwx" နေရာတွင် "rw(s)" ဆိုပြီး ပြမည်ဖြစ်သည်။ အောက်ပုံတွင် ပြထားပါသည်။




             နောက်ထပ် ဥပမာ အနေနှင့် system command တစ်ခုဖြစ်တဲ့ ping command သည် normal users များ အနေနဲ့ send and receive လုပ်ဖို့ရန်အတွက် sockets files တွေ ports တွေ ကို ဖွင့်ဖို့ ရန်အတွက် permission မရှိပါ။ ဒါပေမယ့် ping command ကို suid သတ်မှတ်လိုက်သောအခါ normal user သည် root access permission ဖြင့် အသုံးပြုနိုင် သွားခြင်းဖြစ်ပါတယ်။ အောက်ပုံတွင် ပြထားပါ သည်။

              SGID ကို folder တွေ မှာ အများဆုံး အသုံးပြုပါတယ်။ ပြောချင်သည်က folder တစ်ခုတွင် SGID သတ်မှတ်လိုက်ပါက group permission နေရတွင် common group တစ်ခုထဲကိုပဲ ဘုံထားလို့ ရသွားမည် ဖြစ်ပါသည်။ SGID သတ်မှတ်ပုံမှာ "chmod g+s" or "chmod "2777" ဆိုရျ် သတ်မှတ် နိုင်ပါသည်။ အောက်ပုံတွင် root user နှင့် တစ်ကြိမ် normal user နှင့် တစ်ကြိမ် create လုပ်ပြ ထားပါသည်။



             နောက်ဆုံး တစ်ခုဖြစ်သော sticky bit သည် မိမိ၏ folder တွေကို other users တွေ အလွယ်တကူ မဖျက်နိုင်အောင် ကာကွယ်ပေးနိုင်သည်။ other users များကို full permission ပေးစေ အုံး

sticky bit ထို folder ပေါ်မှာ သတ်မှတ်ထားလျှှုင် ၎င်းထဲရှိ files များကို other users များ ဖျက်ရျ်ရမည် မဟုတ်ပါ။ sticky bit သတ်မှတ်ပုံမှာ "chmod o+t" or "chmod 1777" များသောအားဖြင့် special permission တွေမှာ name ဖြင့် သတ်မှတ်ထားများပါတယ်။ အခု "chmod o+t" သတ်မှတ် လိုက်သော အခါ other permission place တွင် "rwx" အစား "rwt" ဖြစ်သွားမည်ဖြစ်သည်။ အောက်ပုံတွင် folder ကို sticky bit ပေးလိုက်သောအခါ အထဲတွင် "chmod 777" ဖြင့် full access ပေးထားသောလဲ တစ်ခြား user yan နှင့် ဝင်သောအခါ "rm" command ဖြင့် delete လုပ်လည်း operation not permitted ဖြစ်နေ မည်ကိုတွေ့ ရပါမည်။











Share:

1 comment:

Note: Only a member of this blog may post a comment.