Ravindra BagaleCourses & study guides English

chmod सविस्तर: symbolic आणि numeric permissions, folder permissions आणि file कोण delete करू शकतो

चला, सुरू करूया. मागच्या class मध्ये तुम्ही chmod u-w आणि chmod g+w बघितलं. आज आपण अजून खोलात जाणार. आधी पूर्ण symbolic पद्धत: कोणाला, plus की minus, कोणती permission, आणि एकाच command मध्ये अनेक बदल कसे करायचे. मग खऱ्या servers वर सगळीकडे दिसणारे आकडे, 755, 644, 600, आणि ते डोक्यात कसे वाचायचे आणि बनवायचे. मग folders, जिथे r, w आणि x चा अर्थच बदलतो. शेवटी एक कोडं: root ची file ec2-user delete करू शकतो का? Server चालू ठेवा आणि प्रत्येक command माझ्यासोबत करून बघा.

या class मध्ये काय शिकणार

  • ls -l ची दहा characters एका नजरेत वाचणं
  • Symbolic chmod: u, g, o, a सोबत +, - आणि =
  • एकाच command मध्ये अनेक बदल: commas, आणि एकत्र अनेक अक्षरं
  • कोणाला ते न सांगता chmod +w आणि chmod +x काय करतात
  • Numeric chmod: r = 4, w = 2, x = 1
  • 645 सारखे आकडे वाचणं, आणि गरजेवरून 714 सारखे आकडे बनवणं
  • 555, 000, 777 आणि 444, आणि 777 ही वाईट सवय का
  • Root च्या files: sudo chmod, आणि file चालवायला root ला पण x bit का लागतो
  • 766 vs 776 चा प्रश्न, नीट सोडवून
  • Files, scripts, folders आणि keys साठी कोणते आकडे
  • Folder वर r, w, x चा अर्थ, chmod 700, 600, 300, 555 आणि 200 सोबत
  • कोडं: delete parent folder वर अवलंबून असतो
  • /tmp वरचा sticky bit
  • ec2-user ला sudo का चालतो आणि नवीन user ला का नाही
  • EC2 Instance Connect सारखं fail होत असेल तेव्हाची एक खरी tip
  • घरी करायचे tasks

1. थोडक्यात उजळणी: दहा characters

का. तुम्ही type केलेला प्रत्येक chmod यातली काही characters बदलतो, म्हणून ती एका नजरेत वाचता यायला हवीत.

काय. Amazon Linux वर ec2-user ने बनवलेली नवीन file आणि नवीन folder असे दिसतात:

[ec2-user@ip-172-31-xx-xx ~]$ ls -l
total 4
-rw-rw-r--. 1 ec2-user ec2-user 6 Jan  5 10:15 my.txt
drwxrwxr-x. 2 ec2-user ec2-user 6 Jan  5 10:15 ravi

-rw-rw-r-- डावीकडून वाचा:

  1. -: type. - म्हणजे file, d म्हणजे directory.
  2. rw-: user (owner), पहिलं नाव, ec2-user.
  3. rw-: group, दुसरं नाव. Group मध्ये अनेक members असू शकतात, उदा. ravi आणि ramesh.
  4. r--: others, server वरचे बाकी सगळे users.

शेवटचा . हा Amazon Linux चा SELinux marker आहे; त्याकडे दुर्लक्ष करा. Owners, groups, adduser आणि पहिला chmod u-w demo Linux users, groups, sudo आणि file permissions मध्ये आहेत. हा chapter त्याच्या पुढे जातो.

2. Symbolic chmod: कोणाला, + की -, आणि कोणती permission

का. कधी कधी तुम्हाला फक्त एकच गोष्ट बदलायची असते, जसं "group ला write द्या", आणि बाकी सगळं आहे तसंच ठेवायचं. अक्षरं नेमकं तेच करतात.

काय. Symbolic mode चे तीन भाग, एकत्र, space न देता लिहायचे:

  1. कोणाला: u user (owner), g group, o others, a तिघंही.
  2. काय करायचं: + द्या, - काढून घ्या, = नेमकं set करा (जे लिहिलं नाही ते काढलं जातं).
  3. कोणती permission: r, w, x.

Classroom line

The permissions we're giving now use letters.

Symbolic chmod: कोणाला, + की -, आणि कोणती permission 1. कोणाला uuser (owner) ggroup oothers aall = ugo 2. काय करायचं +द्या -काढून घ्या =नेमकं set करा 3. कोणती permission rread wwrite xexecute $ chmod g+wx my.txt$ chmod u+x,g+w my.txt$ chmod go-r my.txt group: w आणि x द्या दोन बदल: comma, space नको group आणि others: r काढा प्रत्येक column मधून एक निवडा, एकत्र लिहा, मग file चं नाव. एका जागी अनेक अक्षरं चालतात: go, ug, wx.

Figure 1. Symbolic chmod: कोणाला (u, g, o किंवा a), काय करायचं (+, - किंवा =) आणि कोणती permission (r, w, x) निवडा, मग file चं नाव.

सोडवलेली उदाहरणं. प्रत्येक उदाहरण परत -rw-r--r-- पासून सुरू होतं:

chmod u+x my.txt     →  -rwxr--r--
chmod g+w my.txt     →  -rw-rw-r--
chmod o-r my.txt     →  -rw-r-----
chmod a+x my.txt     →  -rwxr-xr-x
chmod u-w my.txt     →  -r--r--r--
chmod u=rw,go=r my.txt  →  -rw-r--r--
  1. u+x: आता owner ती चालवू शकतो.
  2. g+w: आता group members ती बदलू शकतात.
  3. o-r: others ना आता वाचता पण येत नाही.
  4. a+x: सगळे चालवू शकतात.
  5. u-w: owner सुद्धा बदल save करू शकत नाही (पण owner chmod ने परत देऊ शकतो).
  6. =: ते bits नेमके set करतो. File परत rw-r--r-- करायला सोयीचं.

3. एकाच command मध्ये अनेक बदल

का. तीन छोट्या बदलांसाठी तीन वेळा chmod type करणं वेळखाऊ आहे. एकाच वेळी करता येतं.

कसं. दोन पद्धती:

  1. वेगवेगळ्या बदलांमध्ये comma, आणि comma नंतर space नाही.
  2. एकाच जागी अनेक अक्षरं: group आणि others साठी go, write आणि execute साठी wx.

परत प्रत्येक वेळी -rw-r--r-- पासून (box वर तपासलेलं):

chmod u+x,g+w my.txt   →  -rwxrw-r--
chmod g+wx my.txt      →  -rw-rwxr--
chmod go+x my.txt      →  -rw-r-xr-x
chmod ug+x my.txt      →  -rwxr-xr--
chmod ugo+x my.txt     →  -rwxr-xr-x
chmod a+x my.txt       →  -rwxr-xr-x

ugo आणि a म्हणजे एकच. आणि chmod 664 my.txt नंतर chmod o-r,g-w my.txt केलं की -rw-r----- मिळतं.

Classroom line

We can give permissions to many in one command.

Comma नंतर space दिली की command तुटते:

chmod u+x, g+w my.txt
chmod: invalid mode: ‘u+x,’
Try 'chmod --help' for more information.
Handwritten board: four lines, chmod ug+x my.txt, chmod u+x,g+w my.txt with a line under the comma part, chmod g+wx my.txt with wx underlined, and chmod go+x.

Class board वरून: Class board: chmod ug+x my.txt, chmod u+x,g+w my.txt (comma, space नाही), chmod g+wx my.txt आणि chmod go+x.

4. u, g, o न लिहिता chmod +w आणि +x

का. chmod +x script.sh असं + च्या आधी काहीच अक्षर नसलेलं तुम्हाला सारखं दिसेल. मग permission मिळते कोणाला?

काय. u, g, o किंवा a नसेल तर chmod permission सगळ्यांना देतो, फक्त जिथे तुमचा umask अडवतो तिथे सोडून. नवीन files च्या permissions ठरवणारी हीच setting (section 12 मध्ये अजून).

बघा. ec2-user म्हणून (umask 0002) एका read-only file वर:

umask
0002
chmod 444 my.txt
chmod +w my.txt
ls -l my.txt
-rw-rw-r--. 1 ec2-user ec2-user 6 Jan  5 10:15 my.txt

Umask 0002 फक्त others चा w अडवतो, म्हणून owner आणि group ला w मिळाला. Root म्हणून (umask 0022) तोच chmod +w फक्त -rw-r--r-- देतो, कारण 0022 group ला पण अडवतो.

सगळ्यांना w द्यायचा असेल तर a ने स्पष्ट सांगा:

chmod 444 my.txt
chmod a+w my.txt
ls -l my.txt
-rw-rw-rw-. 1 ec2-user ec2-user 6 Jan  5 10:15 my.txt

chmod +x पण याच नियमाने चालतो, पण हे umasks फक्त w अडवतात, म्हणून -rw-r--r-- वर chmod +x my.txt केलं की -rwxr-xr-x, सगळ्यांना x.

काढून घेताना पण तसंच, आणि umask ने काही bits ठेवले तर chmod तुम्हाला सांगतो:

chmod 666 my.txt
chmod -w my.txt
chmod: my.txt: new permissions are r--r--rw-, not r--r--r--
u, g, o न लिहिता chmod +w umask नुसार चालतो $ chmod 444 my.txt$ ls -l my.txt-r--r--r--. 1 ec2-user ec2-user 6 Jan 5 10:15 my.txtसुरुवात: सगळ्यांसाठी फक्त read. $ umask0002$ chmod +w my.txt-rw-rw-r--. 1 ec2-user ec2-user 6 Jan 5 10:15 my.txtec2-user, umask 0002: umask फक्त others ला अडवतो, म्हणून owner आणि group ला w मिळतो. # umask0022# chmod 444 my.txt; chmod +w my.txt-rw-r--r--. 1 ec2-user ec2-user 6 Jan 5 10:15 my.txtroot, umask 0022: group पण अडतो, म्हणून फक्त owner ला w मिळतो. $ chmod 444 my.txt$ chmod a+w my.txt-rw-rw-rw-. 1 ec2-user ec2-user 6 Jan 5 10:15 my.txta+w umask बघत नाही: सगळ्यांना w, others ला पण. बहुतेक वेळा हे नको असतं. ec2-user म्हणून +w (0002)rw-rw-r-- root म्हणून +w (0022)rw-r--r-- a+wrw-rw-rw-

Figure 2. Animation: read-only file वर chmod +w, ec2-user (umask 0002) म्हणून rw-rw-r--, root (umask 0022) म्हणून rw-r--r--, आणि chmod a+w ने rw-rw-rw-.

Correction

Class मध्ये सांगितलं की नुसता chmod +w "चालणार नाही", accident टाळायला a+w च लिहावं लागतं. ते बरोबर नाही. chmod +w चालतो: u/g/o नसेल तर तो umask प्रमाणे चालतो, म्हणून ec2-user (umask 0002) म्हणून तो owner आणि group ला w देतो, आणि root (umask 0022) म्हणून फक्त owner ला. chmod a+w others सकट सगळ्यांना w देतो, जे क्वचितच हवं असतं.

5. Numeric chmod: r = 4, w = 2, x = 1

का. अक्षरं एका वेळी एकच गोष्ट बदलतात. आकडा नऊच्या नऊ bits एकदम, नेमके set करतो. म्हणूनच जवळपास प्रत्येक guide मध्ये chmod 755, chmod 644, chmod 600 दिसतात.

काय. तीन digits: पहिला user साठी, दुसरा group साठी, तिसरा others साठी. प्रत्येक digit म्हणजे एक बेरीज:

  1. r = 4
  2. w = 2
  3. x = 1

म्हणजे 7 = 4 + 2 + 1 = rwx, 6 = 4 + 2 = rw-, 5 = 4 + 1 = r-x, आणि 3 = 2 + 1 = -wx.

chmod 755: user, group आणि others साठी एकेक digit chmodmy.txt 7user 5group 5others r = 4 w = 2 x = 1 7= 4 + 2 + 1= rwxread, write, run 5= 4 + 0 + 1= r-xread, run 5= 4 + 0 + 1= r-xread, run $ chmod 755 my.txt; ls -l my.txt-rwxr-xr-x. 1 ec2-user ec2-user 6 Jan 5 10:15 my.txt

Figure 3. Animation: chmod 755 my.txt. 7 = 4 + 2 + 1 = user साठी rwx, आणि प्रत्येक 5 = 4 + 1 = group आणि others साठी r-x.

Handwritten board: chmod 755 my.txt with the 7 circled and arrows to user, group and other users; on the right r, w and x with 4, 2 and 1 next to them, brackets adding up to 6, 3 and 7, and a 5 joining r and x.

Class board वरून: Class board: chmod 755 my.txt मध्ये पहिला digit user साठी, दुसरा group साठी, तिसरा other users साठी. उजवीकडे: r = 4, w = 2, x = 1, म्हणून r + w = 6, w + x = 3, r + x = 5 आणि तिन्ही = 7.

0 ते 7 प्रत्येक digit 0 - - - ---काहीच नाही 1 - - x --xफक्त run 2 - w - -w-फक्त write 3 - w x -wxwrite, run 4 r - - r--फक्त read 5 r - x r-xread, run 6 r w - rw-read, write 7 r w x rwxसगळं हव्या त्या अक्षरांच्या किमती बेरीज करा: r = 4, w = 2, x = 1. तीन digits = user, group, others.

Figure 4. आठही digits: 0 ---, 1 --x, 2 -w-, 3 -wx, 4 r--, 5 r-x, 6 rw-, 7 rwx.

6. आकडा वाचणं (decode)

कसं. एका वेळी एक digit घ्या, आणि त्याचे 4, 2, 1 करा:

  1. त्यात 4 आहे का? मग r, नाहीतर -.
  2. उरलेल्यात 2 आहे का? मग w, नाहीतर -.
  3. 1 उरला का? मग x, नाहीतर -.

सोडवलेलं उदाहरण: 645.

  1. 6 = 4 + 2 → user साठी rw-.
  2. 4 = 4 → group साठी r--.
  3. 5 = 4 + 1 → others साठी r-x.

म्हणजे chmod 645 my.txt ने -rw-r--r-x मिळतं. अजून काही, प्रत्येक box वर chmod आणि ls -l ने तपासलेलं:

755 -> -rwxr-xr-x
645 -> -rw-r--r-x
714 -> -rwx--xr--
514 -> -r-x--xr--
555 -> -r-xr-xr-x
000 -> ----------
777 -> -rwxrwxrwx
444 -> -r--r--r--
644 -> -rw-r--r--
600 -> -rw-------
400 -> -r--------

7. गरजेवरून आकडा बनवणं

का. कामावर कोणी "chmod 714" म्हणत नाही. ते म्हणतात "owner ला सगळं, group फक्त चालवू शकेल, others फक्त वाचू शकतील". ते तुम्ही आकड्यात बदलायचं.

सोडवलेलं उदाहरण 1. गरज: user rwx, group --x, others r--.

  1. User: 4 + 2 + 1 = 7.
  2. Group: 1.
  3. Others: 4.
  4. उत्तर: chmod 714 my.txt.

सोडवलेलं उदाहरण 2. वरच्यासारखंच, पण user चा write काढून घ्या.

  1. User: 4 + 1 = 5.
  2. Group आणि others बदलत नाहीत: 1 आणि 4.
  3. उत्तर: chmod 514 my.txt.
Handwritten board: chmod 645 my.txt at the top; lower down, rwx --x r-- written above chmod 714 my.txt.

Class board वरून: Class board: decode करायला chmod 645 my.txt, आणि खाली rwx --x r-- ही गरज chmod 714 my.txt म्हणून लिहिलेली.

डोक्यात करून बघायला तीन छोटी उदाहरणं:

  1. "फक्त owner वाचू आणि लिहू शकेल" → 6, 0, 0 → 600.
  2. "Owner ला सगळं, group ला read आणि run, others ना काहीच नाही" → 7, 5, 0 → 750.
  3. "सगळे वाचू शकतील, बदलू कोणीच नाही" → 4, 4, 4 → 444.

8. खास आकडे: 555, 000, 777 आणि 444

काय.

  1. 555 = सगळ्यांना r-x: सगळे वाचू आणि चालवू शकतात, बदलू कोणीच नाही.
  2. 000 = कोणालाच काहीच नाही.
  3. 777 = सगळ्यांना सगळं.
  4. 444 = सगळ्यांसाठी फक्त read.

000 owner साठी सापळा नाही. Owner ला file वाचता येत नाही, पण तो कधीही chmod ने परत करू शकतो, आणि root तरीही वाचतो:

chmod 000 my.txt
cat my.txt
cat: my.txt: Permission denied
sudo cat my.txt
hello
chmod 644 my.txt
cat my.txt
hello

Server वर 777 ही वाईट सवय आहे. कोणताही user, किंवा कोणी घुसलेला कोणताही program, 777 file बदलू शकतो, उदा. नंतर root चालवणारा script. File "चालत नसेल" तर सगळं उघडं करण्याऐवजी नेमका कोणता bit कमी आहे ते शोधा. 777 नंतर चांगली दुरुस्ती म्हणजे chmod 644 (किंवा कोणीच बदलू नये असं असेल तर chmod 444).

9. आकडे की अक्षरं?

कधी काय वापरायचं:

  1. आकडे जेव्हा शेवटी नेमकं काय हवं ते माहीत असतं: chmod 644 index.html. आधी काहीही असलं तरी नऊच्या नऊ bits set होतात.
  2. अक्षरं जेव्हा एकच बदल हवा आणि बाकी तसंच राहायला हवं: chmod u+x my.sh.

उदा. -rw-rw-r-- असलेल्या file वर chmod u+x ने -rwxrw-r-- मिळतं, पण chmod 744 ने -rwxr--r--: आकड्याने group चा w पण काढला.

10. Root च्या files: sudo chmod

का. sudo ने बनवलेली file root ची असते, आणि त्यामुळे तिचा chmod कोण करू शकतो ते बदलतं.

बघा. Root एक छोटा script लिहितो:

sudo nano a.txt
ls -l a.txt
-rw-r--r--. 1 root root 36 Jan  5 10:15 a.txt

File मध्ये दोन ओळी आहेत, #!/bin/bash आणि echo "Hello from a.txt". आता ec2-user म्हणून करून बघा:

chmod 777 a.txt
chmod: changing permissions of 'a.txt': Operation not permitted
./a.txt
-bash: ./a.txt: Permission denied
  1. chmod नाकारला, कारण mode फक्त owner (root) किंवा sudo ने root बदलू शकतो.
  2. ./a.txt नाकारला, कारण अजून कोणाकडेच x नाही.

बरोबर पद्धतीने दुरुस्त करा, 755 ने, 777 ने नाही:

sudo chmod 755 a.txt
ls -l a.txt
-rwxr-xr-x. 1 root root 36 Jan  5 10:15 a.txt
./a.txt
Hello from a.txt

Root r आणि w चे checks ओलांडतो, पण हा नाही: file चालवायला किमान एक तरी x bit set हवा. 666 file वर root ला सुद्धा Permission denied मिळतं.

11. 766 vs 776 चा प्रश्न

का. Board वर लिहिलं होतं की या root च्या a.txt साठी 766 ने ec2-user ती चालवू शकत नाही पण 776 ने शकतो. विश्वास ठेवण्याऐवजी सोडवून बघूया.

इथे ec2-user कोण? File root root आहे. ec2-user owner नाही, आणि root group मध्येही नाही, म्हणून त्याला others चे bits मिळतात, शेवटचा digit.

  1. 766: others = 6 = rw-. x नाही.
  2. 776: others = 6 = rw-. तरीही x नाही.

म्हणजे दोन्ही denied. Box वर खऱ्या root root file ने तपासलेलं:

sudo chmod 766 a.txt
./a.txt
-bash: ./a.txt: Permission denied
sudo chmod 776 a.txt
./a.txt
-bash: ./a.txt: Permission denied

776 तेव्हाच चालतो जेव्हा file चा group असा असेल ज्यात ec2-user आहे, कारण मग ec2-user ला मधला digit, 7, मिळतो:

sudo chown root:ec2-user a.txt
sudo chmod 776 a.txt
./a.txt
Hello from a.txt
sudo chmod 766 a.txt
./a.txt
-bash: ./a.txt: Permission denied

याच कल्पनेने 700 आणि 770 पण समजतात: 700 ने फक्त root चालवू शकतो (sudo ./a.txt), आणि 770 ec2-user साठी तेव्हाच चालतो जेव्हा group ec2-user असेल. अजून एक गोष्ट: bash ला script वाचता पण यायला हवा. 711 ने (others ना x आहे पण r नाही) /bin/bash: ./a.txt: Permission denied मिळतं.

root चा script: ec2-user ला कोणते तीन bits मिळतात? -rwxrwxrw-. 1 root root 36 a.txt (776) ec2-user owner (root) नाही आणि group (root) मध्ये पण नाही, म्हणून त्याला others चे bits मिळतात. mode file root:root file root:ec2-user ./a.txt चं काय होतं 766rw- (others)rw- (group) Permission denied 776rw- (others)rwx (group) group ec2-user असेल तरच चालतो 770--- (others)rwx (group) group ec2-user असेल तरच चालतो 700--- (others)--- (group) फक्त root: sudo ./a.txt 755r-x (others)r-x (group) सगळ्यांसाठी चालतो Script चालवायला x लागतो, आणि वाचायला bash ला r पण लागतो. नेहमीचं उत्तर 755; 777 टाळा.

Figure 5. root:root script साठी ec2-user ला others चे bits मिळतात: 766 आणि 776 दोन्ही denied. 776 आणि 770 फक्त group ec2-user असेल तरच चालतात. 755 सगळ्यांसाठी चालतो.

Correction

Board वर sudo nano ने बनवलेली file ec2-user ने चालवताना 766 ✗ आणि 776 ✓ दाखवलं. ती file root:root आहे, म्हणून ec2-user others मध्ये येतो, आणि 766 व 776 दोन्ही others ना rw- देतात, x नाही. दोन्ही fail होतात. 776 फक्त file चा group ec2-user असेल तरच चालतो (उदा. sudo chown root:ec2-user a.txt नंतर). सोपं उत्तर म्हणजे sudo chmod 755 a.txt.

12. कोणते आकडे वापरायचे

लक्षात ठेवायला छोटी list:

काय आकडा Bits
नेहमीच्या files (web pages, configs) 644 rw-r--r--
Scripts आणि programs 755 rwxr-xr-x
Folders 755 rwxr-xr-x
खाजगी files आणि SSH private keys 600 rw-------
कधीच न बदलणारी .pem key 400 r--------
काहीही 777 नको

chmod 400 तुम्ही आधीच EC2 server च्या आत मध्ये बघितलं आहे, Mac वर .pem key lock करताना: others वाचू शकतील अशी private key SSH नाकारतो.

आणि Amazon Linux वर तुमचे defaults? ec2-user ने बनवलेल्या नवीन files आणि folders group साठी थोडे जास्त उघडे येतात:

umask
0002
touch new.txt
mkdir newdir
ls -ld new.txt newdir
-rw-rw-r--. 1 ec2-user ec2-user 0 Jan  5 10:15 new.txt
drwxrwxr-x. 2 ec2-user ec2-user 6 Jan  5 10:15 newdir
  1. Files 666 पासून आणि folders 777 पासून सुरू होतात.
  2. Umask 0002 others चा w काढतो → files 664 आणि folders 775.
  3. Root चा umask 0022 group चा w पण काढतो → 644 आणि 755.

Amazon Linux वर हे safe आहे, कारण प्रत्येक user चा स्वतःचा खाजगी group असतो.

Correction

Board वर नवीन files rw-r--r-- (644) आणि नवीन folders rwxr-xr-x (755) दाखवले. ते root चे defaults आहेत (umask 0022). Amazon Linux 2023 वर ec2-user चा umask 0002 आहे, म्हणून नवीन files rw-rw-r-- (664) आणि नवीन folders rwxrwxr-x (775) येतात, class मध्ये mkdir ravi ने दाखवलं तसंच.

13. Folder permissions: r, w आणि x चा अर्थ वेगळा

का. Folder म्हणजे नावांची एक list. त्याच्या permissions त्या list ला जपतात, आतल्या files च्या content ला नाही. म्हणून तीच अक्षरं वेगळा अर्थ घेतात.

काय.

  1. Folder वर r: आतली नावं list करणं (ls).
  2. Folder वर w: आत entries create, delete, rename करणं (touch, mkdir, आत cp, mv, rm), आणि ते फक्त x सोबत.
  3. Folder वर x: आत जाणं (cd) आणि त्यातून path वापरणं, जसं cat ravi/a.txt.
Folder वर r w x चा अर्थ वेगळा असतो ravi/ drwxrwxr-x. rआतली नावं list करणंls ravi wentries create, delete, rename करणं (x पण लागतो)touch mkdir cp mv rm xआत जाणं आणि त्यातून path वापरणंcd ravi cat ravi/a.txt आधीच असलेली file वाचणं किंवा edit करणं: file चा स्वतःचा r किंवा w, आणि folder वर x लागतो. Folder चा w लागत नाही.

Figure 6. Folder वर r = नावं list करणं, w = entries create, delete, rename करणं (x पण लागतो), x = आत जाणं आणि path वापरणं. आधीच असलेली file वाचायला किंवा edit करायला file चा स्वतःचा r किंवा w आणि folder वर x लागतो.

आधीच असलेली file वाचणं किंवा edit करणं हे file चं काम: cat ला file चा r लागतो, बदल save करायला file चा w, आणि तिथपर्यंत पोहोचायला दोघांनाही folder वर x लागतो. Folder चा w लागत नाही.

Correction

Board वर cat, nano आणि vi folder च्या w खाली लिहिले होते. cat फक्त वाचतो, म्हणून त्याला file चा r (आणि folder वर x) लागतो. आधीच असलेली file edit करायला file चा w लागतो, folder चा नाही. Folder चा w फक्त entries create, delete किंवा rename करताना लागतो, जसं touch किंवा nano ने नवीन file, आणि तो फक्त x सोबतच चालतो.

14. एकच folder, पाच modes

कसं. दोन files असलेला folder बनवा, मग त्याचा mode बदला आणि काय तुटतं ते बघा. खालचे सगळे outputs box वरचे आहेत:

mkdir ravi
echo hello > ravi/a.txt
touch ravi/aa.txt

उदाहरण 1: 700 (rwx------). List करता येतं, आत जाता येतं, आत बनवता येतं. सगळं चालतं.

उदाहरण 2: 600 (rw-------), x नाही.

chmod 600 ravi
cd ravi
-bash: cd: ravi: Permission denied
ls -l ravi
ls: cannot access 'ravi/a.txt': Permission denied
ls: cannot access 'ravi/aa.txt': Permission denied
total 0
-????????? ? ? ? ?            ? a.txt
-????????? ? ? ? ?            ? aa.txt

r मुळे ls नावं वाचू शकतो, पण x शिवाय files बघू शकत नाही, म्हणून प्रश्नचिन्हं येतात. cat ravi/a.txt पण fail होतो.

उदाहरण 3: परत 700.

chmod 700 ravi
cd ravi
pwd
/home/ec2-user/ravi

Classroom line

I could get in because execute permission is there.

उदाहरण 4: 300 (-wx------), r नाही.

chmod 300 ravi
cd ravi
ls
ls: cannot open directory '.': Permission denied
touch new.txt
cat a.txt
hello

cd चालतो (x), ls fail (r नाही), पण touch चालतो (w + x), आणि आधीच माहीत असलेलं नाव उघडतं.

उदाहरण 5: 200 (-w-------), x शिवाय w.

chmod 200 ravi
touch ravi/n2.txt
touch: cannot touch 'ravi/n2.txt': Permission denied
rm ravi/aa.txt
rm: cannot remove 'ravi/aa.txt': Permission denied

नुसता w काहीच करत नाही. Create आणि delete ला w आणि x लागतात. (100 ने, म्हणजे फक्त x, cat ravi/a.txt चालतो पण ls ravi आणि touch fail होतात.)

Handwritten board: chmod 600 ravi, cd ravi underlined, chmod 700 ravi, and chmod 300 ravi with 300 underlined.

Class board वरून: Class board: chmod 600 ravi, मग cd ravi, मग chmod 700 ravi आणि chmod 300 ravi. 600 cd अडवतो, 700 चालू देतो, आणि 300 cd चालू देतो पण ls नाही.

एकच folder, पाच modes $ chmod 700 ravi; ls -ld ravidrwx------. 2 ec2-user ec2-user 33 Jan 5 10:15 ravi$ cd ravi; ls; touch new.txta.txt aa.txt700 = rwx: list, आत जाणं, create. सगळं चालतं. $ chmod 600 ravi$ cd ravi-bash: cd: ravi: Permission denied$ ls -l ravi-????????? ? ? ? ? ? a.txt600 = rw-, x नाही: आत जाता येत नाही, ls ला फक्त नावं दिसतात. $ chmod 300 ravi$ cd ravi$ lsls: cannot open directory '.': Permission denied$ touch new.txt; cat a.txthello300 = -wx, r नाही: cd चालतो, ls fail, माहीत असलेली नावं चालतात. $ chmod 555 ravi; cd ravitouch: cannot touch 'rr.txt': Permission deniedrm: cannot remove 'aa.txt': Permission deniedmv: cannot move 'a.txt' to 'c.txt': Permission denied555 = r-x, w नाही: काहीच add, remove किंवा rename होत नाही. $ chmod 200 ravi$ touch ravi/n2.txttouch: cannot touch 'ravi/n2.txt': Permission denied$ cd ravi-bash: cd: ravi: Permission denied200 = -w-, x शिवाय w: तरी काहीच नाही. Create आणि delete ला w आणि x दोन्ही लागतात. modecdlscreate / delete 700 ✓ ✓ ✓ 600 ✗ नावं ✗ 300 ✓ ✗ ✓ 555 ✓ ✓ ✗ 200 ✗ ✗ ✗ r = नावांची list, w = create आणि delete (फक्त x सोबत), x = आत जाणं.

Figure 7. Animation: एकच folder, पाच modes. 700 सगळं चालतं; 600 cd नाही; 300 ls नाही; 555 create किंवा delete नाही; 200 काहीच नाही, कारण w ला x लागतो.

15. w नसलेला folder: chmod 555

काय. 555 (सगळ्यांना r-x) ने आत जाता येतं आणि list करता येतं, पण काहीच add, remove किंवा rename होत नाही:

chmod 555 ravi
cd ravi
touch rr.txt
touch: cannot touch 'rr.txt': Permission denied
mkdir tata
mkdir: cannot create directory ‘tata’: Permission denied
rm aa.txt
rm: cannot remove 'aa.txt': Permission denied
cp a.txt b.txt
cp: cannot create regular file 'b.txt': Permission denied
mv a.txt c.txt
mv: cannot move 'a.txt' to 'c.txt': Permission denied

Classroom line

I removed the write permission.

पण आतल्या files बदलू शकतात. a.txt rw-rw-r-- आहे, म्हणून तिचा owner ती edit करू शकतो:

echo more >> a.txt
cat a.txt
hello
more

nano a.txt पण नीट save करतो ([ Wrote 2 lines ]). फक्त नवीन file fail होते: nano new.txt save करताना [ Error writing new.txt: Permission denied ] दाखवतो.

16. कोडं: root ची file ec2-user delete करू शकतो का?

प्रश्न. Root /home/ec2-user मध्ये एक file बनवतो. File root root, rw-r--r-- आहे. ec2-user ती sudo शिवाय delete करू शकतो का? Class मधले बहुतेक जण म्हणाले नाही.

Classroom line

Will it come into my own house and beat me?

उत्तर: हो. Delete करताना file च्या content ला हात लागत नाही. तो folder च्या list मधून एक नाव काढतो, म्हणून ते parent folder ठरवतो, आणि ec2-user चं home त्याचंच आहे, rwx सोबत.

पुरावा 1. तुमच्या home मध्ये:

ls -ld /home/ec2-user
drwx------. 3 ec2-user ec2-user 74 Jan  5 10:15 /home/ec2-user
sudo nano rootwala.txt
ls -l rootwala.txt
-rw-r--r--. 1 root root 10 Jan  5 10:15 rootwala.txt

आतलं बदलणं नाकारलं जातं, कारण तो file चा w आहे, आणि तो फक्त root कडे आहे:

echo more >> rootwala.txt
-bash: rootwala.txt: Permission denied

पण delete चालतो. File लिहिता येत नाही म्हणून rm आधी विचारतो; y द्या:

rm rootwala.txt
rm: remove write-protected regular file 'rootwala.txt'? y
ls rootwala.txt
ls: cannot access 'rootwala.txt': No such file or directory

(रिकामी file असेल तर प्रश्नात regular empty file येतं. rm -f प्रश्न विचारत नाही.)

पुरावा 2. तुम्ही बनवलेल्या folder मध्ये पण तेच:

mkdir myfolder
cd myfolder
sudo nano folderwala.txt
rm folderwala.txt
rm: remove write-protected regular file 'folderwala.txt'? y

Classroom line

It depends on the parent folder's write permission.

आणि root ने बनवलेला folder? sudo mkdir rootwala तुमच्या home मध्ये root root folder बनवतो. त्याच्या आत तुम्ही काहीच बनवू शकत नाही (touch rootwala/x.txt → Permission denied), पण तो रिकामा असेपर्यंत rmdir rootwala ने काढू शकता, कारण त्याचं नाव तुमच्या folder मध्ये आहे. Root ने आत file ठेवली असेल तर त्या file वर rm -r fail होतो.

तुमच्या home मध्ये root ची file: edit नाही, delete हो /home/ec2-userdrwx------. ec2-user ec2-user या folder वर ec2-user कडे w आणि x आहे rootwala.txt-rw-r--r--. root root rootwala.txtdelete झाली 1. root ने एक file बनवलीतुमच्याच home मध्ये.$ sudo nano rootwala.txt$ ls -l rootwala.txt-rw-r--r--. 1 root root 10 Jan 5 10:15 rootwala.txt 2. content बदलायला लागतोfile चा w. तो फक्त root कडे.$ echo more >> rootwala.txt-bash: rootwala.txt: Permission denied 3. delete म्हणजे folder मधूननाव काढणं. folder तुमचा आहे.$ rm rootwala.txtrm: remove write-protected regular file 'rootwala.txt'? y$ ls rootwala.txtls: cannot access 'rootwala.txt': No such file or directory Delete, create आणि rename parent folder (w आणि x) ठरवतो. Read आणि edit file ठरवते.

Figure 8. Animation: /home/ec2-user मध्ये root ची rootwala.txt. Edit नाकारलं जातं (file चा w root चा आहे), पण write-protected च्या प्रश्नानंतर rm चालतो, कारण delete parent folder वर अवलंबून असतो.

Correction

Class मध्ये सांगितलं की delete parent folder च्या write permission वर अवलंबून असतो. त्याला parent folder वर w आणि x दोन्ही लागतात: नुसता w (chmod 200) तरीही Permission denied देतो, section 14 मध्ये बघितलं तसं. आणि इथे ec2-user root ची file delete करू शकतो, पण तिचा content बदलू शकत नाही; तो file चा स्वतःचा w आहे.

17. अपवाद: /tmp वरचा sticky bit

का. /tmp हा असा folder आहे जिथे प्रत्येक user files बनवू शकतो, म्हणून सगळ्यांकडे त्यावर w आणि x असतो. वरच्या नियमाने तर कोणीही कोणाच्याही files तिथे delete करू शकेल. Sticky bit ते थांबवतो.

काय. तो शेवटच्या x च्या जागी t म्हणून दिसतो:

ls -ld /tmp
drwxrwxrwt. 25 root root 2220 Jan  5 10:15 /tmp

Sticky bit असेल तर file फक्त तिचा owner, folder चा owner किंवा root delete किंवा rename करू शकतो, file स्वतः rw-rw-rw- असली तरी. Box वर दोन users ने तपासलेलं:

[ec2-user@ip-172-31-xx-xx ~]$ echo hi > /tmp/ec2.txt
[ec2-user@ip-172-31-xx-xx ~]$ chmod 666 /tmp/ec2.txt

[ravi@ip-172-31-xx-xx ~]$ rm /tmp/ec2.txt
rm: cannot remove '/tmp/ec2.txt': Operation not permitted

t नसलेल्या drwxrwxrwx folder मध्ये ravi चा तोच rm चालतो. Sticky bit chmod +t folder किंवा chmod 1777 folder ने लावतात.

अपवाद: /tmp वरचा sticky bit (t) drwxrwxrwt. root root /tmp इथे कोणीही files बनवू शकतो ec2.txt-rw-rw-rw-. ec2-user ravi $ rm /tmp/ec2.txtrm: cannot remove ... Operation not permitted drwxrwxrwx. root root /srv/share t नाही: folder वर w + x असलेला कोणीही दुसऱ्याची file delete करू शकतो ravi$ rm -f /srv/share/ec2.txt(gone, no error) t असेल तर फक्त file चा owner,folder चा owner किंवा root delete करू शकतो. chmod +t किंवा chmod 1777 ने लावतात. /tmp आणि /var/tmp वर दिसतो.

Figure 9. /tmp म्हणजे drwxrwxrwt: ravi तिथली ec2-user ची file delete करू शकत नाही (Operation not permitted). t नसता तर folder वर w आणि x असलेला कोणीही ती delete करू शकला असता.

Correction

"Delete parent folder वर अवलंबून असतो" या नियमाला एक अपवाद आहे जो class मध्ये सांगितला नाही: sticky bit (t) असलेले folders, जसं /tmp आणि /var/tmp. तिथे file फक्त तिचा owner, folder चा owner किंवा root delete करू शकतो.

18. "मी कुठेही sudo वापरू शकतो": परवानगी असेल तरच

काय. ec2-user sudo चालवू शकतो कारण Amazon Linux ने तसं set केलं आहे. तो wheel group मध्ये आहे, आणि cloud-init ने password शिवायचा एक rule टाकला आहे:

sudo cat /etc/sudoers.d/90-cloud-init-users
...
ec2-user ALL=(ALL) NOPASSWD:ALL

नवीन user ला असं काहीच मिळत नाही:

sudo -l -U ravi
User ravi is not allowed to run sudo on ip-172-31-xx-xx.

म्हणजे admin ने परवानगी दिल्याशिवाय ravi sudo वापरू शकत नाही, उदा. sudo usermod -aG wheel ravi ने. wheel चा rule (%wheel ALL=(ALL) ALL) ravi चा स्वतःचा password पण विचारतो, आणि कोणी sudo passwd ravi ने set करेपर्यंत नवीन user कडे तो नसतो.

Correction

Class मध्ये म्हटलं "मी Linux मध्ये कुठेही sudo वापरू शकतो". EC2 वर ec2-user साठी ते खरं आहे, कारण तो /etc/sudoers.d/90-cloud-init-users मध्ये (आणि wheel मध्ये) आहे. ravi सारख्या नेहमीच्या user ला admin ने हक्क देईपर्यंत User ravi is not allowed to run sudo मिळतं.

Ravindra Bagale's Tip

sudo फक्त server सांभाळणाऱ्या लोकांनाच द्या. फक्त code deploy करणाऱ्या developers ना बहुतेक वेळा एका project folder वर write access लागतो (मागच्या chapter सारखा group), root नाही.

19. खरी tip: EC2 Instance Connect सारखं fail होत असेल तेव्हा

Ravindra Bagale's Tip

Class मध्ये server ठीक असूनही EC2 Instance Connect सारखं "Error establishing SSH connection" दाखवत होतं. कारण होतं laptop चं घड्याळ: ते चुकलेलं होतं, आणि sync केल्यावर (Windows वर: Settings → Time & language → Date & time → Sync now) लगेच चाललं. Console connection कारण नसताना fail होत असेल तर हे तपासा:

  1. Instance running आहे आणि दोन्ही status checks pass झाले आहेत.
  2. Security group योग्य source कडून port 22 चालू देतो. Browser मधल्या Instance Connect साठी तो तुमच्या Region चा EC2 Instance Connect IP range, फक्त तुमचा IP नाही.
  3. AMI Instance Connect ला support करतो (Amazon Linux आणि Ubuntu करतात).
  4. तुमच्या computer ची date, time आणि time zone automatic set आहेत.

20. घरी करायचे tasks

Try at home

Task 1: symbolic

  1. echo hello > my.txt, मग chmod 644 my.txt.
  2. chmod u+x,g+w my.txt चालवा आणि ls -l च्या आधी result चा अंदाज लावा.
  3. chmod go-r my.txt चालवा, मग chmod u=rw,go=r my.txt ने reset करा.
  4. chmod 444 my.txt, मग chmod +w my.txt, आणि umask वापरून result समजावा.

Task 2: आकडे

  1. 640, 711 आणि 754 कागदावर decode करा, मग प्रत्येक chmod आणि ls -l ने तपासा.
  2. "owner read आणि write, group read, others काहीच नाही" याचा आकडा बनवा.
  3. chmod 000 my.txt, cat my.txt करून बघा, मग chmod 644 my.txt ने परत मिळवा.

Task 3: folders

  1. दोन files सकट ravi बनवा. chmod 700, 600, 300, 555 आणि 200 नंतर cd, ls -l आणि touch करून बघा.
  2. 555 folder मध्ये आधीची file nano ने edit करा, मग नवीन file save करून बघा.

Task 4: कोडं

  1. Home मध्ये sudo nano rootwala.txt, मग echo more >> rootwala.txt आणि rm rootwala.txt. दोन्ही results समजावा.
  2. ls -ld /tmp चालवा आणि t शोधा.

झालं की rm -r ravi ने delete करण्याआधी chmod 755 ravi ने folder परत नीट करा, आणि instance stop करा.

Recap

थोडक्यात

  1. दहा characters: type, मग user, group आणि others साठी r w x.
  2. Symbolic: कोणाला (u g o a), + - =, कोणती (r w x). Comma ने, space न देता एकत्र: chmod u+x,g+w.
  3. ugo = a. अक्षर नसलेला chmod +w umask प्रमाणे चालतो; a+w सगळ्यांना देतोच.
  4. आकडे: r = 4, w = 2, x = 1, user, group आणि others साठी एकेक digit. 645 = rw-r--r-x.
  5. गरजेवरून: rwx --x r-- = 714; user चा w काढला → 514.
  6. 000 owner ला chmod पासून अडवत नाही; root तरीही वाचतो. 777 टाळा.
  7. आकडे नऊच्या नऊ bits set करतात; अक्षरं फक्त सांगितलेलंच बदलतात.
  8. sudo ने बनवलेली file root root: ec2-user ला sudo chmod लागतो. File चालवायला root ला किमान एक x bit लागतो.
  9. root:root file साठी ec2-user म्हणजे "others": 766 आणि 776 दोन्ही fail; 755 चालतो.
  10. Files 644, scripts आणि folders 755, keys 600/400. Amazon Linux ec2-user ला files 664 आणि folders 775 देतो (umask 0002).
  11. Folder: r = list, w = create/delete/rename (x लागतो), x = आत जाणं.
  12. आधीची file वाचणं किंवा edit करणं = file चे स्वतःचे bits + folder वर x.
  13. Delete parent folder (w + x) वर अवलंबून, म्हणून ec2-user आपल्या home मधली root ची file delete करू शकतो, पण edit नाही.
  14. Sticky bit (t, जसं /tmp): फक्त owner, folder owner किंवा root delete करू शकतो.
  15. ec2-user ला sudo /etc/sudoers.d/90-cloud-init-users मुळे; ravi ला नाही, admin परवानगी देईपर्यंत.

Samjla ka? Ghari ek folder banva, tyala 700, 600, 300 ani 555 deun bagha, ani root chi file delete karun bagha.


Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. User, folder आणि file ची नावं (ravi, ramesh, my.txt, a.txt, rootwala.txt वगैरे) शिकण्यासाठीची उदाहरणं आहेत. Commands आणि messages box वर GNU coreutils, bash आणि nano ने, umask 0002 असलेल्या ec2-user test account वापरून तपासले, आणि Amazon Linux 2023 server च्या settings शी जुळवले (umask 0002, home folder 700, /tmp drwxrwxrwt, cloud-init चा sudoers rule, coreutils 8.32); prompt मधला hostname, dates आणि ls -l मधला /tmp चा size उदाहरण म्हणून आहेत.