Linux में फ़ाइल अधिकार: chmod, chown और sudo उदाहरणों के साथ
Linux में फ़ाइल अधिकार तीन समूहों rwx से तय होते हैं: मालिक, ग्रुप और बाक़ी लोगों के लिए; इन्हें chmod से प्रतीकात्मक रूप (chmod u+x) या संख्यात्मक रूप (chmod 755, जहाँ r=4, w=2, x=1) में बदला जाता है। मालिक chown से बदलता है, और प्रशासनिक काम sudo से होते हैं। Permission denied त्रुटि का मतलब लगभग हमेशा यह होता है कि आपके यूज़र के पास फ़ाइल या रास्ते की किसी डायरेक्टरी पर ज़रूरी अधिकार नहीं है।
Linux में फ़ाइल अधिकार बताते हैं कि कौन क्या कर सकता है। हर फ़ाइल का एक मालिक, एक ग्रुप और तीन समूह अधिकार होते हैं: मालिक के लिए, ग्रुप के लिए और बाक़ी सबके लिए। इन्हें chmod से बदला जाता है, मालिक को chown से, और प्रशासनिक काम sudo से होते हैं। आइए देखें कि अधिकार कैसे पढ़े जाते हैं, कैसे बदले जाते हैं और Permission denied त्रुटि कैसे ठीक होती है।
फ़ाइल के अधिकार कैसे देखें
अधिकार ls -l के आउटपुट में दिखते हैं:
$ ls -l
-rw-r--r-- 1 alice developers 1204 Oct 10 14:02 notes.txt
-rwxr-xr-x 1 alice developers 356 Oct 10 14:05 deploy.sh
drwxr-x--- 2 alice developers 4096 Oct 10 13:50 secrets
पहले दस अक्षर इस तरह पढ़े जाते हैं:
- पहला अक्षर — प्रकार:
-साधारण फ़ाइल,dडायरेक्टरी,lसिमलिंक। - अक्षर 2–4 — मालिक (user) के अधिकार।
- अक्षर 5–7 — ग्रुप (group) के अधिकार।
- अक्षर 8–10 — बाक़ी लोगों (others) के अधिकार।
इसके बाद हार्ड लिंक की संख्या, मालिक (alice), ग्रुप (developers), आकार, तारीख़ और नाम आते हैं। एक फ़ाइल के लिए stat कमांड सुविधाजनक है:
$ stat -c '%A %a %U:%G %n' deploy.sh
-rwxr-xr-x 755 alice:developers deploy.sh
r, w और x का मतलब
फ़ाइल और डायरेक्टरी के लिए इनका अर्थ अलग है, और यही उलझन की मुख्य वजह है।
| ead> | ||
|---|---|---|
| अधिकार | फ़ाइल के लिए | डायरेक्टरी के लिए |
r (read) | सामग्री पढ़ना | फ़ाइलों की सूची देखना (ls) |
w (write) | सामग्री बदलना | अंदर फ़ाइलें बनाना, हटाना और नाम बदलना |
x (execute) | प्रोग्राम की तरह चलाना | डायरेक्टरी में जाना (cd) और पाथ से फ़ाइलों तक पहुँचना |
ध्यान दें: किसी फ़ाइल को वह यूज़र भी हटा सकता है जिसके पास उस फ़ाइल में लिखने का अधिकार नहीं है, बशर्ते उसके पास डायरेक्टरी पर w और x हो। और डायरेक्टरी पर x न हो, तो फ़ाइल पढ़ने का अधिकार होने पर भी अंदर की फ़ाइल नहीं खुलती।
सिस्टम क्रम से जाँच करता है: अगर आप मालिक हैं, तो मालिक के अधिकार लागू होते हैं; अगर नहीं, और आप फ़ाइल के ग्रुप में हैं, तो ग्रुप के अधिकार; वरना बाक़ी लोगों के। यूज़र root पढ़ने और लिखने की जाँच को छोड़ देता है।
संख्यात्मक रूप: 755, 644, 600
हर अधिकार का एक वज़न है: r = 4, w = 2, x = 1। तीनों समूहों के लिए इन वज़नों का जोड़ 0 से 7 के बीच एक अंक देता है।
| ead> | ||
|---|---|---|
| अंक | अधिकार | गणना |
| 7 | rwx | 4+2+1 |
| 6 | rw- | 4+2 |
| 5 | r-x | 4+1 |
| 4 | r-- | 4 |
| 0 | --- | 0 |
कुछ आम सेट, जो याद रखने लायक हैं:
| ead> | ||
|---|---|---|
| मोड | रूप | कहाँ इस्तेमाल होता है |
644 | rw-r--r-- | साधारण फ़ाइलें, कॉन्फ़िग, HTML |
755 | rwxr-xr-x | डायरेक्टरी, स्क्रिप्ट और प्रोग्राम |
600 | rw------- | निजी SSH कीज़, पासवर्ड वाली फ़ाइलें |
700 | rwx------ | ~/.ssh डायरेक्टरी, निजी डायरेक्टरी |
640 | rw-r----- | कॉन्फ़िग जिन्हें सर्विस का ग्रुप पढ़ता है |
777 | rwxrwxrwx | सबको सब कुछ — लगभग कभी ज़रूरी नहीं |
chmod कमांड: अधिकार कैसे बदलें
संख्यात्मक मोड
संख्यात्मक रूप पूरे अधिकार एक बार में तय करता है:
chmod 644 index.html
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519
प्रतीकात्मक मोड
प्रतीकात्मक रूप बाक़ी अधिकारों को छुए बिना सिर्फ़ चुने हुए अधिकार बदलता है। किसके लिए: u मालिक, g ग्रुप, o बाक़ी, a सब। क्रिया: + जोड़ना, - हटाना, = ठीक वही सेट करना।
chmod +x deploy.sh # चलाने की अनुमति दें
chmod u+x,g-w file # मालिक को चलाने की अनुमति, ग्रुप से लिखना हटाएँ
chmod o-rwx secrets/ # बाक़ी लोगों को कुछ नहीं
chmod g=rx app/ # ग्रुप को ठीक पढ़ने और अंदर जाने की अनुमति
रिकर्सिव: फ़ाइलें और डायरेक्टरी अलग तरह से
-R फ़्लैग अधिकार पूरी ट्री पर लगाता है। लेकिन chmod -R 755 सारी फ़ाइलों को चलाने योग्य बना देगा, जो आमतौर पर नहीं चाहिए। बेहतर है कि find से फ़ाइलें और डायरेक्टरी अलग करें:
find /srv/site -type d -exec chmod 755 {} +
find /srv/site -type f -exec chmod 644 {} +
एक छोटा तरीक़ा भी है: बड़ा X चलाने का अधिकार केवल उन डायरेक्टरी और फ़ाइलों को देता है, जिनके पास पहले से यह अधिकार हो।
chmod -R u=rwX,go=rX /srv/site
chown कमांड: मालिक और ग्रुप बदलना
फ़ाइल का मालिक केवल root बदल सकता है, इसलिए chown लगभग हमेशा sudo से चलाया जाता है।
sudo chown alice report.txt # मालिक
sudo chown alice:developers report.txt # मालिक और ग्रुप
sudo chown :www-data index.html # केवल ग्रुप
sudo chown -R www-data:www-data /var/www/site
केवल ग्रुप बदलने के लिए अलग कमांड है: sudo chgrp developers report.txt। आपके ग्रुप id या groups से दिखते हैं।
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(developers)
यूज़र को ग्रुप में जोड़ने के लिए: sudo usermod -aG developers bob। -a फ़्लैग ज़रूरी है: इसके बिना यूज़र बाक़ी सभी अतिरिक्त ग्रुप से हट जाएगा। नया ग्रुप सिस्टम में दोबारा लॉगिन के बाद लागू होता है।
sudo: प्रशासक के रूप में काम करना
sudo एक कमांड को root (या किसी और यूज़र) के अधिकारों से चलाता है और आपका अपना पासवर्ड पूछता है, root का नहीं। हर कॉल लॉग में दर्ज होती है, इसलिए दिखता है कि किसने क्या किया।
sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql # postgres यूज़र के रूप में
sudo -i # root की इंटरैक्टिव शेल
sudo -l # मुझे क्या करने की अनुमति है
किसे क्या अनुमति है, यह /etc/sudoers और /etc/sudoers.d/ की फ़ाइलों में लिखा होता है। इन्हें केवल sudo visudo से बदलें: यह सेव से पहले सिंटैक्स जाँचता है, और गलती से आप sudo ही न खो दें। Ubuntu में sudo का अधिकार sudo ग्रुप की सदस्यता से मिलता है, और RHEL जैसे सिस्टम में wheel ग्रुप से।
# /etc/sudoers.d/deploy — यूज़र deploy को केवल nginx रीस्टार्ट करने की अनुमति है
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
sudo echo > file क्यों काम नहीं करता
एक आम जाल:
$ sudo echo "127.0.0.1 test.local" >> /etc/hosts
bash: /etc/hosts: Permission denied
रीडायरेक्शन >> आपकी शेल करती है, sudo नहीं, इसलिए फ़ाइल बिना root अधिकार के खुलती है। सही तरीक़ा है tee:
echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts
Permission denied: कारण और समाधान
Permission denied का मतलब है कि कर्नल ने आपके प्रोसेस को वह काम करने से मना किया। जाँच का तरीक़ा हमेशा एक ही है: मैं कौन हूँ (id), फ़ाइल का मालिक और अधिकार क्या हैं (ls -l), और पाथ की हर डायरेक्टरी पर क्या अधिकार हैं (namei -l)।
$ namei -l /srv/app/config/app.env
f: /srv/app/config/app.env
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxr-x--- deploy deploy app
drwxr-xr-x deploy deploy config
-rw-r----- deploy deploy app.env
यहाँ दिख रहा है कि app डायरेक्टरी बाक़ी लोगों के लिए बंद है: जो यूज़र deploy ग्रुप में नहीं है, वह आगे नहीं जा सकता, भले ही फ़ाइल पर अधिकार कुछ भी हों।
स्क्रिप्ट नहीं चलती
$ ./deploy.sh
bash: ./deploy.sh: Permission denied
फ़ाइल में चलाने का अधिकार नहीं है। समाधान: chmod +x deploy.sh, या इंटरप्रेटर से चलाना: bash deploy.sh। अगर डिस्क पार्टिशन noexec विकल्प के साथ माउंट है (जैसे कई बार /tmp के साथ), तो फ़ाइल सीधे नहीं चलेगी, सिर्फ़ दूसरा तरीक़ा काम करेगा।
सिस्टम डायरेक्टरी में लिख नहीं सकते
/etc, /usr, /var/www की फ़ाइलें root या सिस्टम यूज़र की होती हैं। एक बार के बदलाव के लिए sudo इस्तेमाल करें, और स्थायी काम के लिए अधिकार सबको देने के बजाय ग्रुप को दें।
वेब सर्वर 403 देता है
Nginx या Apache Debian और Ubuntu में www-data यूज़र से चलते हैं। उसे फ़ाइलें पढ़ने का अधिकार चाहिए और पाथ की हर डायरेक्टरी पर x। समाधान: sudo chown -R www-data:www-data /var/www/site, या डायरेक्टरी पर 755 और फ़ाइलों पर 644।
SSH कुंजी स्वीकार नहीं करता
SSH बहुत खुले अधिकारों वाली कीज़ इस्तेमाल करने से मना करता है। निजी कुंजी के लिए 600 चाहिए, ~/.ssh डायरेक्टरी के लिए 700, और सर्वर पर authorized_keys फ़ाइल के लिए 600।
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
Docker तक पहुँच नहीं
संदेश permission denied while trying to connect to the Docker daemon socket बताता है कि आप docker ग्रुप में नहीं हैं। चलाएँ sudo usermod -aG docker $USER और दोबारा लॉगिन करें। ध्यान रहे कि इस ग्रुप की सदस्यता लगभग root के अधिकारों के बराबर है।
chmod 777 अच्छा विचार क्यों नहीं
«बस chmod 777 कर दो» सलाह त्रुटि तो हटा देती है, लेकिन फ़ाइल को सिस्टम के हर यूज़र और हर प्रोसेस के लिए लिखने योग्य बना देती है। अगर वेब एप्लिकेशन हैक हो जाए, तो हमलावर ऐसी फ़ाइलें बदल सकता है। सही रास्ता है यह पता करना कि किस यूज़र को एक्सेस चाहिए, और वह अधिकार ठीक उसी को देना: मालिक या ग्रुप के ज़रिए।
umask: डिफ़ॉल्ट अधिकार
नई फ़ाइलें umask मास्क को ध्यान में रखकर बनती हैं। आम मान 022 पर फ़ाइलें 644 और डायरेक्टरी 755 अधिकारों के साथ बनती हैं।
$ umask
0022
निष्कर्ष
Linux में फ़ाइल अधिकार मालिक, ग्रुप और बाक़ी लोगों के लिए तीन rwx समूह हैं। chmod अधिकार संख्यात्मक (755, 644, 600) या प्रतीकात्मक रूप में बदलता है, chown मालिक बदलता है, और sudo एक कमांड root के रूप में चलाने देता है। Permission denied पर यूज़र, फ़ाइल के अधिकार और पाथ की हर डायरेक्टरी जाँचें, और 777 से समस्या न छिपाएँ। यूज़र, ग्रुप, अधिकार और sudo हमारे लिनक्स कोर्स में व्यवहार में सिखाए जाते हैं।
अक्सर पूछे जाने वाले प्रश्न
chmod 755 का क्या मतलब है?
मालिक पढ़, लिख और चला सकता है (7), जबकि ग्रुप और बाक़ी लोग पढ़ और चला सकते हैं (5)। डायरेक्टरी और स्क्रिप्ट के लिए यह मानक सेट है।
chmod और chown में क्या अंतर है?
chmod अधिकार बदलता है (कौन-सी क्रियाएँ की जा सकती हैं), जबकि chown मालिक और ग्रुप बदलता है (अधिकार किसके पास हैं)।
किसी यूज़र को sudo का अधिकार कैसे दें?
Ubuntu और Debian में उसे <code>sudo</code> ग्रुप में जोड़ें: <code>sudo usermod -aG sudo नाम</code>; RHEL जैसे सिस्टम में <code>wheel</code> ग्रुप में। बदलाव दोबारा लॉगिन के बाद लागू होते हैं।
4755 अधिकारों और SUID बिट का क्या अर्थ है?
पहला अंक 4 SUID चालू करता है: प्रोग्राम उसे चलाने वाले के बजाय फ़ाइल के मालिक के अधिकारों से चलता है। यह, उदाहरण के लिए, passwd के साथ होता है, और <code>ls</code> के आउटपुट में मालिक के x की जगह <code>s</code> दिखता है।
root 000 अधिकार वाली फ़ाइल कैसे पढ़ सकता है?
कर्नल root के लिए सामान्य पढ़ने और लिखने की जाँच नहीं करता। इसे केवल दूसरे तंत्रों से सीमित किया जा सकता है, जैसे SELinux, AppArmor या <code>chattr +i</code> विशेषता।
यह विषय “Linux: с нуля до уверенного администрирования” कोर्स में अभ्यास के साथ विस्तार से समझाया गया है।
कोर्स पर जाएँ