Linux හි sudo යනු කුමක්ද? භාවිතය, වින්‍යාසය, ආරක්ෂාව සහ ගැටළු විසඳීම පිළිබඳ සම්පූර්ණ මාර්ගෝපදේශය

目次

1. විෂය පරිච්ඡේදය: sudo කුමක්ද?

sudo හි මූලික අර්ථය සහ භූමිකාව

ලිනක්ස් සහ යුනික්ස්-වැනි පද්ධතිවල, sudo එක වඩාත් වැදගත් පණිවිඩවලින් එකකි.
sudo යන යෙදුම “superuser do” යන්නෙහි කෙටි යෙදුමකි, සහ එය පරිශීලකයින්ට පරිපාලන (රූට්) හිමිකම් සමඟ විධාන ක්‍රියාත්මක කිරීමට තාවකාලිකව ඉඩ සලසන මෙවලමකි.

සාමාන්‍යයෙන්, සාමාන්‍ය පරිශීලකයින්ට මුළු පද්ධතියට බලපාන මෙහෙයුම්, උදාහරණයක් ලෙස පැකේජ් ස්ථාපනය කිරීම හෝ පද්ධති සැකසුම් වෙනස් කිරීම වැනි, කිරීමට ඉඩ නැහැ. නමුත්, sudo පණිවිඩය භාවිතා කිරීමෙන්, මෙම හිමිකම් සහිත මෙහෙයුම් පාලනය කළ හැකි සහ සීමිත ආකාරයෙන් ක්‍රියාත්මක කළ හැකිය.

උදාහරණයක් ලෙස, පහත පණිවිඩය apt රූට් හිමිකම් සමඟ ක්‍රියාත්මක කරයි:

sudo apt update

මෙම ආකාරයෙන්, sudo පරිපාලන හිමිකම් භාවිතා කිරීම සඳහා ආරක්ෂිත යාන්ත්‍රණයක් ලෙස වැදගත් භූමිකාවක් ඉටු කරයි, පද්ධති ආරක්ෂාව සහ භාවිතාකාරීත්වය යන දෙකම සමබර කරමින්.

sudo සහ su අතර වෙනස

sudo හි සමාන අරමුණකින් යුත් තවත් පණිවිඩයක් වන්නේ su ය, නමුත් දෙක අතර පැහැදිලි වෙනස්කම් තිබේ.

  • su යන්න “substitute user” යන්නෙහි කෙටි යෙදුමකි සහ වෙනත් පරිශීලකයෙකුට (සාමාන්‍යයෙන් රූට්) සම්පූර්ණයෙන්ම මාරු වීමට භාවිතා කෙරේ. su භාවිතා කළ විට, ඔබ එම පරිශීලකයා ලෙස මුළු සැසිය පුරා ක්‍රියා කරනවා.
  • අනෙක් අතට, sudo ඔබට වත්මන් පරිශීලකයා ලෙසම රැඳී සිටිමින් තනි පණිවිඩයකට පරිපාලන හිමිකම් තාවකාලිකව ණය ගැනීමට ඉඩ සලසයි.

සංක්ෂිප්තව, su සැසි මට්ටමේ පරිශීලකයින් මාරු කරයි, මෙනිසා sudo පණිවිඩ මට්ටමේ හිමිකම් ඉහළ නංවයි. ආරක්ෂාවේ දෘෂ්ටිකෝණයකින්, sudo පණිවිඩ ඉතිහාසය ලුහුබඳින්නට ලේසි කරයි, එබැවින් එය නූතන ලිනක්ස් විතරණවල සම්මත ප්‍රවේශය බවට පත්ව තිබේ.

sudo සාමාන්‍යයෙන් භාවිතා කරන ලිනක්ස් විතරණ

sudo පණිවිඩය බොහෝ ලිනක්ස් විතරණවල අත්සන් කර ඇති ලෙස සක්‍රිය වී ඇත, විශේෂයෙන් පහත පරිදි:

  • උබුන්ටු-අඩඋනුගත පද්ධති (Ubuntu, Linux Mint, ආදිය) → රූට් ගිණුම අත්සන් කර ඇති ලෙස අක්‍රිය වී ඇත, සහ සියලුම පරිපාලන කාර්යයන් sudo හරහා සිදු කෙරේ.
  • ඩෙබියන්-අඩඋනුගත පද්ධති → sudo අත්සන් කර ඇති ලෙස අක්‍රිය කිරීමට අවශ්‍ය විය හැකි, නමුත් එය බොහෝ විට ආරක්ෂාවේ හොඳ පුරුද්දක් ලෙස නිර්දේශ කෙරේ.
  • Fedora, CentOS, සහ Red Hat-අඩඋනුගත පද්ධති → සෘජු රූට් ප්‍රවේශය සිදු කළ හැකි, නමුත් sudo භාවිතා කිරීම තවමත් සුලබයි.

උබුන්ටුවේ විශේෂයෙන්, රූට් ගිණුම අත්සන් කර ඇති ලෙස අක්‍රිය වී ඇත, සහ සියලුම පරිපාලන මෙහෙයුම් sudo භාවිතා කරමින් සිදු කළ යුතුය. මෙම හේතුව නිසා, උබුන්ටු පරිශීලකයින් සඳහා sudo තේරුම් ගැනීම අත්‍යවශ්‍ය වේ.

මිනිසුන් “sudo sudo” සෙවීමට හේතු මොනවාද?

“sudo sudo” යන යෙදුම පළමු බැලීමකදී අනවශ්‍ය බව පෙනෙන්නට ඇති, නමුත් එය පහත හේතු නිසා බොහෝ විට සෙවෙනවා:

  • sudo හි අර්ථය සහ භාවිතය ඉස්මතු කිරීමට හෝ වඩා හොඳින් තේරුම් ගැනීමට උත්සාහ කරන ආරම්භකයින්
  • sudo: sudo: command not found වැනි දෝෂවලට මුහුණ දෙන පරිශීලකයින්
  • ස්ක්‍රිප්ට් හෝ පයිප්ලයින්වල sudo දෙවරක් වැරදි ලෙස භාවිතා වී ඇති උදාහරණ දැකීමෙන් පසුව ඇතිවන ව්‍යාකූලත්වය

මෙම සෙවුම් අරමුණු සැලකිල්ලට ගෙන, පහත කොටස්වල sudo හි නිවරදි භාවිතය, සැකසුම් ක්‍රම, සහ දෝෂ නිරාකරණ තාක්ෂණයන් විස්තරාත්මකව පැහැදිලි කරනු ඇත.

2. sudo පණිවිඩයේ මූලික භාවිතය

sudo හි මූලික ව්‍යාකරණය

sudo හි මූලික ව්‍යාකරණය ඉතා සරලයි:

sudo [options] command

උදාහරණයක් ලෙස, පද්ධතියේ පැකේජ් තොරතුරු යාවත්කාලීන කිරීමට:

sudo apt update

මෙයින් අදහස් වන්නේ අප්ට් යාවත්කාලීන පණිවිඩය රූට් හිමිකම් සමඟ ක්‍රියාත්මක වේ යන්නයි.

මුරපද තහවුරු කිරීම සහ හිමිකාරීත්ව මතක තබා ගැනීම

ඔබ sudo භාවිතා කරන පළමු වතාවේදී, හෝ නිශ්චිත කාලයක් ගත වීමෙන් පසුව, පද්ධතිය ඔබගේ පරිශීලක මුරපදය ඇතුළත් කිරීමට ඉල්ලා සිටියි. මෙම ආරක්ෂක යාන්ත්‍රණය අනපේක්ෂිත වැරදි භාවිතය හෝ අනවසර ප්‍රවේශය වැළැක්වීමට උපකාරී වේ.

මුරපදය ඇතුළත් කිරීමෙන් පසු, එය නිශ්චිත කාලයක් සඳහා (උබුන්ටුවේ අත්සන් කර ඇති ලෙස මිනිත්තු 5) මතක තබා ගනී. මෙම කාලය තුළ, පසුකාලීන sudo පණිවිඩවල මුරපදය නැවත ඇතුළත් කිරීම අවශ්‍ය නොවේ. මෙම කාල සීමාව sudoers ගොනුවේ ගැලපිය හැකිය.

සාමාන්‍යයෙන් භාවිතා කරන විකල්ප

sudo මෙහෙයුම් වඩා නම්‍යශීලී සහ පහසු කිරීමට බොහෝ විකල්ප සපයයි. පහත දැක්වෙන්නේ බොහෝ විට භාවිතා කරන සමහරක්.

-u (වෙනත් පරිශීලකයෙකු ලෙස ක්‍රියා කිරීම)

By default, commands are executed as root, but with the -u option, you can run a command as any specified user.

sudo -u www-data whoami

The output will be www-data, confirming that the command was executed as the www-data user.

-s (Start a Shell)

The following command opens a temporary shell with root privileges:

sudo -s

Be cautious when working in a root shell.

-i (Simulate a Full Root Login)

This option creates a more complete root environment. Environment variables are switched to those of root, resulting in a root session similar to logging in directly as root.

sudo -i

-l (List Allowed Commands)

You can check which commands you are allowed to run with sudo:

sudo -l

This is useful for verifying permission settings and security restrictions.

ආරම්භකයන් සඳහා වැදගත් කරුණු

  • ඔබ sudo පසු ඉඩක් ඇතුළත් කළ යුතුය. උදාහරණයක් ලෙස, sudoapt වැරදියි.
  • බහු විධාන ක්‍රියාත්මක කරන විට, සම්පූර්ණ විධානය උද්ධෘත කරගත යුතුය හෝ අර්ධවිරම් (;) භාවිතා කර වෙන් කළ යුතුය.
  • sudo සමඟ GUI යෙදුම් ආරම්භ කිරීම වින්‍යාස ගොනු හානියට පත් කරයි, එබැවින් සාමාන්‍යයෙන් එය avoided කළ යුතුය (උදාහරණයක් ලෙස, sudo gedit).

3. sudoers ගොනුව සහ ප්‍රවේශ පාලනය

sudoers ගොනුව කුමක්ද?

sudo විධානයේ හැසිරීම පාලනය කරන වින්‍යාස ගොනුව /etc/sudoers වේ. මෙම ගොනුව sudo භාවිතයෙන් කවුද කුමන විධාන ක්‍රියාත්මක කළ හැකිද යන දේ නියම කරයි.

උදාහරණයක් ලෙස, පරිශීලකයකුට sudo සමඟ නියමිත විධාන පමණක් ක්‍රියාත්මක කිරීමට ඉඩ දීම වැනි නිරවද්‍ය ප්‍රවේශ පාලනය සලසයි.
මෙම සවිස්තරාත්මකත්වය අවම අවසර නීතිය (principle of least privilege) අනුගමනය කිරීමට ඉඩ සලසයි, පරිශීලකයන්ට අවශ්‍ය අවම අවසර පමණක් ලබා දේ.

visudo විධානය සමඟ ආරක්ෂිත සංස්කරණය

ඔබ කවදාවත් /etc/sudoers ටෙක්ස්ට් එඩිටරයක් භාවිතා කර සෘජුව සංස්කරණය නොකළ යුතුය.

මෙම ගොනුවේ වාක්‍ය රචනා දෝෂයක් sudo සම්පූර්ණයෙන් අක්‍රිය කර දිය හැක, එමඟින් පද්ධතිය ප්‍රතිසාධනය කිරීම අසීරු වේ. ඒ නිසා, visudo විධානය භාවිතා කර සංස්කරණය කිරීම දැඩි ලෙස නිර්දේශ කරයි.

sudo visudo

visudo සුරැකීමට පෙර වාක්‍ය රචනා පරීක්ෂාවක් සිදු කරයි, එමඟින් ආරක්ෂිත වින්‍යාස වෙනස්කම් සිදු කළ හැක.

මූලික වාක්‍ය රචනා සහ වින්‍යාස උදාහරණ

sudoers ගොනුවේ මූලික වාක්‍ය රචනා පහත පරිදි වේ:

username hostname = (run-as user) allowed commands

උදාහරණය:

alice ALL=(ALL:ALL) ALL

මෙම වින්‍යාසය alice පරිශීලකයාට සියලු හෝස්ට් වල සියලු පරිශීලකයන් ලෙස සියලු විධාන ක්‍රියාත්මක කිරීමට ඉඩ සලසයි.

තවත් සීමිත උදාහරණයක්:

bob ALL=(ALL) /usr/bin/systemctl restart nginx

මෙය bob පරිශීලකයාට sudo සමඟ nginx නැවත ආරම්භ කිරීමේ විධානය පමණක් ක්‍රියාත්මක කිරීමට ඉඩ සලසයි.

කණ්ඩායම්-අධාරිත පාලනය: sudo කණ්ඩායම

Ubuntu වැනි බොහෝ බෙදාහැරීම් වල, sudo කණ්ඩායමට අයත් පරිශීලකයන් sudo භාවිතා කිරීමට අවසර ඇත.

%sudo ALL=(ALL:ALL) ALL

%sudo භාවිතා කිරීම කණ්ඩායම්-අධාරිත අවසර කළමනාකරණය සක්‍රිය කරයි.

පරිශීලකයෙකුට sudo කණ්ඩායමට එකතු කිරීමට:

sudo usermod -aG sudo username

NOPASSWD විකල්පය සහ ආරක්ෂක සැලකිලි

සෑම වරක්ම මුරපදය ඇතුළත් කිරීම අසීරු නම්, NOPASSWD විකල්පය භාවිතා කර මුරපද සත්‍යාපනය මඟ හැරිය හැක.

alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

මෙය alice ට මුරපදයක් ඇතුළත් නොකර nginx නැවත ආරම්භ කිරීමට ඉඩ සලසයි.

කෙසේ වෙතත්, මෙය ආරක්ෂක අවදානම වැඩි කරයි, එබැවින් ඉදිරියට පමණක් විධාන සඳහා භාවිතය සීමා කිරීම අත්‍යවශ්‍ය වේ. NOPASSWD සමඟ ALL භාවිතය නිර්දේශ නොකෙරේ.

4. උසස් sudo භාවිතය

නියමිත පරිශීලකයකු ලෙස විධාන ක්‍රියාත්මක කිරීම

sudo සාමාන්‍යයෙන් විධාන root ලෙස ක්‍රියාත්මක කරන නමුත්, එය වෙනත් පරිශීලකයන් ලෙසද විධාන ක්‍රියාත්මක කළ හැක.

උදාහරණයක් ලෙස, www-data පරිශීලකයා ලෙස විධානයක් ක්‍රියාත්මක කිරීමට:

sudo -u www-data whoami

ප්‍රතිඵලය www-data වනු ඇත.

මෙය පරිශීලකයන් අතර අවසර සහ පරිසර වෙනස්කම් පරීක්ෂා කිරීම සඳහා ප්‍රයෝජනවත් වේ.

sudo සමඟ යළි-ලියන (Redirection) සහ පයිප් (Pipes) භාවිතය

ආරම්භකයන්ට සාමාන්‍යයෙන් ගැටළුවක් වනුයේ sudo සමඟ යළි-ලියන (>) හෝ පයිප් (|) එකතු කිරීමයි.

පහත විධානය නිවැරදි පෙනේ නමුත් අපේක්ෂිත ලෙස ක්‍රියා නොකරයි:

.

sudo echo "test" > /etc/test.conf

echo sudo සමඟ ක්‍රියාත්මක වුවද, ප්‍රතිදර්ශනය (redirection) සාමාන්‍ය පරිශීලකයෙකු ලෙස shell විසින් සැකසෙයි.

නිවැරදි ක්‍රමය වන්නේ tee භාවිත කිරීමයි:

echo "test" | sudo tee /etc/test.conf

ස්ක්‍රිප්ට්‌වල sudo භාවිතය

ස්ක්‍රිප්ට්‌වලට පරිපාලන අවසර අවශ්‍ය වන විට, අවශ්‍ය කමාන්ඩ් වලට පමණක් sudo එකතු කරන්න.

උදාහරණය (install.sh):

#!/bin/bash

echo "Installing package..."
sudo apt install -y nginx

තවත් සාමාන්‍ය රටාවක් වන්නේ ස්ක්‍රිප්ට් එක root ලෙස ධාවනය වෙයිදැයි පරීක්ෂා කිරීමයි:

if [ "$EUID" -ne 0 ]; then
  echo "This script must be run as root"
  exit 1
fi

ප්‍රයෝජනවත් sudo කෙටි මාර්ග

  • sudo !! පෙර කමාන්ඩ් එක sudo සමඟ නැවත ක්‍රියාත්මක කරයි.
    apt update
    sudo !!
    
  • sudo -k cached sudo අක්තපත්‍ර මකා දමයි.
  • sudo -v වත්මන් sudo සැසිය දිගු කරයි.

5. ආරක්ෂාව සහ හොඳ පුරුදු

අවම අවසර නීතිය අනුගමනය කරන්න

sudo භාවිතයේ ප්‍රධාන අරමුණ වන්නේ අවශ්‍ය අවම අවසර සමඟ පද්ධතිය ක්‍රියාත්මක කිරීමයි.

  • sudo හරහා විශේෂිත කමාන්ඩ් පමණක් ඉඩ දෙන්න
  • NOPASSWD භාවිතය සීමා කරන්න
  • කණ්ඩායම් හරහා පරිපාලකයන් කළමනාකරණය කරන්න

ලොග් කිරීම සහ පරීක්ෂණ

sudo ක්‍රියාත්මක කරන සියලු කමාන්ඩ් ලොග් කරයි.

  • /var/log/auth.log (Ubuntu/Debian)
  • journalctl (systemd-අධාරිත පද්ධති)
    grep 'sudo' /var/log/auth.log
    
    journalctl _COMM=sudo
    

වාස්තුක sudo දුර්වලතාව (CVE-2021-3156)

sudo ඉතා විශ්වාසනීය වුවද, අතීතයේ ගැඹුරු දුර්වලතා හඳුනාගෙන ඇත.

ප්‍රසිද්ධ උදාහරණයක් වන්නේ CVE-2021-3156 (Baron Samedit), එය විශේෂිත තත්ත්වයන් යටතේ දේශීය පරිශීලකයන්ට root අවසර ලබා දුන්නා.

  • sudo නවතම තත්ත්වයට තබා ගන්න
  • ආරක්ෂා උපදෙස් නිරීක්ෂණය කරන්න

sudo විකල්පය: doas

ආරක්ෂා-කේන්ද්‍රිත පරිසරบางක් doas භාවිතා කරයි, එය sudo සඳහා සරල විකල්පයක් වේ.

doas apt update

වින්‍යාස උදාහරණය:

permit nopass :wheel

6. පොදු දෝෂ සහ ගැටළු විසඳුම්

පරිශීලකයා sudoers ගොනුවේ නොමැත

username is not in the sudoers file. This incident will be reported.

මෙය පරිශීලකයාට sudo අවසර නොමැති බවයි.

sudo usermod -aG sudo username

ප්‍රතිදර්ශනය සමඟ අවසර ප්‍රතික්ෂේපය

echo "test" | sudo tee /etc/test.conf

දෝෂ සහිත sudoers ගොනුව

pkexec visudo

sudo: කමාන්ඩ් සොයාගත නොහැක

apt update
apt install sudo

7. නිතර අසන ප්‍රශ්න (FAQ)

ප්‍ර.1. sudo සහ su අතර වෙනස කුමක්ද?

ප.: sudo තනි තනි කමාන්ඩ් උසස් කරයි, su පරිශීලකයන් සම්පූර්ණයෙන්ම මාරු කරයි.

ප්‍ර.2. sudo සඳහා root මුරපදය අවශ්‍යද?

ප.: නැත. ඔබගේ පරිශීලක මුරපදය ඇතුළත් කරයි.

ප්‍ර.3. sudo ලොග් ගොනු කොහේ සුරැකේද?

  • /var/log/auth.log
  • /var/log/secure
  • journalctl _COMM=sudo

ප්‍ර.4. මම sudoers ගොනුව බිඳ දැමුවා. මට මොකද කළ යුතුද?

ප්‍රතිසාධන මාදිලිය (recovery mode) භාවිතා කරන්න හෝ pkexec visudo ක්‍රියාත්මක කරන්න.

ප්‍ර.5. sudo නොමැතිව root අවසර ලබා ගත හැදුවද?

ඔව්, නමුත් එය නිර්දේශ නොකෙරේ.

ප්‍ර.6. sudo සමඟ GUI යෙදුම් ධාවනය කිරීම ආරක්ෂිතද?

නැත. ඒ වෙනුවට pkexec භාවිතා කරන්න.

8. සාරාංශය

sudo නිවැරදිව අවබෝධ කරගන්න

sudo යනු අත්‍යවශ්‍ය ප්‍රවේශ පාලන යන්ත්‍රයක් වන අතර, පමණක් පහසුකම් කමාන්ඩ් එකක් නොවේ.

නිසි භාවිතය ගැටළු වැළැක්වයි

  • අවම අවසර භාවිතා කරන්න
  • visudo සමඟ සංස්කරණය කරන්න
  • ලොග් පරීක්ෂා කරන්න

නිවැරදි මෙහෙයුම් ශෛලිය තෝරන්න

ඔබගේ ආරක්ෂා ප්‍රතිපත්තිය අනුව sudo හෝ doas වැනි මෙවලම් තෝරන්න.

අවසාන සටහන

sudo අවබෝධය Linux පද්ධති පරිපාලනයේ පළමු පියවරක් වේ.