Understanding About Linux Umask and Permission

Umask (User Mask অথবা User file creation Mask) Umask অথবা Umask ভ্যালু হচ্ছে, লিনাক্সের ফাইল/ডিরেক্টরি পার্মিশন লেভেল। অর্থাৎ লিনাক্সে যখন কোনো ফাইল/ডিরেক্টরি তৈরি করা হয়, তখন umask ভ্যালুর উপর ভিত্তি করে সিস্টেম থেকে পার্মিশন লেভেল সেট হয়।

লিনাক্সে ডিফল্ট ফাইল এবং ডিরেক্টরির পার্মিশন হচ্ছেঃ

  • ডিরেক্টরিঃ 755 (drwxr-xr-x)
  • ফাইলঃ 644 (-rw-r–r–)

লিনাক্স সিস্টেমের ডিফল্ট umask ভ্যালু হচ্ছেঃ

  • রুট (root) ইউজারঃ 0022
  • রেগুলার ইউজারঃ 0002
  • নিচের কমান্ডের মাধ্যমে রুট (root) ইউজারের ডিফল্ট umask ভ্যালু চেক করা যাবেঃ 

[root@desktop ~]# umask

0022

  • নিচের কমান্ডের মাধ্যমে রেগুলার ইউজারের (student) ডিফল্ট umask ভ্যালু চেক করা যাবেঃ

[student@desktop ~]$ umask

0002

উদাহরণ হিসেবে যদি কোনো নতুন ফাইল/ডিরেক্টরি তৈরি করি, তখন umask ভ্যালু কিভাবে কাজ করে সেটা এখন আমরা দেখব। আমরা file1 এবং dir1 নামে একটি করে ফাইল এবং ডিরেক্টরি তৈরি করি এবং ‘ls -l’ কমান্ডের মাধ্যমে পার্মিশন সম্পর্কিত সকল তথ্য পেতে পারিঃ

এখানে আমরা দেখতে পাচ্ছি যে, ডিরেক্টরি পার্মিশন 755 এবং ফাইল পার্মিশন হিসেবে 644 আছে। যাদের 755 এবং 644 বুঝতে সমস্যা হচ্ছে তাদের জন্য একটু ব্যাখ্যা করি। এখানে ফাইল এবং ডিরেক্টরির দ্বিতীয় ফিল্ড অর্থাৎ file1 (rw-r–r–) এবং dir1 (rwxr-xr-x) পার্মিশন দেওয়া আছে।

এখানে rwx থেকে যদি বিস্তারিত জানতে চাই তাহলেঃ 

  • r = read, (4)
  • w = write, (2)
  • x = execute, (1)
  • = no permission, (0)

অর্থাৎ file1 (rw-r–r–) এর পার্মিশন হবে 644 এবং dir1(rwxr-xr-x) এর পার্মিশন হবে 755

কিভাবে umask ভ্যালু বের করবেন?

আমরা ইতিমদ্ধ্যে জেনেছি যে, রুট (root) ইউজারের ডিফল্ট umask ভ্যালু 0022 এবং রেগুলার ইউজারদের ডিফল্ট umask 0002। মিনিমাম এবং ম্যাক্সিমাম ভ্যালু হচ্ছেঃ    

  • ডিরেক্টরির জন্য মিনিমাম এবং ম্যাক্সিমাম umask ভ্যালুঃ 000 এবং 777
  • ফাইলের জন্য মিনিমাম এবং ম্যাক্সিমাম umask ভ্যালুঃ 000 এবং 666

এখানে একটা প্রশ্ন থাকতে পারে যে, ফাইলের জন্য umask ভ্যালু 666 কেন? কারণ শুধুমাত্র বাইনারি এবং স্ক্রিপ্ট ফাইলে executable পার্মিশন থাকে এবং রেগুলার ফাইলে কোনো executable পার্মিশন থাকে না। একটা ফাইলে read/write পার্মিশন থাকলেই সেটাতে আমরা লিখতে/পড়তে বা এডিট করতে পারি এই জন্য ফাইলের সর্বোচ্চ পার্মিশন হোলো 666। কিন্তু দরকার হলে আমরা যেকোনো রেগুলার ফাইলকে executable করে নিতে পারি। আর ডিরেক্টরির ক্ষেত্রে যদি কোনো executable পার্মিশন না থাকে তাহলে সে ডিরেক্টরি আমরা এক্সেস করতে পারব না। এজন্য ডিরেক্টরির ক্ষেত্রে সর্বোচ্চ পার্মিশন 777 দেওয়া হয়। আমরা এখন umask ভ্যালু থেকে কিভাবে ফাইল পার্মিশন বের করা হয়, সেটা নিয়ে আলাপ করবো। 

যদি ম্যাক্সিমাম ফাইল/ডিরেক্টরি পার্মিশন (666/777) থেকে umask ভ্যালু বাদ দেওয়া হয়, তাহলে যে আউটপুট পাবো, সেটাই হচ্ছে ফাইল/ডিরেক্টরির বর্তমান পার্মিশন। উদাহরণ হিসেবে বর্তমান umask চেক করা যাকঃ  

[root@desktop ~]# umask

0002

যেহেতু এখানে ‘root’ ইউজারের umask ভ্যালু 0022 সুতরাং ফাইল/ডিরেক্টরির ডিফল্ট পার্মিশন হবেঃ

[student@desktop ~]$ umask

0002

এখানে রেগুলার ইউজারের (student) umask ভ্যালু 0002 সুতরাং ফাইল/ডিরেক্টরির ডিফল্ট পার্মিশন হবেঃ

আমরা যদি এখন umask ভ্যালু পরিবর্তন করি এবং নতুন ফাইল/ডিরেক্টরি তৈরি করি তাহলে, নতুন umask ভ্যালুর উপর ভিত্তি করে ফাইল/ডিরেক্টরির নতুন পার্মিশন সেট হবে। umask ভ্যালু দুই ভাবে পরিবর্তন করা যায়। প্রথমত কমান্ডের মাধ্যমে অস্থায়ী ভাবে (Temporary) এবং দ্বিতীয়ত এডিটর (vim/vi) ব্যবহার করে স্থায়ী (Permanently) ভাবে। 

  • নিচের কমান্ডের মাধ্যমে রুট (root) ইউজারের umask ভ্যালু পরিবর্তন করা যাবেঃ 

[root@desktop ~]# umask 0044

[root@desktop ~]# umask

0044

উদাহরণ হিসেবে প্রথম কমান্ডের মাধ্যমে umask ভ্যালু 0044 সেট করেছি এবং দ্বিতীয় কমান্ড দিয়ে নতুন umask সেট হয়েছে কিনা সেটা দেখলাম। যেহেতু সিস্টেমের নতুন umask ভ্যালু 0044 সুতরাং এর পরে আমরা যত ফাইল/ডিরেক্টরি তৈরি করবো সব নিচের মত পার্মিশন সেট হবেঃ    

umask ভ্যালু পরিবর্তন করার পর এখন দেখব পার্মিশন কি সেট হয়? আমরা file2 এবং dir2 নামে আবার একটা ফাইল এবং একটা ডিরেক্টরি তৈরি করি এবং ‘ls -l’ কমান্ড দিয়ে পার্মিশন চেক করিঃ  

এখানে ডিরেক্টরি dir1 ও dir2 এবং ফাইল file1 ও file2 এর মধ্যে তুলনা করলে নতুন ফাইলের পার্মিশন 622 (rw–w–w-) এবং ডিরেক্টরির পার্মিশন 733 (rwx-wx-wx) বর্তমান umask উপর ভিত্তি করে সেট হয়েছে।

আমরা যেহেতু অস্থায়ী (Temporary) ভাবে umask ভ্যালু সেট করেছি সুতরাং সিস্টেম রিবুট/রিস্টার্ট দেবার পরে umask ভ্যালু আবার ডিফল্ট মোডে (0022) চলে যাবে। এজন্য সিস্টেমে স্থায়ী ভাবে (Permanently) umask ভ্যালু সেট করতে হলে ‘/etc/profile’ ফাইলটি এডিট করে 62 নাম্বার লাইনে ইচ্ছামত umask ভ্যালু পরিবর্তন করে সিস্টেম রিস্টার্ট দিতে হবে অথবা ‘source’ কমান্ড চালাতে হবে।

  • নিচের কমান্ডের মাধ্যমে ‘/etc/profile’ ফাইলে বর্তমান umask ভ্যালু দেখা যাবেঃ

[root@desktop ~]# sed -n 62p /etc/profile

 umask 022

[sp_comments_block]