SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-09-08

Ubuntu 26.04-ல் sudo-rs மாற்றங்கள்: sudoers விதிகள்

Ubuntu 26.04-ல் sudo-rs இயல்பாகிறது. இதில் wildcard வாதங்கள் செயல்படாது. உங்கள் sudoers கோப்பில் உள்ள glob வடிவங்களை எவ்வாறு மாற்றி எழுத வேண்டும் என்பதை இதில் அறியலாம்.

Ubuntu-வில் sudo-rs கொண்டுவரும் மாற்றங்கள்

Ubuntu 26.04 LTS இயல்பான sudo-வாக sudo-rs-ஐ வழங்குகிறது. எனவே, புதிய server-ல் sudo கட்டளையை இயக்கும்போது, அது பழைய C நிரலுக்குப் பதிலாக Rust மொழியில் மறுவடிவமைக்கப்பட்ட நிரலையே இயக்குகிறது. பெரும்பாலான sudoers கோப்புகள் எந்த மாற்றமும் இன்றி தொடர்ந்து செயல்படும். ஆனால், கட்டளையின் வாதங்களுக்குள் (arguments) வைல்டு கார்டு (wildcard) பயன்படுத்தும் விதிகள் மட்டும் வேலை செய்யாது. ஏனெனில், sudo-rs வாதங்களில் உள்ள glob வடிவங்களை ஒப்பிட்டுப் பார்ப்பதில்லை.

Ubuntu 25.10 பதிப்பில் இந்த மாற்றம் முதலில் அறிமுகப்படுத்தப்பட்டது, 26.04 LTS பதிப்பிலும் அது தொடர்கிறது. Ubuntu 24.04 LTS பதிப்பில் இந்த மாற்றம் இல்லை; நீங்கள் கைமுறையாக sudo-rs-ஐ நிறுவினால் ஒழிய, அது பழைய sudo-வையே பயன்படுத்தும். நீங்கள் Ubuntu 24.04-லிருந்து 26.04-க்கு மேம்படுத்தும் போதோ அல்லது புதிய பதிப்பில் ஒரு server-ஐ உருவாக்கும் போதோ இந்த மாற்றம் முக்கியத்துவம் பெறுகிறது. நீங்கள் இடைக்காலப் பதிப்புகளை (interim releases) பயன்படுத்துபவர் என்றால், LTS மற்றும் இடைக்கால Ubuntu பதிப்புகள் server-ல் எவ்வாறு வேறுபடுகின்றன என்ற கட்டுரை, எந்த இயந்திரத்தில் இத்தகைய மாற்றங்கள் முதலில் அமலுக்கு வரும் என்பதை விளக்குகிறது.

உங்கள் server-ல் உண்மையில் இயங்கும் sudo-வைச் சரிபார்த்தல்

வெளியீட்டு எண்ணை (release number) வைத்து இதை முடிவு செய்ய வேண்டாம். கணினியிடமே கேட்டுத் தெரிந்துகொள்ளுங்கள்.

sudo --version
update-alternatives --config sudo
dpkg -l 'sudo*'

இணையத்தில் உள்ள எந்தவொரு பதிப்பு அட்டவணையை விடவும், உங்கள் கணினியில் உள்ள sudo --version-ஐ நம்புங்கள். update-alternatives --config sudo என்பது பதிலின் மற்றொரு பாதியாகும்: இது /usr/bin/sudo-ன் அனைத்து நிறுவப்பட்ட வழங்குநர்களையும் பட்டியலிட்டு, தேர்ந்தெடுக்கப்பட்டதை அடையாளப்படுத்துகிறது. ஒரு தொகுப்பு (package) நிறுவப்பட்டிருப்பது, அது தேர்ந்தெடுக்கப்பட்டதாகக் கருதப்படாது. எனவே, தொகுப்புப் பட்டியலைப் பார்க்காமல், எதைத் தேர்ந்தெடுத்துள்ளது என்பதைப் படியுங்கள்.

இந்த மாற்றத்தின் போது இரண்டு செயல்பாடுகளும் தொகுக்கப்படுகின்றன. Rust பதிப்பு sudo-rs ஆகும், இது ஆகஸ்ட் 2026 நிலவரப்படி 26.04-ல் 0.2.13 பதிப்பில் உள்ளது. Todd C. Miller-ஆல் பராமரிக்கப்படும் அசல் பதிப்பு இன்னும் sudo தொகுப்பாகவே உள்ளது; இதில் மாறியது என்னவென்றால், அதன் நிரல்கள் .ws பின்னொட்டைக் (suffix) கொண்டுள்ளன. இதனால் இரண்டையும் ஒரே நேரத்தில் நிறுவ முடியும்: /usr/bin/sudo.ws மற்றும் /usr/bin/visudo.ws, அவற்றுடன் cvtsudoers.ws மற்றும் sudoreplay.ws. செப்டம்பர் 2026-ல் 26.04 காப்பகத்துடன் சரிபார்க்கப்பட்டது: dpkg -L sudo பின்னொட்டுடன் கூடிய binaries-ஐப் பட்டியலிடுகிறது, மேலும் sudo-rs அவற்றுக்கு அருகில் /usr/bin/sudo-rs-ஐ வழங்குகிறது.

Ubuntu ஏன் sudo-rs-க்கு மாறியது

sudo என்பது setuid root உரிமையுடன் இயங்குகிறது. கணினியில் உள்ள எந்தவொரு பயனரும் இதைத் தொடங்க முடியும், இது முழுமையான அதிகாரங்களுடன் இயங்குவதால், இதனுள் இருக்கும் ஒரு memory bug உள்ளூர் root exploit-ஆக மாறக்கூடும். CVE-2021-3156 என்பது சரியாக இத்தகைய ஒரு குறைபாடுதான்: இது எந்தவொரு உள்ளூர் பயனரும் அணுகக்கூடிய heap buffer overflow ஆகும், மேலும் இது சுமார் பத்து ஆண்டுகளாக வெளியிடப்பட்ட code-ல் கண்டறியப்படாமல் இருந்தது. Rust இத்தகைய பிழைகளை compile செய்யும்போதே தடுத்துவிடுகிறது, இதுவே இந்த rewrite-க்கான முழுமையான காரணமாகும்.

இரண்டாவது காரணம் அதன் வரம்பு (scope), இது உங்கள் configuration-ஐயும் பாதிக்கிறது. அசல் sudo மூன்று தசாப்தங்களாகப் பல அம்சங்களைக் கொண்டுள்ளது, மேலும் ஒவ்வொரு அம்சமும் root-ஆக இயங்கும் கூடுதல் code-ஐ உள்ளடக்கியது. sudo-rs திட்டமிட்டே ஒரு குறிப்பிட்ட subset-ஐ மட்டுமே செயல்படுத்துகிறது. அதன் ஆசிரியர்கள் அரிதானவை அல்லது தீங்கு விளைவிக்கக்கூடியவை எனக் கருதிய எதையும் அவர்கள் தவிர்த்துவிட்டனர், எனவே பல ஆண்டுகளாகச் சரியாகச் செயல்பட்ட ஒரு sudoers அமைப்பு இதில் இல்லாமல் போகலாம். உங்கள் wildcard rule அத்தகையவற்றில் ஒன்று.

Memory safety ஒரு வகை பிழையை நீக்குகிறது. இது ஒரு நிரலை முழுமையாகப் பிழையற்றதாக மாற்றிவிடாது, மேலும் sudo-rs இயல்பான தேர்வாக மாறியதிலிருந்து அதற்கும் பாதுகாப்புத் திருத்தங்கள் (security fixes) வெளியிடப்பட்டுள்ளன. மற்ற மென்பொருட்களைப் போலவே இதையும் patch செய்யவும்.

எந்த sudoers விதிகள் இன்னும் செயல்படுகின்றன

கோப்பு அதே கோப்புதான். sudo-rs ஆனது /etc/sudoers மற்றும் /etc/sudoers.d/-ல் உள்ள drop-in கோப்புகளை வாசிக்கிறது. ஒரு server நிர்வாகி எழுதும் சாதாரண விதிகள் ஆதரிக்கப்படுகின்றன:

  • deploy ALL=(ALL:ALL) ALL, மற்றும் %sudo ALL=(ALL:ALL) ALL போன்ற குழு வடிவங்கள்
  • NOPASSWD: மற்றும் PASSWD: குறிச்சொற்கள் (tags)
  • User_Alias, Runas_Alias, Host_Alias மற்றும் Cmnd_Alias
  • துல்லியமான argument பட்டியலைக் கொண்ட கட்டளை, உதாரணமாக /usr/bin/systemctl restart app-api
  • ""-ஐத் தொடர்ந்து வரும் கட்டளை, இது எந்த argument-களும் இல்லாத கட்டளையை மட்டுமே அனுமதிக்கும்
  • அதன் இறுதி argument-ஆக *-ஐக் கொண்ட கட்டளை, இது அதற்குப் பின் வரும் எந்த argument-களையும் அனுமதிக்கும்
  • /-ல் முடியும் directory பாதை, இது அந்த directory-ல் உள்ள எந்தக் கட்டளையையும் அனுமதிக்கும்
  • ஒரு பட்டியலிலிருந்து கட்டளையைக் கழிக்க !
  • Defaults-ன் பயனுள்ள ஒரு பகுதி, இதில் secure_path, env_keep, env_check, timestamp_timeout, passwd_tries, editor, umask, targetpw, rootpw மற்றும் use_pty ஆகியவை அடங்கும்

இரண்டு defaults வித்தியாசமாகச் செயல்படுவதால் பயனர்கள் குழப்பமடையலாம். env_reset-ஐ sudo-rs-ல் அணைக்க முடியாது: அது எப்போதும் இயங்கியே இருக்கும். use_pty இயல்பாகவே இயக்கப்பட்டிருக்கும், எனவே கட்டளை அதன் சொந்த pseudo-terminal-ல் இயங்கும்.

உங்கள் wildcard sudoers விதி ஏன் பொருந்தாமல் போனது

கோப்பின் பெயரில் (file name) மட்டும் wildcard-களைப் பயன்படுத்த இன்னும் அனுமதிக்கப்படுகிறது. %ops ALL = /sbin/fsck* என்ற விதி sudo fsck மற்றும் sudo fsck_exfat ஆகியவற்றை இன்னும் அனுமதிக்கிறது, ஏனெனில் * என்பது கோப்பு முறைமையுடன் (filesystem) ஒப்பிடப்படும் பாதையின் ஒரு பகுதியாகும்.

Argument பட்டியலில், sudo-rs இரண்டு சிறப்பு வடிவங்களை மட்டுமே ஏற்கும், அவற்றில் எதுவுமே pattern கிடையாது. "" என்பது எந்த argument-களும் இல்லை என்று பொருள். இறுதியில் உள்ள * என்பது அதற்குப் பின் வரும் எந்தவொரு argument-களையும் குறிக்கும். மற்ற அனைத்து argument-களும் literal text-ஆகவே ஒப்பிடப்படும். எனவே %ops ALL = /sbin/service ntp * சரியாகச் செயல்படும், ஏனெனில் ntp என்பது literal மற்றும் * இறுதியில் உள்ளது. இருப்பினும், இது போன்ற ஒரு விதி நீங்கள் எதிர்பார்த்த எதையும் வழங்காது:

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart app-*

app-* என்பது ஒரு argument-ன் இடையில் உள்ள pattern ஆகும். sudo-rs இதை விரிவாக்காது (expand), எனவே இந்த விதி systemctl restart app-api-ஐ உள்ளடக்காது மற்றும் sudo அந்த command-ஐ நிராகரிக்கும். உங்கள் server-ல் உள்ள எந்தவொரு விதியைப் பற்றியும் இரண்டு command-கள் உண்மையைச் சொல்லும்: root பயனராக இயக்கப்படும் sudo -l -U deploy, அந்த கணக்கு உண்மையில் எதை இயக்க முடியும் என்பதைக் காட்டும், மேலும் sudo visudo -c அந்த கோப்பு சரியாகப் பகுப்பாய்வு (parse) செய்யப்படுகிறதா என்பதைத் தெரிவிக்கும். எதேச்சையாக மாற்றங்களைச் செய்வதற்கு முன் இவற்றை இயக்கவும்.

Wildcard விதி எப்போதும் ஒரு ஓட்டையாகவே இருந்தது

அசல் sudo-வில், நீங்கள் தட்டச்சு செய்யும் arguments அனைத்தும் ஒரே string-ஆக இணைக்கப்பட்டு, விதியின் argument string-உடன் glob மூலம் ஒப்பிடப்படும். ஒரு glob, whitespace-ஐயும் உள்ளடக்கும். இதுவே பெரும்பாலானோர் கவனிக்கத் தவறும் பகுதி.

sudo-rs ஆவணங்கள் இதற்குத் தெளிவான விளக்கத்தை அளிக்கின்றன. /bin/rm *.txt என்ற விதி sudo rm -rf /home .txt-ஐயும் அனுமதிக்கும், ஏனெனில் அந்த ஒரு *, -rf /home -ஐ விழுங்கிவிடும் மற்றும் இணைக்கப்பட்ட string இறுதியில் .txt-ல் முடியும். இந்த விதி "text கோப்புகள் மட்டுமே" என்று வாசிக்கப்படுகிறது. ஆனால், இது "வரி இறுதியில் .txt இருந்தால், எந்த argument-ஆகவும் இருக்கலாம்" என்று பொருள்படும்.

இது systemctl உதாரணத்திற்கும் பொருந்தும். arguments அனைத்தும் ஒரே இணைக்கப்பட்ட string-ஆக ஒப்பிடப்படுவதால், இறுதியில் உள்ள pattern, நீங்கள் அதற்குப் பின்னால் சேர்ப்பவற்றையும் பொருத்திவிடும். எனவே, restart app-* என்பது restart app-api மற்றும் அழைப்பவர் சேர்க்கும் கூடுதல் arguments அனைத்தையும் உள்ளடக்கும். ஒரு argument-க்குள் இருக்கும் pattern, அதைச் சுற்றியுள்ள arguments-ஐ வெளிப்படுத்திவிடும்; ஒரு command-ன் அதிகாரம் அதன் arguments-ல் தான் உள்ளது. sudo-rs இந்த அமைப்பை பாதுகாப்பானதாக மாற்ற முயற்சிப்பதற்குப் பதிலாக, அதை நிராகரிக்கிறது; ஏனெனில் இதற்குப் பாதுகாப்பான பொதுவான வடிவம் எதுவும் இல்லை.

Wildcard-க்கு பதிலாக தெளிவான கட்டளைப் பட்டியலைப் பயன்படுத்துதல்

பெரும்பாலான wildcard விதிகள், நான்கு வரிகளைத் தட்டச்சு செய்ய விரும்பாத காரணத்தாலேயே உருவாக்கப்படுகின்றன. அந்த நான்கு வரிகளையும் தட்டச்சு செய்யுங்கள்.

Cmnd_Alias APP_RESTART = /usr/bin/systemctl restart app-api, /usr/bin/systemctl restart app-worker
Cmnd_Alias APP_STATUS = /usr/bin/systemctl status app-api, /usr/bin/systemctl status app-worker
deploy ALL=(root) NOPASSWD: APP_RESTART, APP_STATUS

கோப்புப் பாதையை (path) சரியாகக் குறிப்பிடவும். /usr/bin/systemctl என்ற இடத்தில் binary இருக்கும்போது, /bin/systemctl என்று பெயரிடப்பட்ட விதி ஒருபோதும் பொருந்தாது. இது ஏற்படும் தோல்வி, அனுமதி (permissions) தொடர்பான சிக்கலைப் போலவே தோன்றும். command -v systemctl கட்டளையைப் பயன்படுத்தி இதை உறுதிசெய்து, அது வெளியிடும் தகவலை நகலெடுத்துப் பார்க்கவும்.

விதியை /etc/sudoers கோப்பில் வைப்பதற்குப் பதிலாக, அதற்கெனத் தனிப்பட்ட drop-in கோப்பில் வைக்கவும். அப்போதுதான், package upgrade செய்யும்போது உங்கள் மாற்றங்களுடன் எந்த முரண்பாடும் ஏற்படாது:

sudo visudo -f /etc/sudoers.d/90-deploy
sudo visudo -c
sudo -l -U deploy

கோப்பின் பெயரில் புள்ளி (dot) இருக்கக்கூடாது, இறுதியில் tilde (~) குறியீடும் இருக்கக்கூடாது. sudoers.d கோப்பகத்தில் உள்ள கோப்புப் பெயர்களில் புள்ளி இருந்தால், அசல் sudo அதைத் தவிர்க்கும். எனவே, 90-deploy.conf என்பது எந்தச் செயல்பாடும் செய்யாமல் அமைதியாகத் தோல்வியடையும். இந்த மரபைப் பின்பற்றுவதில் எந்தச் சிரமமும் இல்லை.

பட்டியல் நீளமாக இருக்கும்போது root-க்கு சொந்தமான wrapper-ஐப் பயன்படுத்தவும்

அனுமதிக்கப்பட்ட கட்டளைகளின் பட்டியல் மிக நீளமாக இருந்தால், அந்த முடிவெடுக்கும் பணியை sudoers கோப்பிலிருந்து நீக்கிவிட்டு, root-க்கு சொந்தமான ஒரு சிறிய நிரலுக்கு மாற்றவும்.

sudo tee /usr/local/sbin/app-restart >/dev/null <<'EOF'
#!/bin/sh
set -eu
case "${1:-}" in
  app-api|app-worker) ;;
  *) echo "app-restart: not allowed: ${1:-}" >&2; exit 1 ;;
esac
exec /usr/bin/systemctl restart "$1"
EOF
sudo chown root:root /usr/local/sbin/app-restart
sudo chmod 0755 /usr/local/sbin/app-restart
ls -l /usr/local/sbin/app-restart

இப்போது sudoers கோப்பில் ஒரே ஒரு கட்டளையை மட்டும் குறிப்பிட வேண்டும்:

deploy ALL=(root) NOPASSWD: /usr/local/sbin/app-restart *

இறுதியில் உள்ள * இங்கே ஏற்றுக்கொள்ளத்தக்கது, ஏனெனில் sudo அல்ல, அந்த script-தான் எதை அனுமதிக்க வேண்டும் என்று தீர்மானிக்கிறது. இந்த பாதுகாப்பு, அந்த script root-க்கு சொந்தமாகவும், மற்றவர்கள் யாரும் எழுத முடியாதவாறும் இருக்கும் வரை மட்டுமே செல்லுபடியாகும். ஒருவேளை deploy அந்த கோப்பில் மாற்றங்களைச் செய்ய முடிந்தால், deploy அதன் உள்ளடக்கத்தை மாற்றி எதை வேண்டுமானாலும் root உரிமையுடன் இயக்க முடியும்; இது நீங்கள் நீக்கிய wildcard விதியை விட மோசமானது. ls -l கட்டளையைப் பயன்படுத்தி கோப்பின் அனுமதியைச் சரிபார்க்கவும். அதன் வெளியீடு உங்களுக்குப் புரியவில்லை என்றால், drwxr-xr-x அனுமதி சரத்தைப் படிப்பது எப்படி என்பதைத் தெரிந்துகொள்ள ஐந்து நிமிடங்கள் போதும். இதே விதி அந்த directory-க்கும் பொருந்தும்: /usr/local/sbin directory-யிலும் அந்த account-க்கு எழுதும் உரிமை இருக்கக்கூடாது, ஏனெனில் directory-யில் எழுதும் உரிமை இருந்தால், அந்த கோப்பையே முழுமையாக மாற்றியமைக்க முடியும்.

sudo விதிக்கு பதிலாக அந்தப் பணிக்கு எனத் தனி கணக்கை உருவாக்குதல்

அந்தக் கட்டளைக்கு ஏன் root அதிகாரம் தேவைப்படுகிறது என்பதே முக்கியமான கேள்வி. ஒரு service அதன் சொந்த பயனர் கணக்கில் இயங்கினால், அதை அந்தப் பயனரே நிர்வகிக்க முடியும்; இதற்கு sudoers கோப்பில் எந்த மாற்றமும் செய்யத் தேவையில்லை. System units-ஐப் பொறுத்தவரை, systemd ஏற்கனவே அந்த முடிவை polkit-க்கு வழங்குகிறது. எனவே, ஒரு விதியின் மூலம் ஒரு குறிப்பிட்ட unit-ஐயும், ஒரு குறிப்பிட்ட பயனரையும் இணைக்க முடியும்:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "app-api.service" &&
        subject.user == "deploy") {
        return polkit.Result.YES;
    }
});

இதை /etc/polkit-1/rules.d/50-app-api.rules எனச் சேமிக்கவும். இப்போது deploy எந்தவிதமான sudo அனுமதியும் இன்றி systemctl restart app-api-ஐ இயக்க முடியும். இதை எந்தச் சூழலில் பயன்படுத்தப் போகிறீர்களோ, அதே சூழலில் இருந்து சோதிக்கவும். உங்கள் SSH அமர்வில் வேலை செய்யும் ஒரு விதி, cron-ல் வேலை செய்கிறதா என்பதை உறுதிப்படுத்துவது அவசியம். எப்படியிருப்பினும், ஒரு குறிப்பிட்ட பணிக்காக உருவாக்கப்படும் கணக்கு அந்தப் பணிக்கு மட்டுமே பயன்படுத்தப்பட வேண்டும். இதுவே VPS-ல் குறைந்தபட்ச அதிகாரங்களைக் கொண்ட பயனர் கணக்குகள் என்பதன் அடிப்படை தத்துவமாகும்.

sudo-rs-ல் விடுபட்ட பிற அம்சங்கள்

sudo -E செயல்படுத்தப்படவில்லை. அதற்குப் பதிலாக Defaults env_keep += "HTTP_PROXY HTTPS_PROXY NO_PROXY" மூலம் தேவையான மாறிகளை (variables) குறிப்பிடவும். மேலும், env_reset எப்போதும் செயல்பாட்டில் இருக்கும் என்பதை நினைவில் கொள்க; எனவே, சேமிக்கப்படாத அனைத்தும் நீக்கப்படும்.

LDAP-ல் மையப்படுத்தப்பட்ட sudoers சேமிப்பு நீக்கப்பட்டுள்ளது. sudoers.ldap மற்றும் cvtsudoers ஆகியவை செயல்படுத்தப்படவில்லை, மேலும் sudo-ldap தொகுப்பு 26.04 பதிப்பில் நீக்கப்பட்டுவிட்டது. PAM அல்லது SSSD வழியாக LDAP அங்கீகாரம் தொடர்ந்து செயல்படும். கொள்கைகளை ஒரு கோப்பகத்தில் (directory) நிர்வகிக்கும் அம்சம் மட்டுமே இதில் இல்லை.

அனுமதிக்கப்பட்ட கட்டளையிலிருந்து shell escape-களைத் தடுக்க முயன்ற INTERCEPT செயல்படுத்தப்படவில்லை. அது உறுதியான பயனர்களைத் தடுப்பதில் எப்போதும் தோல்வியையே தந்தது. ஒரு விதி, பயனரை root-ஆக editor அல்லது interpreter-ஐ இயக்க அனுமதித்தால், அவர்களுக்கு root அதிகாரம் கிடைத்துவிடும்; எந்தவொரு sudo விருப்பமும் இதை மாற்றாது.

Session recording செயல்படுத்தப்படவில்லை, எனவே I/O log மற்றும் sudoreplay வசதி இல்லை. பதிவுகள் (logs) syslog-க்கு மட்டுமே செல்லும். பதிவுகளை வேறு இடத்திற்கு மாற்றும் logfile விருப்பம் இல்லாததால், sudo செய்திகள் உங்கள் கணினியின் தற்போதைய syslog சேருமிடத்திற்கே செல்லும்.

நீங்கள் மீண்டும் sudo.ws-க்கு மாற வேண்டுமா?

நீங்கள் மாறலாம், மேலும் 26.04 சுழற்சியின் போது, இந்த காரணத்திற்காகவே அசல் பதிப்பு தொகுக்கப்பட்டு (packaged) கிடைக்கிறது.

sudo apt install sudo
update-alternatives --config sudo
sudo update-alternatives --set sudo /usr/bin/sudo.ws

இந்த பக்கத்திலிருந்து நகலெடுப்பதற்குப் பதிலாக, --config வெளியீட்டிலிருந்து சரியான பாதைகளை (paths) நகலெடுக்கவும், ஏனெனில் உங்கள் கணினி ஏற்றுக்கொள்ளும் பட்டியல் அதுவேயாகும். பிற்காலத்தில் மீண்டும் sudo-rs-க்கு மாறுவது என்பது, அதே பட்டியலிலிருந்து sudo-rs binary பாதைக்கு மாற்றுகளை (alternatives) அமைப்பதாகும்.

sudo-வை பாதிக்கும் எதையும் செய்வதற்கு முன்பு, இரண்டாவது SSH session-ஐத் திறந்து, லாக்-இன் செய்து, சும்மா வைத்திருக்கவும். sudoers கோப்பு சரியாகப் பகுப்பாய்வு (parse) செய்யப்படாவிட்டாலோ அல்லது நிறுவப்படாத ஒரு binary-ஐ மாற்றாகக் குறிப்பிட்டாலோ, remote box-ல் root பயனராக மாற வழியில்லாமல் போகலாம். இந்த பழக்கம், புதிய VPS-ல் முதல் பத்து நிமிடங்கள் செய்யும் மற்ற அனைத்து வேலைகளுடனும் இருக்க வேண்டும்.

மீண்டும் மாறுவதை ஒரு தீர்வாகக் கருதாமல், ஒரு காலக்கெடுவாகக் கருதுங்கள். இது விதிகளைச் சரியாக மீண்டும் எழுதுவதற்கு உங்களுக்கு ஒரு வாரம் அவகாசம் அளிக்கிறது. இந்த மறுஎழுத்து அவசியமானது, ஏனெனில் நீங்கள் நீக்கும் ஒவ்வொரு wildcard விதியும், அதன் ஆசிரியர் நினைத்ததை விட அதிக அதிகாரத்தை வழங்கிக்கொண்டிருந்தது.

FAQ

Ubuntu 26.04-ல் எனது sudoers wildcard விதி ஏன் வேலை செய்யவில்லை?

Ubuntu 26.04 LTS இயல்பான sudo-வாக sudo-rs-ஐத் தேர்ந்தெடுப்பதே இதற்குக் காரணம். ஒரு கட்டளையின் வாதங்களுக்குள் (arguments) இருக்கும் wildcard வடிவங்களை sudo-rs பொருத்திப் பார்ப்பதில்லை. இது கட்டளையின் கோப்புப் பெயரில் wildcard-ஐ அனுமதிக்கிறது; "" என்பது வாதங்கள் ஏதுமில்லை என்பதையும், * என்பது இறுதி வாதம் என்பதையும் குறிக்கும். /usr/bin/systemctl restart app-* போன்ற ஒரு விதி, வாதத்தின் நடுவில் ஒரு வடிவத்தை வைப்பதால், அது எதையும் வழங்காது; எனவே கட்டளை மறுக்கப்படும். ஒரு கணக்கிற்கு உண்மையில் என்னென்ன அனுமதிகள் உள்ளன என்பதைப் பார்க்க root-ஆக sudo -l -U deploy கட்டளையை இயக்கவும். பின்னர், அந்த விதியைத் துல்லியமான கட்டளைகளாகவோ அல்லது root-க்குச் சொந்தமான wrapper script-ஆகவோ மாற்றவும்.

Ubuntu 26.04-ல் பழைய sudo-விற்கு எப்படித் திரும்புவது?

அசல் sudo, sudo தொகுப்பில் கிடைக்கிறது. அதன் binaries .ws என்ற suffix-ஐக் கொண்டிருக்கும். அதை sudo apt install sudo மூலம் நிறுவி, sudo update-alternatives --set sudo /usr/bin/sudo.ws மூலம் அதற்கான alternative-ஐ அமைக்கவும். உங்கள் கணினியில் உள்ள துல்லியமான பாதைகளைப் பார்க்க முதலில் update-alternatives --config sudo-ஐ இயக்கவும். மாற்றங்களைச் செய்யும்போது இரண்டாவது SSH session-ஐத் திறந்து வைத்திருக்கவும். நீங்கள் எந்த implementation-ஐத் தேர்ந்தெடுத்தாலும், 26.04-ல் இருந்து நீக்கப்பட்ட sudo-ldap மீண்டும் வராது.

sudo-rs அதே /etc/sudoers கோப்பைத்தான் படிக்கிறதா?

ஆம். sudo-rs, /etc/sudoers கோப்பையும் /etc/sudoers.d/-ன் கீழ் உள்ள drop-in கோப்புகளையும் படிக்கிறது. பயனர்கள், குழுக்கள், aliases, run-as விவரக்குறிப்புகள் மற்றும் NOPASSWD tag ஆகியவற்றிற்கு அதே syntax-ஐப் பயன்படுத்துகிறது. இது sudoers மொழியின் ஒரு பகுதியை மட்டுமே செயல்படுத்துகிறது; எனவே, இதில் உள்ள வேறுபாடுகள், வித்தியாசமாகச் செயல்படும் கட்டமைப்புகளாக இல்லாமல், விடுபட்ட கட்டமைப்புகளாகவே இருக்கும். sudo visudo மூலம் திருத்தவும், உங்கள் session-ஐ முடிக்கும் முன் sudo visudo -c மூலம் சரிபார்க்கவும்.

sudo-rs-ல் sudo -E-க்கு மாற்றாக எது உள்ளது?

sudo -E இதில் செயல்படுத்தப்படவில்லை. அசல் sudo-விலேயே இது தவிர்க்கப்பட வேண்டிய ஒன்றாக இருந்தது. ஏனெனில், ஒரு root process-க்கு, அழைப்பவர் கட்டுப்படுத்தும் சூழலை (environment) வழங்குவது, அந்த process-ன் செயல்பாட்டை மாற்றும் ஒரு அறியப்பட்ட வழியாகும். அதற்குப் பதிலாக, Defaults env_keep += "HTTP_PROXY HTTPS_PROXY NO_PROXY" போன்ற வரியைப் பயன்படுத்தி, உங்களுக்குத் தேவையான variables-ஐ sudoers-ல் குறிப்பிடவும். env_reset என்பது sudo-rs-ல் எப்போதும் செயல்பாட்டில் இருக்கும்; அதை முடக்க முடியாது. எனவே, நீங்கள் தக்கவைக்காத ஒவ்வொரு variable-ம் நீக்கப்படும்.

#sudo#sudo-rs#ubuntu#sudoers#permissions