Ravindra BagaleCourses & study guides English

Linux user management: useradd, passwd, su, wheel ने sudo देणं-काढणं, आणि userdel

चला, सुरू करूया. User कसा बनवायचा आणि key ने login कसं करायचं हे तुम्हाला माहितीये. आज आपण एकाच user च्या, ravi च्या, server वरच्या पूर्ण आयुष्यातून जाणार आहोत. त्याला बनवायचं, password द्यायचा, त्याच्यावर switch करायचं, त्याला sudo द्यायचा, परत काढून घ्यायचा, आणि शेवटी त्याला delete करायचं. मध्ये आपण बघू की काढून घेतल्यावरसुद्धा sudo कधी कधी का चालत राहतो, /etc/passwd च्या प्रत्येक भागाचा अर्थ काय, आणि user delete केल्यावर files मागे का राहू शकतात. Server चालू ठेवा आणि प्रत्येक command माझ्यासोबत type करा.

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

  • Normal user ला सरळ sudo का वापरता येत नाही, आणि त्याने काय वाचतं
  • sudo शिवाय normal user काय बघू शकतो आणि काय नाही
  • useradd ने user बनवणं आणि त्याने काय काय बनवलं ते check करणं
  • passwd ने password set आणि reset करणं, आणि BAD PASSWORD warnings
  • su आणि su - ने user बदलणं, आणि exit ने परत येणं
  • sudo चं lecture आणि "ravi is not in the sudoers file"
  • Amazon Linux 2023 वर ec2-user ला sudo कुठून मिळतो
  • wheel group ने sudo देणं, आणि gpasswd -d ने काढून घेणं
  • Group मधले बदल पुढच्या login पासूनच का लागू होतात
  • /etc/passwd वाचणं: सात fields आणि UIDs
  • Users delete करणं: userdel vs userdel -r, आणि मागे राहिलेलं साफ करणं
  • घरी करायचे tasks

1. आपण कुठे आहोत

हा chapter का. Linux users, groups, sudo आणि file permissions मध्ये तुम्ही sudo adduser ने ravi बनवला, त्याला त्याच नावाचा group मिळतो ते बघितलं, आणि SSH key ने त्याच्या म्हणून login केलं. chmod सविस्तर मध्ये बघितलं की ec2-user ला sudo चालतो आणि ravi ला नाही. या chapter मध्ये एका user चं पूर्ण आयुष्य, step by step, जसं खऱ्या server वर admin करतो तसं.

गोष्ट. ec2-user हा server चा मालक. Team lead तो login स्वतःकडे ठेवतो. Developers ना ravi, ramesh सारखे normal users मिळतात, सुरुवातीला sudo शिवाय.

Classroom line

He's the owner of the server; he can do anything.

Linux user चं आयुष्य, सहा commands मध्ये 1. बनवाsudo useradd raviuser, group, home 2. Passwordsudo passwd ravitype केलेलं दिसत नाही 3. Switchsu - raviexit ने परत 4. sudo द्याsudo usermod -aG wheel raviपुढच्या login पासून 5. sudo काढाsudo gpasswd -d ravi wheelजुन्या shells मध्ये राहतो 6. Deletesudo userdel -r ravi-r ने home पण जातं ec2-user (admin) user बनवतो. Amazon Linux सोबत group ravi आणि /home/ravi (700) पण बनवतो. Password set किंवा reset करा. Admin ला जुना password लागत नाही. ravi बना. su - ने /home/ravi मध्ये पूर्ण login. बाहेर: exit किंवा Ctrl+D. कुठलाही sudo user ravi ला wheel मध्ये टाकू शकतो. मग ravi sudo साठी स्वतःचा password टाकतो. ravi ला wheel मधून काढा. आधी सुरू झालेले shells exit होईपर्यंत जुने groups ठेवतात. User delete करा. -r शिवाय /home/ravi आणि mailbox मागे राहतात.

Figure 1. Animation: user च्या आयुष्यातल्या सहा steps. बनवा, password द्या, switch करा, sudo द्या, sudo काढा, delete करा.

या chapter मधल्या सगळ्या commands Amazon Linux 2023 च्या test copy वर चालवून बघितल्या, ज्यात sudo, login.defs आणि PAM settings EC2 server सारख्याच होत्या. तुमचं hostname, dates आणि process numbers वेगळे असतील.

2. Normal user सरळ sudo का वापरू शकत नाही

का. Class मध्ये एका student ने अगदी बरोबर प्रश्न विचारला:

Classroom line

Sir, if a normal user can just use sudo, what's the point of having users?

काय. बरोबरच. sudo म्हणजे "हे root म्हणून कर", आणि root काहीही करू शकतो. प्रत्येक user ला तो वापरता आला, तर वेगळे users काहीच protect करणार नाहीत. म्हणून Amazon Linux वर:

  1. ec2-user ला sudo सुरुवातीपासून चालतो.
  2. ravi सारख्या नवीन user ला नाही, जोपर्यंत admin परवानगी देत नाही.
  3. प्रत्येक user स्वतःच्या home मध्ये काम करतो, आणि बाकीचे आत बघू शकत नाहीत.

कसं दिसतं. ravi म्हणून sudo वापरून file बनवून बघा. पहिल्या वेळेला sudo एक छोटं lecture दाखवतो, ravi चाच password विचारतो, आणि मग नकार देतो:

[ravi@ip-172-31-xx-xx ~]$ sudo touch sudotest.txt

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

For security reasons, the password you type will not be visible.

[sudo] password for ravi:
ravi is not in the sudoers file.

Message नीट बघा: हे "Permission denied" नाही. याचा अर्थ ravi साठी कुठलाच sudo rule नाही. हे lecture प्रत्येक user ने पहिल्यांदा sudo चालवल्यावरच येतं.

Classroom line

We should respect other people's privacy.

Correction

काही notes मध्ये आणि जुन्या servers वर दुसरी line दिसते, "This incident will be reported." Amazon Linux 2023 वरचा sudo (version 1.9.15) फक्त ravi is not in the sudoers file. एवढंच दाखवतो. अर्थ तोच: ravi ला कुठलाच sudo rule match होत नाही.

3. Normal user काय करू शकतो आणि काय नाही

का. हक्क द्यायला सुरुवात करण्याआधी भिंती कुठे आहेत ते माहिती पाहिजे.

काय. / आणि /home मध्ये सगळे जाऊ शकतात आणि list बघू शकतात (r-x). Homes 700 असतात, म्हणून फक्त मालक आत जातो. /etc/passwd सगळे वाचू शकतात; /etc/shadow नाही.

sudo शिवाय ravi काय करू शकतो आणि काय नाही चालतं अडवलं जातं cd / ; ls /tree मध्ये फिरून बघणं cd /home ; ls /homeकोणाचं home आहे ते बघणं cat /etc/passwdusers ची list वाचणं touch ~/a.txt/home/ravi मध्ये काम ls /home/rameshदुसऱ्याचं home 700 आहे cat /etc/shadowpassword hashes, फक्त root touch /home/x.txthome बाहेर लिहिणं sudo useradd ...sudoers file मध्ये नाही / आणि /home सगळ्यांसाठी r-x आहेत, म्हणून कोणीही आत जाऊन list बघू शकतो. तिथे लिहिणं, किंवा 700 वाल्या home मध्ये जाणं, हे fail होतं.

Figure 2. sudo शिवाय ravi / आणि /home मध्ये फिरू शकतो आणि /etc/passwd वाचू शकतो, पण दुसऱ्याच्या home मध्ये जाऊ शकत नाही, /etc/shadow वाचू शकत नाही, home बाहेर लिहू शकत नाही किंवा users बनवू शकत नाही.

Example 1: फिरून बघणं चालतं. हे ravi म्हणून चालवा:

[ravi@ip-172-31-xx-xx ~]$ cd /
[ravi@ip-172-31-xx-xx /]$ ls
bin  boot  dev  etc  home  lib  lib64  local  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[ravi@ip-172-31-xx-xx /]$ ls -ld /home /home/ec2-user /home/ravi
drwxr-xr-x. 4 root     root      35 Jan  5 10:15 /home
drwx------. 2 ec2-user ec2-user  62 Jan  5 10:15 /home/ec2-user
drwx------. 2 ravi     ravi      62 Jan  5 10:15 /home/ravi

Example 2: भिंती. अजूनही ravi म्हणून:

[ravi@ip-172-31-xx-xx ~]$ ls /home/ec2-user
ls: cannot open directory '/home/ec2-user': Permission denied
[ravi@ip-172-31-xx-xx ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[ravi@ip-172-31-xx-xx ~]$ useradd test1
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.

Classroom line

While you're ravi, you can't create a new user.

Handwritten board: lines starting with ~] for sudo useradd ravi and sudo passwd ravi, then ~]su ravi, then ec2-user] cd, then ravi] sudo useradd ravi with a cross after it; on the right /home/ravi with arrows to one, a.txt and two inside a large loop.

Class board वरून: ec2-user म्हणून sudo useradd ravi आणि sudo passwd ravi, मग su ravi; cd करेपर्यंत prompt मध्ये ec2-user चाच folder दिसतो. ravi म्हणून sudo useradd वर फुली. उजवीकडे /home/ravi, आत one folder, a.txt आणि two.

Correction

Class मध्ये सांगितलं की normal user / किंवा /home मध्ये cd सुद्धा करू शकत नाही. ते बरोबर नाही. / आणि /home others साठी r-x आहेत, म्हणून सगळे आत जाऊन list बघू शकतात. Normal user तिथे लिहू शकत नाही, किंवा दुसऱ्या user च्या 700 वाल्या home मध्ये जाऊ शकत नाही.

4. Step 1: useradd ने user बनवा

का. User म्हणजे फक्त folder नाही. Linux ला /etc/passwd मध्ये entry, एक group, एक home आणि password entry लागते. useradd हे सगळं एका दमात बनवतो. /home मध्ये folder बनवून कधीच "user बनवू" नका.

काय. Amazon Linux 2023 वर useradd आणि adduser एकच program आहे. एक command हे बनवते:

  1. User ravi, पुढच्या रिकाम्या number (UID) सोबत, इथे 1001.
  2. त्याच number चा group ravi.
  3. Home /home/ravi, mode 700.
  4. Mailbox file /var/spool/mail/ravi.
  5. Lock केलेली password entry (!!), म्हणजे अजून कोणीच password ने login करू शकत नाही.

Example 3: बनवा आणि check करा. ec2-user म्हणून:

[ec2-user@ip-172-31-xx-xx ~]$ sudo useradd ravi
[ec2-user@ip-172-31-xx-xx ~]$ id ravi
uid=1001(ravi) gid=1001(ravi) groups=1001(ravi)
[ec2-user@ip-172-31-xx-xx ~]$ grep ravi /etc/passwd
ravi:x:1001:1001::/home/ravi:/bin/bash
[ec2-user@ip-172-31-xx-xx ~]$ sudo grep ravi /etc/shadow | cut -d: -f1,2
ravi:!!

useradd यशस्वी झाला की काहीच print करत नाही. शांतता म्हणजे success.

Handwritten board: sudo useradd ravi, sudo passwd ravi, and lower down su ravi.

Class board वरून: तीन commands: sudo useradd ravi, sudo passwd ravi, आणि मग su ravi.

5. Step 2: passwd ने password set करा

का. नवीन user चा password lock असतो. तो set करेपर्यंत su ravi चालूच शकत नाही:

[ec2-user@ip-172-31-xx-xx ~]$ su ravi
Password:
su: Authentication failure

Classroom line

Did we set a password? No.

कसं. Admin म्हणून, sudo सोबत set करा:

[ec2-user@ip-172-31-xx-xx ~]$ sudo passwd ravi
Changing password for user ravi.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Type करताना काहीच दिसत नाही: ना stars, ना cursor हलतो. हे मुद्दाम, म्हणजे तुमच्या screen कडे बघणाऱ्याला किती अक्षरं आहेत ते मोजता येत नाही.

Classroom line

The cursor won't move; that's why you see no stars and the cursor doesn't move.

Example 4: कमकुवत passwords. Linux नवीन password check करतो आणि warning देतो. हे खरे messages:

BAD PASSWORD: The password is shorter than 8 characters
BAD PASSWORD: The password contains the user name in some form
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word

root (म्हणजे sudo सोबत तुम्ही) password set करत असेल, तर हे फक्त warning आहे: परत type करा, password save होतो. पण ravi साध्या passwd ने स्वतःचा password बदलत असेल, तर हेच checks लागू होतात. तीन कमकुवत प्रयत्नांनंतर त्याला येतं:

passwd: Have exhausted maximum number of retries for service

दोन्ही वेळा type केलेलं जुळलं नाही, तर Sorry, passwords do not match. येतं आणि परत विचारतो.

Example 5: कोणी password विसरला. Admin तो reset करतो. जुना password लागत नाही:

sudo passwd ravi

Classroom line

Now, some people forgot their password.

Example 6: ravi passwd ने काय करू शकतो. ravi फक्त स्वतःचा password बदलू शकतो, आणि आधी चालू password टाकावा लागतो. दुसऱ्या कोणाचा तो बदलू शकत नाही:

[ravi@ip-172-31-xx-xx ~]$ passwd ramesh
passwd: Only root can specify a user name.

Correction

Class च्या terminal वर command su passwd ravi अशी type झाली. ती su चालवते आणि passwd नावाच्या user वर switch करायला सांगते:

su passwd ravi
su: user passwd does not exist or the user entry does not contain all the required fields

बरोबर command आहे sudo passwd ravi.

6. Step 3: su आणि su - ने user बदला

का. Class मध्ये आपण एकाच server वर अनेक लोक असल्याचं करून बघतो, म्हणून server मध्येच user बदलतो. खऱ्या team मध्ये प्रत्येक जण स्वतःच्या key ने थेट login करतो (ssh -i key.pem ravi@SERVER_PUBLIC_IP, त्याची public key /home/ravi/.ssh/authorized_keys मध्ये टाकल्यावर, जसं users chapter मध्ये दाखवलं). su हा class मधला shortcut आहे.

काय. su = "switch user". तुम्ही ज्या user वर जाताय, त्याचा password विचारतो.

  1. su ravi: तुम्ही ravi होता, पण ज्या folder मध्ये होता तिथेच राहता.
  2. su - ravi: ravi म्हणून पूर्ण login. तुम्ही नवीन environment सोबत /home/ravi मध्ये पोहोचता.

Example 7: su ravi तुम्हाला जुन्याच folder मध्ये ठेवतो.

[ec2-user@ip-172-31-xx-xx ~]$ su ravi
Password:
[ravi@ip-172-31-xx-xx ec2-user]$ pwd
/home/ec2-user
[ravi@ip-172-31-xx-xx ec2-user]$ ls
ls: cannot open directory '.': Permission denied
[ravi@ip-172-31-xx-xx ec2-user]$ cd
[ravi@ip-172-31-xx-xx ~]$ pwd
/home/ravi
[ravi@ip-172-31-xx-xx ~]$ touch a.txt
[ravi@ip-172-31-xx-xx ~]$ mkdir myfolder

Prompt वाचा: ravi म्हणजे user, ip-172-31-xx-xx म्हणजे server, ec2-user म्हणजे तुम्ही ज्या folder मध्ये आहात तो, आणि $ म्हणजे normal user (# असता तर root). ls fail झाला कारण /home/ec2-user 700 आहे आणि ec2-user चा आहे. साधा cd केला की ravi आपल्या home मध्ये जातो, जिथे तो काम करू शकतो.

Classroom line

But ravi has no permission in that folder.

Example 8: su - ravi म्हणजे पूर्ण login.

[ec2-user@ip-172-31-xx-xx ~]$ su - ravi
Password:
Last login: Mon Jan  5 10:15:37 UTC 2026 on pts/1
[ravi@ip-172-31-xx-xx ~]$ pwd
/home/ravi
su ravi vs su - ravi su raviफक्त user बदलतो $ su raviPassword:[ravi@ip-172-31-xx-xx ec2-user]$ pwd/home/ec2-user$ lsls: cannot open directory '.'Permission denied तुम्ही जुन्याच folder मध्ये राहता, जो तुमचा नाही. su - raviravi म्हणून पूर्ण login $ su - raviPassword:Last login: ...[ravi@ip-172-31-xx-xx ~]$ pwd/home/ravi$ echo $HOME/home/ravi नवीन environment, /home/ravi मधून सुरू. परत यायचं: exit किंवा Ctrl+D. Ctrl+C फक्त चालू command थांबवतो; तुम्ही ravi च राहता.

Figure 3. su ravi user बदलतो पण तुम्हाला /home/ec2-user मध्येच ठेवतो. su - ravi म्हणजे /home/ravi मधून सुरू होणारं पूर्ण login.

Example 9: परत येणं. exit type करा, किंवा Ctrl+D दाबा. दोन्हीने ravi चा shell बंद होतो आणि तुम्ही परत ec2-user होता:

[ravi@ip-172-31-xx-xx ~]$ exit
logout
[ec2-user@ip-172-31-xx-xx ~]$ whoami
ec2-user

su ravi (dash शिवाय) नंतर logout ऐवजी exit हा शब्द print होतो. Result तोच.

Correction

Class मध्ये user मधून "बाहेर यायला" Ctrl+C वापरलं. Ctrl+C ने logout होत नाही. ते फक्त चालू असलेली command थांबवतं, आणि तुम्ही ravi च राहता:

[ravi@ip-172-31-xx-xx ~]$ sleep 30
^C
[ravi@ip-172-31-xx-xx ~]$ whoami
ravi

User च्या shell मधून बाहेर यायला exit किंवा Ctrl+D वापरा.

Ravindra Bagale's Tip

दुसऱ्या user म्हणून काही test करताना su - ravi वापरा. मग तो user login केल्यावर जे बघतो तेच तुम्हाला दिसतं, त्याचं home folder आणि त्याच्या settings सकट.

7. Users एकमेकांपासून वेगळे: ramesh बनवा

का. प्रत्येकाच्या files by default private असतात. दुसरा user बनवून हे सिद्ध करूया.

Example 10: दुसरा user, पुढचा UID.

[ec2-user@ip-172-31-xx-xx ~]$ sudo useradd ramesh
[ec2-user@ip-172-31-xx-xx ~]$ sudo passwd ramesh
[ec2-user@ip-172-31-xx-xx ~]$ tail -3 /etc/passwd
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
ravi:x:1001:1001::/home/ravi:/bin/bash
ramesh:x:1002:1002::/home/ramesh:/bin/bash

Example 11: ramesh ravi च्या home मध्ये बघू शकत नाही.

[ec2-user@ip-172-31-xx-xx ~]$ su - ramesh
Password:
[ramesh@ip-172-31-xx-xx ~]$ cd /home/ravi
-bash: cd: /home/ravi: Permission denied
[ramesh@ip-172-31-xx-xx ~]$ ls /home/ravi
ls: cannot open directory '/home/ravi': Permission denied
[ramesh@ip-172-31-xx-xx ~]$ exit

Classroom line

Can't go in, permission denied. Every user's files are separate and isolated.

8. /etc/passwd वाचणं

का. तुम्ही बनवलेला प्रत्येक user म्हणजे /etc/passwd मधली एक line. ती वाचली की user चा number, मुख्य group, home आणि shell कळतो.

काय. Line मध्ये : ने वेगळे केलेले सात fields असतात

ravi:x:1001:1001::/home/ravi:/bin/bash
  1. ravi: user चं नाव.
  2. x: password इथे नाही; तो hash म्हणून /etc/shadow मध्ये ठेवलाय.
  3. 1001: UID, user चा number. Linux खरं तर याच number ने काम करतो.
  4. 1001: GID, मुख्य group (ravi) चा number.
  5. (रिकामं): comment, पूर्ण नावासारखं. ec2-user च्या line मध्ये EC2 Default User आहे.
  6. /home/ravi: home folder.
  7. /bin/bash: login ला सुरू होणारा shell.
/etc/passwd ची एक line, एकेक field ravi : x : 1001 : 1001 : : /home/ravi : /bin/bash 1. user चं नाव 2. password /etc/shadow मध्ये आहे 3. UID 4. GID (मुख्य group) 5. comment (रिकामी) 6. home folder 7. login shell Amazon Linux 2023 वरचे UIDs 0root 1-999system accounts 1000ec2-user 1001ravi 1002ramesh

Figure 4. /etc/passwd च्या एका line चे सात fields, आणि Amazon Linux 2023 वरचे UIDs: root 0, system accounts 1000 च्या खाली, ec2-user 1000, मग 1001, 1002 असे.

Amazon Linux 2023 वरचे UIDs. root 0 आहे. System services ची accounts 1000 च्या खाली असतात. ec2-user 1000, आणि प्रत्येक नवीन user ला पुढचा number मिळतो: ravi 1001, ramesh 1002.

Example 12: फक्त वाचा, sudo लागत नाही.

[ec2-user@ip-172-31-xx-xx ~]$ ls -l /etc/passwd /etc/shadow
-rw-r--r--. 1 root root 1836 Jan  5 10:15 /etc/passwd
----------. 1 root root  998 Jan  5 10:15 /etc/shadow
[ec2-user@ip-172-31-xx-xx ~]$ grep ramesh /etc/passwd
ramesh:x:1002:1002::/home/ramesh:/bin/bash

/etc/passwd सगळे वाचू शकतात. /etc/shadow ला एकही permission bit नाही, म्हणून फक्त root वाचू शकतो.

Correction

Class मध्ये file home folder मधून sudo nano passwd ने उघडली. ती वेगळीच file आहे: / शिवायचा path म्हणजे "चालू folder मध्ये", म्हणून nano ने रिकामी [ New File ] उघडली. Save केली तर ~/passwd नावाची root ची file बनते, जिचा users शी काहीही संबंध नाही. खरी file आहे /etc/passwd. ती cat /etc/passwd ने वाचा (sudo लागत नाही) आणि हाताने edit करू नका: useradd, usermod आणि userdel वापरा, ते /etc/shadow आणि /etc/group पण बरोबर ठेवतात.

9. ec2-user ला sudo कुठून मिळतो

का. ravi ला sudo देण्याआधी, ec2-user ला तो कसा मिळाला ते बघूया.

काय. Amazon Linux 2023 server वर दोन rules sudo देऊ शकतात:

  1. /etc/sudoers मध्ये: %wheel ALL=(ALL) ALL. wheel group चा प्रत्येक member root म्हणून काहीही चालवू शकतो, स्वतःचा password टाकल्यावर.
  2. /etc/sudoers.d/90-cloud-init-users मध्ये, पहिल्या boot ला cloud-init ने लिहिलेला: ec2-user ALL=(ALL) NOPASSWD:ALL. ec2-user password शिवाय काहीही चालवू शकतो.

Example 13: दोन्ही rules बघा. ec2-user म्हणून:

[ec2-user@ip-172-31-xx-xx ~]$ id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
[ec2-user@ip-172-31-xx-xx ~]$ sudo -l
...
User ec2-user may run the following commands on ip-172-31-xx-xx:
    (ALL) ALL
    (ALL) NOPASSWD: ALL
[ec2-user@ip-172-31-xx-xx ~]$ sudo passwd -S ec2-user
ec2-user LK 2026-01-05 0 99999 7 -1 (Password locked.)

ec2-user wheel मध्ये आहे, पण त्याचा password lock आहे (तुम्ही key ने login करता). म्हणजे फक्त wheel rule असता तर त्याने password विचारला असता, जो ec2-user कडे नाहीच. Cloud-init चा NOPASSWD rule हाच ec2-user ला न विचारता sudo चालवू देतो. आम्ही box वर दोन्ही test केलं:

  1. ec2-user ला wheel मधून काढलं, cloud-init rule ठेवला: sudo whoami तरीही root print करतो.
  2. ec2-user wheel मध्ये, cloud-init rule काढला: sudo password विचारतो, आणि तीन प्रयत्नांनंतर sudo: 3 incorrect password attempts म्हणतो.
Amazon Linux 2023 वर sudo कोण वापरू शकतो /etc/sudoers%wheel ALL=(ALL) ALLwheel चे members, स्वतःचा password टाकल्यावर /etc/sudoers.d/90-cloud-init-usersec2-user ALL=(ALL) NOPASSWD:ALLec2-user, password न विचारता ec2-userwheel मध्ये + NOPASSWD rulesudo चालतो, password विचारत नाही.त्याचा password lock आहे: काम NOPASSWD rule मुळे होतं. wheel मधला ravi%wheel ला match होतोsudo [sudo] password for ravi विचारतो, मग चालतो. wheel मध्ये नसलेला raviकुठलाच rule match होत नाहीravi is not in the sudoers file.

Figure 5. Amazon Linux 2023 वरचे दोन sudo rules, आणि ec2-user, wheel मधला ravi आणि wheel बाहेरचा ravi यांच्यासाठी काय होतं.

Classroom line

Only ec2-user can use sudo; others can if you add them to wheel.

कोणत्याही user चं, त्याच्या म्हणून न जाता, check करा:

[ec2-user@ip-172-31-xx-xx ~]$ sudo -l -U ravi
User ravi is not allowed to run sudo on ip-172-31-xx-xx.

10. Step 4: wheel मध्ये add करून sudo द्या

का. कधी कधी developer ला खरंच root चं काम लागतं, जसं sudo yum install -y tree ने package install करणं किंवा sudo service nginx restart ने service restart करणं. ec2-user share करण्यापेक्षा त्या व्यक्तीला wheel मध्ये टाका.

कसं. ज्याला आधीच sudo आहे असा कुठलाही user हे करू शकतो. ec2-user म्हणून:

[ec2-user@ip-172-31-xx-xx ~]$ sudo usermod -aG wheel ravi
[ec2-user@ip-172-31-xx-xx ~]$ groups ravi
ravi : ravi wheel
[ec2-user@ip-172-31-xx-xx ~]$ sudo -l -U ravi
...
User ravi may run the following commands on ip-172-31-xx-xx:
    (ALL) ALL
  1. usermod: आधीच असलेला user बदलायचा.
  2. -G wheel: set करायचा extra group.
  3. -a: append, ravi कडे आधीपासून असलेले groups ठेवा. -a शिवाय -G त्याचे extra groups काढून फक्त तुम्ही दिलेले ठेवतो.

Classroom line

Let's add ravi to the wheel group and see if he can use sudo.

Example 14: नवीन login मध्ये ravi sudo वापरतो. तो स्वतःचा password टाकतो, root चा नाही आणि ec2-user चाही नाही:

[ec2-user@ip-172-31-xx-xx ~]$ su - ravi
Password:
[ravi@ip-172-31-xx-xx ~]$ id
uid=1001(ravi) gid=1001(ravi) groups=1001(ravi),10(wheel)
[ravi@ip-172-31-xx-xx ~]$ sudo touch /home/suudowala.txt
[sudo] password for ravi:
[ravi@ip-172-31-xx-xx ~]$ ls -l /home/suudowala.txt
-rw-r--r--. 1 root root 0 Jan  5 10:15 /home/suudowala.txt

File root ची आहे, कारण sudo ने touch root म्हणून चालवला. बरोबर password दिल्यावर साधारण पाच मिनिटं sudo त्या terminal मध्ये परत विचारत नाही.

Example 15: बदलाच्या आधी उघडलेल्या shell ला मिळत नाही. usermod चालवताना ravi आधीच login असेल, तर तो जुना shell अजूनही fail होतो:

[ravi@ip-172-31-xx-xx ~]$ id
uid=1001(ravi) gid=1001(ravi) groups=1001(ravi)
[ravi@ip-172-31-xx-xx ~]$ sudo whoami
[sudo] password for ravi:
ravi is not in the sudoers file.

त्याला exit करून परत login करावं लागतं. का ते section 12 मध्ये.

Correction

Class मध्ये सांगितलं की फक्त root कोणाला wheel मध्ये add करू शकतो. ज्याला आधीच sudo आहे असा कुठलाही user करू शकतो, उदा. ec2-user, sudo usermod -aG wheel ravi ने. आणि wheel member [sudo] password for ravi: ला स्वतःचा password टाकतो.

11. Step 5: gpasswd -d ने sudo काढून घ्या

कसं. ec2-user म्हणून ravi ला wheel मधून काढा:

[ec2-user@ip-172-31-xx-xx ~]$ sudo gpasswd -d ravi wheel
Removing user ravi from group wheel
[ec2-user@ip-172-31-xx-xx ~]$ groups ravi
ravi : ravi

gpasswd -d = या user ला या group मधून काढा. त्याचे बाकीचे groups तसेच राहतात.

Example 16: धक्का. ravi ने wheel मध्ये असताना उघडलेल्या shell मध्ये sudo चालतच राहतो:

[ravi@ip-172-31-xx-xx ~]$ id
uid=1001(ravi) gid=1001(ravi) groups=1001(ravi),10(wheel)
[ravi@ip-172-31-xx-xx ~]$ sudo whoami
root

Example 17: नवीन login मध्ये तो जातो.

[ravi@ip-172-31-xx-xx ~]$ exit
logout
[ec2-user@ip-172-31-xx-xx ~]$ su - ravi
Password:
[ravi@ip-172-31-xx-xx ~]$ sudo whoami
[sudo] password for ravi:
ravi is not in the sudoers file.

12. sudo का चालत राहिला: groups login ला ठरतात

का. Bug सारखं वाटतं, पण Linux असंच काम करतो, आणि कोणाचे हक्क काढताना हे माहिती असायला पाहिजे.

काय. तुम्ही login करता तेव्हा तुमच्या shell ला /etc/group मधून groups ची list मिळते, आणि shell बंद होईपर्यंत तीच list राहते. नाव न देता id चालवलं की तुमच्या चालू shell ची list दिसते. groups ravi आणि id ravi disk वरच्या files वाचतात. sudo तो चालवणाऱ्या shell चे groups बघतो.

दोन कारणं शक्य होती, म्हणून आम्ही box वर दोन्ही test केली:

  1. sudo चा password cache. बरोबर password नंतर sudo साधारण पाच मिनिटं परत विचारत नाही. जुन्या shell मध्ये आम्ही sudo -k ने तो cache साफ केला आणि परत sudo whoami चालवलं. त्याने ravi चा password विचारला आणि तरीही root print केलं. म्हणजे cache हे कारण नाही; तो फक्त password चा प्रश्न टाळतो.
  2. Shell ची स्वतःची groups list. gpasswd -d नंतरसुद्धा जुन्या shell च्या id मध्ये 10(wheel) दिसत होतं. नवीन su - ravi मध्ये फक्त 1001(ravi) दिसलं, आणि तिथे sudo fail झाला. हेच खरं कारण.

Group add करतानासुद्धा असंच होतं: Example 15 मधल्या shell ला नवीन login होईपर्यंत wheel मिळाला नाही.

Group मधले बदल पुढच्या login पासून लागू होतात $ sudo usermod -aG wheel raviDisk वर (groups ravi)raviwheel/etc/group login ला वाचला जातोShell A (बदलाच्या आधी उघडलेला)या shell ला login ला मिळालेले groups:ravi$ sudo whoamiravi is not in the sudoers file.बदलाच्या आधी उघडलेल्या shell मध्ये फक्त ravi: sudo fail. $ su - raviDisk वर (groups ravi)raviwheel/etc/group login ला वाचला जातोShell B (नवीन login)या shell ला login ला मिळालेले groups:raviwheel$ sudo whoamirootनवीन login ला wheel मिळतो: ravi ने स्वतःचा password टाकला की sudo चालतो. $ sudo gpasswd -d ravi wheelDisk वर (groups ravi)raviwheel/etc/group मधून wheel काढलाShell B (अजून उघडा)या shell ला login ला मिळालेले groups:raviwheel$ sudo -k; sudo whoamirootDisk वरून काढला, पण shell B कडे wheel अजून आहे. sudo -k नंतरसुद्धा चालतो. $ exit ; su - raviDisk वर (groups ravi)raviwheel/etc/group मधून wheel काढलाShell C (नवीन login)या shell ला login ला मिळालेले groups:ravi$ sudo whoamiravi is not in the sudoers file.नवीन login मध्येच wheel जातो. आता sudo खरंच गेला. खालची प्रत्येक step ec2-user म्हणून, किंवा ravi च्या shells मध्ये चालते:

Figure 6. Animation: group मधले बदल पुढच्या login पासून लागू होतात. जुना shell सुरुवातीचे groups ठेवतो, म्हणून gpasswd -d नंतर ravi परत login करेपर्यंत sudo चालत राहतो.

Correction

Class मध्ये gpasswd -d नंतर sudo touch hh.txt चालला, त्याचं कारण "user स्वतःला काढू शकत नाही" असं सांगितलं. खरं कारण: group मधले बदल नवीन login sessions ला लागू होतात, आणि ravi च्या चालू shell च्या groups list मध्ये wheel अजून होता. sudo -k ने sudo cache साफ करून ते थांबलं नाही; फक्त नवीन login ने थांबलं.

Ravindra Bagale's Tip

कोणाचा sudo काढताना त्याचे उघडे sessions पण बंद करा, उदा. sudo pkill -KILL -u ravi ने, नाहीतर तो logout होईपर्यंत वापरत राहू शकतो. तो गेला का ते who ने (users chapter मधून) check करा.

13. Step 6: userdel ने user delete करा

का. कोणी team सोडली की त्याचं login काढायचं. प्रश्न असा की त्याच्या files चं काय होतं.

Classroom line

When we delete a user, its files should be deleted too, right?

काय. दोन पद्धती:

  1. sudo userdel ravi: user काढतो, पण /home/ravi आणि त्याचा mailbox /var/spool/mail/ravi ठेवतो.
  2. sudo userdel -r ravi: user आणि त्याचं home आणि mailbox काढतो.

Classroom line

User ravi gets deleted, but the ravi folder doesn't.

Classroom line

Because data is always important.

Example 18: ravi अजून login आहे. User चे processes चालू असताना userdel नकार देतो:

[ec2-user@ip-172-31-xx-xx ~]$ sudo userdel ravi
userdel: user ravi is currently used by process 2412

त्याला logout करायला सांगा (किंवा वरच्या tip प्रमाणे sessions बंद करा), मग परत करा.

Example 19: साधा userdel home ठेवतो.

[ec2-user@ip-172-31-xx-xx ~]$ sudo userdel ravi
[ec2-user@ip-172-31-xx-xx ~]$ su ravi
su: user ravi does not exist or the user entry does not contain all the required fields
[ec2-user@ip-172-31-xx-xx ~]$ ls -l /home
total 0
drwx------. 2 ec2-user ec2-user 62 Jan  5 10:15 ec2-user
drwx------. 2 ramesh   ramesh   62 Jan  5 10:15 ramesh
drwx------. 3     1001     1001 78 Jan  5 10:15 ravi
-rw-r--r--. 1 root     root      0 Jan  5 10:15 suudowala.txt

Folder अजून तिथेच आहे, आणि मालक म्हणून आता फक्त 1001 हा number दिसतो, कारण त्या number चा कुठलाच user आता उरला नाही.

Example 20: -r हे userdel च्या ऐवजी वापरायचं, नंतर नाही. User गेल्यावर -r ला काम करायला काहीच उरत नाही:

[ec2-user@ip-172-31-xx-xx ~]$ sudo userdel -r ravi
userdel: user 'ravi' does not exist

Example 21: बरोबर पद्धत, एकाच step मध्ये.

[ec2-user@ip-172-31-xx-xx ~]$ sudo userdel -r ramesh
[ec2-user@ip-172-31-xx-xx ~]$ ls /home
ec2-user  ravi  suudowala.txt
[ec2-user@ip-172-31-xx-xx ~]$ grep ramesh /etc/passwd
[ec2-user@ip-172-31-xx-xx ~]$

ramesh ची line, home आणि mailbox गेले. (ravi हा Example 19 मधून मागे राहिलेला folder आहे.)

userdel vs userdel -r sudo userdel ravi sudo userdel -r ravi /etc/passwd मधला ravi /home/ravi राहतो, आता मालक 1001 /var/spool/mail/ravi राहतो /etc/passwd मधला ravi /home/ravi /var/spool/mail/ravi मुद्दाम ठेवतात: data महत्त्वाचा असतो. साध्या userdel ऐवजी -r वापरा, त्याच्या नंतर नाही. मागे राहिलेलं साफ का करायचंपुढच्या नवीन user ला परत UID 1001 मिळू शकतो, मग जुना /home/ravi त्याचा होतो.

Figure 7. userdel /home/ravi आणि mailbox ठेवतो, आता त्यांचा मालक 1001 हा number. userdel -r user, home आणि mailbox काढतो.

मागे राहिलेलं का महत्त्वाचं. पुढे काय होऊ शकतं ते बघा. ramesh गेला आहे आणि मागे राहिलेला /home/ravi अजून 1001 चा आहे. आता परत ramesh बनवा. त्याला 1001 मिळतो, म्हणजे ravi चा number, म्हणून जुना folder आता त्याचा होतो:

[ec2-user@ip-172-31-xx-xx ~]$ sudo useradd ramesh
[ec2-user@ip-172-31-xx-xx ~]$ id ramesh
uid=1001(ramesh) gid=1001(ramesh) groups=1001(ramesh)
[ec2-user@ip-172-31-xx-xx ~]$ ls -ld /home/ravi
drwx------. 2 ramesh ramesh 62 Jan  5 10:15 /home/ravi

Files नावांच्या नाही, numbers च्या असतात. useradd वापरात असलेल्या सगळ्यात मोठ्या number नंतरचा number देतो, म्हणून सगळ्यात नवीन users delete झाले की एखादा number परत येऊ शकतो.

Example 22: मागे राहिलेलं साफ करणं. आधीच साधा userdel वापरला असेल, तर मागे राहिलेला folder आणि mailbox हाताने काढा (इथे आधी परत sudo userdel -r ramesh, म्हणजे तो कोणाचाच राहत नाही). Enter दाबण्याआधी path दोनदा वाचा; rm -rf काहीच विचारत नाही:

sudo rm -rf /home/ravi
sudo rm -f /var/spool/mail/ravi

Correction

Class मध्ये सांगितलं की user delete केल्यावर folder कधीच delete होत नाही. ते फक्त साध्या userdel साठी खरं आहे. userdel -r home folder आणि mailbox पण delete करतो. तो userdel च्या ऐवजी वापरा, नंतर नाही: दुसरी command userdel: user 'ravi' does not exist म्हणून fail होते.

Ravindra Bagale's Tip

Company मध्ये आधी त्या व्यक्तीच्या home मधून लागणारं (code, notes, logs) copy करून घ्या, मग userdel -r ने delete करा. "लागेल कधीतरी" म्हणून मागे ठेवलेलं home एक दिवस दुसऱ्या कोणाच्या UID चं होतं.

14. पूर्ण lifecycle एका पानावर

काय. या chapter मधली प्रत्येक command, क्रमाने. सगळ्या ec2-user म्हणून (किंवा दुसऱ्या sudo user म्हणून) चालतात:

Step Command काय करते
बनवा sudo useradd ravi user, group ravi, /home/ravi (700), mailbox
Password sudo passwd ravi set किंवा reset; जुना password लागत नाही
Switch su - ravi ravi म्हणून पूर्ण login; परत exit किंवा Ctrl+D
Check id ravi, groups ravi, sudo -l -U ravi disk वरचे groups आणि sudo हक्क
sudo द्या sudo usermod -aG wheel ravi ravi च्या पुढच्या login पासून
sudo काढा sudo gpasswd -d ravi wheel जुने shells exit होईपर्यंत ठेवतात
Delete sudo userdel -r ravi user, home आणि mailbox

15. घरी करून बघा

Try at home

Task 1: बनवा आणि switch करा

  1. sudo useradd ravi, मग id ravi आणि ls -ld /home/ravi.
  2. Password set करण्याआधी su ravi करून बघा, मग sudo passwd ravi ने password द्या.
  3. su ravi + pwd ची su - ravi + pwd शी तुलना करा. दोन्हीतून exit ने बाहेर या.

Task 2: भिंती

  1. ravi म्हणून: ls /, ls /home, cat /etc/passwd, मग ls /home/ec2-user आणि cat /etc/shadow.
  2. ramesh बनवा आणि /etc/passwd मधली त्याची line बघा. त्याचा UID किती?

Task 3: sudo द्या आणि काढा

  1. एक su - ravi shell उघडा आणि उघडाच ठेवा. दुसऱ्या terminal मध्ये sudo usermod -aG wheel ravi चालवा.
  2. ravi च्या जुन्या shell मध्ये id आणि sudo whoami चालवा. मग नवीन su - ravi उघडून परत करून बघा.
  3. sudo gpasswd -d ravi wheel चालवा. उघडा shell (sudo -k नंतरसुद्धा) आणि नवीन login दोन्ही test करा. Results समजावून सांगा.

Task 4: delete

  1. sudo userdel ravi, मग ls -l /home. आता /home/ravi चा मालक कोण?
  2. sudo rm -rf /home/ravi आणि sudo rm -f /var/spool/mail/ravi ने साफ करा.
  3. ramesh ला बरोबर पद्धतीने, sudo userdel -r ramesh ने, delete करा.

झालं की ls /home मध्ये फक्त ec2-user दिसतोय ते check करा, आणि instance stop करा.

Recap

थोडक्यात

  1. Users लोकांना वेगळं ठेवतात: स्वतःचं home (700), स्वतःच्या files, by default sudo नाही.
  2. / आणि /home मध्ये सगळे जाऊन list बघू शकतात; तिथे लिहायला, किंवा दुसऱ्याच्या home मध्ये जायला, हक्क लागतात.
  3. sudo useradd ravi user, त्याच नावाचा group, /home/ravi आणि mailbox बनवतो, password lock ठेवून.
  4. sudo passwd ravi password set किंवा reset करतो. Type केलेलं दिसत नाही. root ला BAD PASSWORD फक्त warning; स्वतःचा password बदलणाऱ्या user ला ते checks लागू होतात.
  5. su ravi तुमचा folder ठेवतो; su - ravi म्हणजे /home/ravi मध्ये पूर्ण login. बाहेर exit किंवा Ctrl+D ने, Ctrl+C ने नाही.
  6. Rule नसलेल्या user ला ravi is not in the sudoers file. येतं.
  7. ec2-user चा sudo cloud-init च्या NOPASSWD rule मुळे चालतो; wheel members स्वतःच्या password ने sudo वापरतात.
  8. कुठलाही sudo user sudo देऊ शकतो: sudo usermod -aG wheel ravi. काढायला sudo gpasswd -d ravi wheel.
  9. Group मधले बदल पुढच्या login पासून. जुने shells त्यांचे groups ठेवतात, sudo -k नंतरसुद्धा.
  10. /etc/passwd: नाव, x (hash /etc/shadow मध्ये), UID, GID, comment, home, shell. ec2-user 1000, मग 1001, 1002.
  11. /etc/passwd वाचा, edit करू नका; home मधला sudo nano passwd ही वेगळी, नवीन file.
  12. userdel home आणि mailbox ठेवतो; userdel -r काढतो. साध्या userdel ऐवजी -r वापरा, आणि मागे राहिलेलं साफ करा, कारण UIDs परत येऊ शकतात.

Classroom line

Our Linux doesn't end here; it ends only when the whole course ends.


Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. User ची नावं (ravi, ramesh) आणि files ची नावं शिकण्यासाठीची उदाहरणं आहेत. Commands आणि messages Amazon Linux 2023 च्या test copy वर (sudo 1.9.15, shadow-utils 4.9, passwd 0.80, libpwquality 1.4.4) तपासले, ज्यात sudoers, PAM आणि login.defs files EC2 server सारख्याच होत्या, आणि EC2 server च्या settings read-only वाचून. Prompt मधलं hostname, dates, sizes आणि process numbers उदाहरणादाखल आहेत.