> For the complete documentation index, see [llms.txt](https://sh.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sh.howtocode.dev/1.0.0.part1intro/1.6.0.permission/1.6.5.specialpermission.md).

# বিশেষ পারমিশন

আমরা আগের [লেসনে](/1.0.0.part1intro/1.6.0.permission/1.6.4.masking.md) দেখেছি, মাস্কিং এর সময় চার অঙ্কের অকটাল সংখ্যা ব্যবহার করেছি। এর প্রথম অংকটি কিছু স্পেশাল পারমিশন নির্দেশ করতে কাজে লাগে। প্রথম অংক বা বিটকে ব্যবহার করে তিনটি স্পেশাল পারমিশন দেয়া হয়:

* ***setuid***: এর অকটাল বিট 4000 এবং কোনো প্রোগ্রামকে এই পারমিশন দিতে আমরা লিখতে পারি:

```
chmod u+s program_name
```

কমান্ডটি দিলে দেখা যাবে ইউজারের এক্সিকিউশন পারমিশনের জায়গায় যে x ছিল সেটি বদলে s হয়ে গেছে।

এই পারমিশন দিলে সিস্টেম দেখবে প্রোগ্রামটার আসল ওনার বা মালিক ইউজার কে। এবং তার সব পারমিশন সুদ্ধ প্রোগ্রামটি চালাতে দেবে। এর একটা বাস্তব ব্যবহার দেখলে প্রয়োজনীয়তা বুঝতে পারবেন। যেমন মনে করুন 'passwd' কমান্ডটির কথা। এই কমান্ডটি দিয়ে কেউ তার পাসওয়ার্ড পরিবর্তন করতে পারবেন। কিন্তু পাসওয়ার্ডগুলো কোথায় সংরক্ষিত থাকে? এটা থাকে **/etc/shadow** ফাইলে। এই ফাইলটার মালিক রুট। এখন ভাবুন আপনি আপনার পাসওয়ার্ড পরিবর্তন করতে চাচ্ছেন। কিন্তু কিভাবে করবেন যদি ওই ফাইলে আপনার অধিকার না থাকে? সিক্যুরিটির জন্য একজন সাধারন ইউজারকে সেই ফাইলে অধিকার দেওয়া নিরাপদ না। তারচেয়ে আপনাকে যদি `passwd` কমান্ডটি এভাবে ব্যবহার করতে দেয়া হয় যে আপনি ওটা এমনভাবে ব্যবহার করতে পারবেন যে ওটা ব্যবহারের সময় আপনি রুটের মতই সবকিছু করতে পারবেন। তাহলে বরং সুবিধা হয়। আপনি তখন নিজের পাসওয়ার্ড চেঞ্জ ছাড়া আর কোনো কারনে /etc/shadow ব্যবহার করতে পারবেন। না। এজন্য প্রায় সব লিনাক্স সিস্টেমে `passwd` কমান্ডটিকে setuid পারমিশন দিয়ে রাখা হয়। ফলে যখন সাধারন ইউজার ওই কমান্ডটি ব্যবহার করে সুপারইউজার বা রুটের মতই ব্যবহার করতে পারে, প্রয়োজনীয় ফাইলে এক্সেস নিতে পারে অন্যসময় পারে না।

বুঝতেই পারছেন এটি একটি সাংঘাতিক পারমিশন। খুব সামান্য কিছু প্রোগ্রাম ছাড়া মোটেই এই পারমিশন দেয়া হয় না।

* ***setgid***: এর অকটাল বিট 2000 এবং এটি গ্রুপের উপর কার্যকর হয়। এবং এটি প্রোগ্রাম নয় বরং ডিরেক্টরির ক্ষেত্রে প্রযোজ্য। আপনি এই পারমিশন দিতে পারেন এভাবে:

```
chmod g+s directory
```

কমান্ডটি দিলে গ্রুপের এক্সিকিউশন পারমিশনের x পরিবর্তিত হয়ে s হয়ে যাবে।

আপনি যখন কোথাও কোনো ফাইল বা ডিরেক্টরি তৈরী করেন, সেটি আপনার নামের একটি গ্রুপের মালিকানায় থাকে। কিন্তু আপনি একটা ডিরেক্টরি তৈরি করলেন আর তার ওনার গ্রুপের নাম মনে করুন **shared**। এবার এটিকে আপনি setgid পারমিশন দিলেন। ফলে হবে কি, এর মধ্যে আপনি যখন নতুন কোনো ফাইল তৈরী করবেন এটি কিন্তু আর আপনার নামের গ্রুপে থাকবে না, বরং ওই ডিরেক্টরির মালিক অর্থাৎ **shared** গ্রুপের অধীনে থাকবে। সাধারনত একাধিক ইউজার নিজেদের মধ্যে ফাইল শেয়ারিং এর পারমিশন এর ঝামেলা এড়াতে এটি ব্যবহার করে।

* ***sticky bit***: এই পারমিশনটিও ডিরেক্টরির উপর কার্যকর হয়। এই পারমিশন কোনো ডিরেক্টরিকে দিতে ব্যবহার করুন:

```
chmod +t directory
```

এটি দিলে দেখবে ওয়ার্ল্ডের এক্সিকিউশন পারমিশনের x এর জায়গায় t এসেছে।

কোনো ডিরেক্টরিকে এই পারমিশন দিলে তার মধ্যের কোন ফাইল ডিলিট বা তার নাম পরিবর্তন করতে পারবে না সবাই। ডিলিট বা নাম পরিবর্তন করতে হয় তাকে এই ডিরেক্টরির মালিক হতে হবে, অথবা ওই ফাইলটির মালিক হতে হবে অথবা হতে হবে একজন সুপারইউজার। শেয়ারড ফোল্ডারে অনাকাঙ্খিত অনুপ্রবেশ ম্যানিপুলেশন ঠেকাতে এটি ব্যবহার করা হয়।
