SSD Nodes Learn Hosting plans →
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-09-08

Ubuntu 26.04లో sudo-rs కోసం sudoers మార్పులు

Ubuntu 26.04లో sudo-rs డిఫాల్ట్ sudo అవుతుంది. sudoersలో wildcard argument rules ఎందుకు ఇక match కావో, వాటి బదులు ఏమి రాయాలో తెలుసుకోండి.

Ubuntuలో sudo-rs వల్ల మార్పులు

Ubuntu 26.04 LTSలో sudo-rs డిఫాల్ట్ sudoగా అందించబడుతుంది. అందువల్ల కొత్త serverలో sudo command ను నడిపితే అసలు C program బదులుగా Rust reimplementation అమలవుతుంది. చాలా sudoers files మునుపటిలాగే పనిచేస్తాయి. ఒక command argumentsలో wildcard ఉన్న rule మాత్రమే విఫలమవుతుంది. కారణం, sudo-rs argument textపై glob patternsను match చేయదు.

Ubuntu 25.10లో ఈ మార్పు మొదట అమలైంది. Ubuntu 26.04 LTSలో కూడా ఇది కొనసాగింది. Ubuntu 24.04 LTSపై ఈ మార్పు ప్రభావం ఉండదు. ఎందుకంటే మీరు sudo-rsను స్వయంగా install చేయకపోతే అది ఇప్పటికీ అసలు sudoనే ఎంచుకుంటుంది. మీరు Ubuntu 24.04 నుంచి 26.04కు upgrade చేసినప్పుడు లేదా కొత్త releaseపై కొత్త serverను నిర్మించినప్పుడు ఈ విషయం ప్రాధాన్యం పొందుతుంది. మీరు interim releasesను కూడా నడుపుతుంటే, serverలో LTS మరియు interim Ubuntu releases ఎలా వేరుగా ఉంటాయి అనే వివరణ ద్వారా ఇలాంటి మార్పు మొదట ఏ machineపై అమలవుతుందో తెలుసుకోవచ్చు.

మీ server నిజంగా ఏ sudo నడుపుతోందో పరిశీలించండి

దీన్ని release number ఆధారంగా నిర్ణయించవద్దు. యంత్రాన్నే అడగండి.

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

Internetలోని ఏ version table కంటే, ఈ పేజీతో సహా, మీ స్వంత boxలోని sudo --version ఫలితాన్నే నమ్మండి. update-alternatives --config sudo సమాధానంలోని మరో భాగం: ఇది /usr/bin/sudo ను అందించే ఇన్‌స్టాల్ చేసిన అన్ని providers ను జాబితా చేసి, ఎంచుకున్నదాన్ని గుర్తిస్తుంది. ఒక package install అయి ఉండటం, అది ఎంచుకోబడిందని అర్థం కాదు. కాబట్టి package list కాకుండా selection ను చదవండి.

Transition సమయంలో రెండు implementations ను package చేస్తున్నారు. Rust implementation sudo-rs; August 2026 నాటికి 26.04లో దీని version 0.2.13. Todd C. Miller నిర్వహించే అసలు implementation ఇప్పటికీ sudo package గానే ఉంది. మారింది ఏమిటంటే, రెండు implementations ను ఒకేసారి install చేసుకునేలా దాని programs కు .ws suffix జోడించారు: /usr/bin/sudo.ws మరియు /usr/bin/visudo.ws, అలాగే cvtsudoers.ws మరియు sudoreplay.ws. September 2026లోని 26.04 archive ను పరిశీలించి నిర్ధారించాం: dpkg -L sudo suffix కలిగిన binaries ను జాబితా చేస్తుంది, మరియు sudo-rs వాటి పక్కన /usr/bin/sudo-rs ను ship చేస్తుంది.

Ubuntu ఎందుకు sudo-rs కు మారింది

sudo setuid root గా పనిచేస్తుంది. సిస్టమ్‌లోని ఏ user అయినా దీన్ని ప్రారంభించవచ్చు. ఇది పూర్తి privileges తో ప్రారంభమవుతుంది. అందువల్ల ఇందులోని memory bug స్థానిక root exploit కు దారితీయవచ్చు. CVE-2021-3156 ఇదే తరహా సమస్య. ఏ local user అయినా చేరుకోగల heap buffer overflow అందులో ఉంది. ఆ సమస్య సుమారు పది సంవత్సరాలు విడుదలైన code లోనే ఉండిపోయింది. Rust ఈ రకమైన bug లను compile time లోనే గుర్తిస్తుంది. Rewrite కు ప్రధాన కారణం ఇదే.

రెండవ కారణం scope. ఇది మీ config పై నేరుగా ప్రభావం చూపుతుంది. అసలు sudo మూడు దశాబ్దాల్లో పెద్ద feature set ను సేకరించింది. ప్రతి feature అంటే root గా నడిచే మరింత code. sudo-rs ఉద్దేశపూర్వకంగా వాటిలోని ఒక subset ను మాత్రమే అమలు చేస్తుంది. ఉపయోగం తక్కువగా ఉందని లేదా హానికరమని దాని authors భావించిన అంశాలను చేర్చలేదు. అందువల్ల సంవత్సరాలుగా పనిచేసిన sudoers construct పూర్తిగా లేకపోవచ్చు. మీ wildcard rule వాటిలో ఒకటి.

Memory safety ఒక రకమైన bug ను తొలగిస్తుంది. అయితే program లో ఎలాంటి bug ఉండదని అది నిర్ధారించదు. default గా మారిన తర్వాత sudo-rs కు కూడా స్వంత security fixes విడుదలయ్యాయి. ఇతర software మాదిరిగానే దీనికీ patches వర్తింపజేయాలి.

ఏ sudoers నియమాలు ఇంకా పనిచేస్తాయి

ఈ ఫైల్ అదే ఫైల్. sudo-rs /etc/sudoers మరియు /etc/sudoers.d/ లోని drop-in files ను చదువుతుంది. Server operator సాధారణంగా రాసే కింది అంశాలకు మద్దతు ఉంది:

  • deploy ALL=(ALL:ALL) ALL, అలాగే %sudo ALL=(ALL:ALL) ALL వంటి group forms
  • NOPASSWD: మరియు PASSWD: tags
  • User_Alias, Runas_Alias, Host_Alias మరియు Cmnd_Alias
  • ఖచ్చితమైన argument list తో command, ఉదాహరణకు /usr/bin/systemctl restart app-api
  • దాని తరువాత "" ఉన్న command; ఇది arguments లేకుండా మాత్రమే command ను అనుమతిస్తుంది
  • చివరి argument గా * ఉన్న command; ఇది చివరగా వచ్చే ఏ arguments నైనా అనుమతిస్తుంది
  • / తో ముగిసే directory path; ఇది ఆ directory లోని ఏ command నైనా అనుమతిస్తుంది
  • జాబితా నుంచి command ను తొలగించడానికి !
  • Defaults లో ఉపయోగకరమైన subset; ఇందులో secure_path, env_keep, env_check, timestamp_timeout, passwd_tries, editor, umask, targetpw, rootpw మరియు use_pty ఉన్నాయి

రెండు defaults భిన్నంగా పనిచేస్తాయి. ఇవి వినియోగదారులను తరచుగా గందరగోళానికి గురిచేస్తాయి. sudo-rs లో env_reset ను off చేయలేరు; ఇది ఎల్లప్పుడూ on లో ఉంటుంది. use_pty default గా on లో ఉంటుంది. అందువల్ల command తన స్వంత pseudo-terminal లో నడుస్తుంది.

మీ wildcard sudoers నియమం ఎందుకు ఇక సరిపోలడం లేదు

Wildcards ఇప్పటికీ ఒకే చోట అనుమతించబడతాయి: command యొక్క file name లో. %ops ALL = /sbin/fsck* నియమం ఇప్పటికీ sudo fsck మరియు sudo fsck_exfat ను అనుమతిస్తుంది, ఎందుకంటే * filesystem తో సరిపోల్చే path లో భాగం.

Argument list లో sudo-rs రెండు ప్రత్యేక రూపాలను మాత్రమే అంగీకరిస్తుంది. వాటిలో ఏదీ pattern కాదు. "" అంటే arguments లేవు అని అర్థం. చివరలో ఉన్న * అంటే చివర వచ్చే ఏ arguments అయినా అని అర్థం. మిగతా ప్రతి 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 ను cover చేయదు మరియు sudo ఆ command ను నిరాకరిస్తుంది. మీ స్వంత server లోని ఏ నియమం గురించి అయినా నిజమైన స్థితిని తెలియజేసే రెండు commands ఇవి: root గా run చేసే sudo -l -U deploy, ఆ account వాస్తవంగా ఏ commands run చేయవచ్చో చూపిస్తుంది. sudo visudo -c, file సరిగ్గా parse అవుతుందో లేదో చెబుతుంది. యాదృచ్ఛికంగా editing ప్రారంభించే ముందు వీటిని run చేయండి.

Wildcard నియమం మొదటి నుంచే ఒక భద్రతా లోపం

అసలు sudo లో మీరు టైప్ చేసే arguments ఒకే string గా కలిపి, rule లోని argument string తో glob ఉపయోగించి సరిపోల్చబడతాయి. Glob whitespace ను కూడా సరిపోల్చుతుంది. దాదాపు అందరూ గమనించని విషయం ఇదే.

sudo-rs documentation దీనిని అత్యంత స్పష్టంగా చూపిస్తుంది. /bin/rm *.txt అనే rule, sudo rm -rf /home .txt ను కూడా అనుమతిస్తుంది. ఎందుకంటే ఒక *, -rf /home ను పూర్తిగా గ్రహిస్తుంది. కలిపిన string చివరికి .txt తో ముగుస్తుంది. Rule అర్థం “text files మాత్రమే”. వాస్తవంగా దాని అర్థం “line చివర .txt తో ముగిస్తే, ఏ arguments అయినా అనుమతించు”.

systemctl ఉదాహరణకూ ఇదే వర్తిస్తుంది. Arguments ను ఒకే joined string గా సరిపోల్చడం వల్ల, చివర ఉన్న pattern దాని తర్వాత మీరు జోడించే ఏదైనా విషయాన్నీ సరిపోల్చుతుంది. అందువల్ల restart app-*, restart app-api తో పాటు caller జోడించే మరిన్ని arguments ను కూడా అనుమతిస్తుంది. ఒక argument లోని pattern, దాని చుట్టూ ఉన్న arguments ను కూడా అనియంత్రితంగా వదిలేస్తుంది. Command యొక్క అధికారం arguments లోనే ఉంటుంది. దాన్ని సురక్షితంగా మార్చడానికి ప్రయత్నించకుండా sudo-rs ఆ construct ను తిరస్కరిస్తుంది. ఎందుకంటే దానికి సాధారణంగా వర్తించే సురక్షిత రూపం లేదు.

Wildcard స్థానంలో స్పష్టమైన command జాబితాను ఉపయోగించండి

చాలా 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 ను సరిగ్గా ఇవ్వండి. Binary ఉన్న వ్యవస్థలో /usr/bin/systemctl ఉండగా, నియమంలో /bin/systemctl అని పేర్కొంటే అది ఎప్పటికీ సరిపోలదు. అప్పుడు కనిపించే వైఫల్యం permissions సమస్యలా ఉంటుంది. command -v systemctl తో నిర్ధారించి, అది చూపించే ఫలితాన్ని పేస్ట్ చేయండి.

నియమాన్ని /etc/sudoers లో పెట్టకుండా, దాని స్వంత drop-in file లో ఉంచండి. అప్పుడు package upgrade మీ మార్పుతో ఎప్పుడూ ఘర్షణ పడదు:

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

File పేరులో dot లేదా చివర trailing tilde ఉండకూడదు. Original sudo sudoers.d లో పేరులో dot ఉన్న files ను విస్మరిస్తుంది. అందువల్ల 90-deploy.conf సాధారణంగా ఎలాంటి సందేశం లేకుండా పనిచేయదు. ఈ naming convention పాటించడంలో ఎలాంటి అదనపు ఖర్చు లేదు.

జాబితా పెద్దదిగా ఉన్నప్పుడు 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 భాగంలో ఒకే command ను పేర్కొంటారు:

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

ఇక్కడ చివరలో ఉన్న * అనుమతించదగినదే, ఎందుకంటే ఏది అనుమతించాలో sudo కాకుండా script నిర్ణయిస్తుంది. అయితే script root యాజమాన్యంలో ఉండి, మరెవరూ దానికి రాయలేని పరిస్థితిలో మాత్రమే ఇది సురక్షితం. deploy file కు రాయగలిగితే, deploy దాని విషయాన్ని మార్చి root గా ఏదైనా అమలు చేయగలదు. మీరు తొలగించిన wildcard rule కంటే ఇది మరింత ప్రమాదకరం. ls -l తో mode ను పరిశీలించండి. output మీకు స్పష్టంగా లేకపోతే, drwxr-xr-x permission string ను చదవడం నేర్చుకోవడానికి ఐదు నిమిషాలు పడుతుంది. ఇదే నియమం directory కి కూడా వర్తిస్తుంది: /usr/local/sbin కు కూడా ఆ account రాయగలిగే అనుమతి ఉండకూడదు, ఎందుకంటే writable directory ఉంటే file ను పూర్తిగా మార్చి పెట్టవచ్చు.

sudo నియమానికి బదులుగా job కోసం ప్రత్యేక account ఉపయోగించండి

చాలాసార్లు ముందుగా అడగాల్సిన ప్రశ్న command కు అసలు root అవసరం ఎందుకు అన్నదే. ఒక service తన స్వంత user గా నడిస్తే, ఆ user ద్వారా దాన్ని నిర్వహించవచ్చు. అప్పుడు sudoers line అవసరం ఉండదు. system units కోసం systemd ఇప్పటికే ఈ నిర్ణయాన్ని polkit కు అప్పగిస్తుంది. అందువల్ల ఒక rule లో ఒక unit మరియు ఒక operator ను పేర్కొనవచ్చు:

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 గా save చేస్తే, deploy ఎటువంటి sudo లేకుండానే systemctl restart app-api ను run చేయగలదు. దీన్ని ఉపయోగించే ఖచ్చితమైన context నుంచే test చేయండి. మీ SSH session లో పనిచేసే rule పై ఆధారపడే ముందు, cron నుంచి కూడా అది పనిచేస్తుందని నిర్ధారించాలి. ఏ విధంగానైనా, పని చేసే account ఆ పని కోసమే ప్రత్యేకంగా ఉండాలి. VPS లో కనీస అనుమతులు కలిగిన user accounts ఉపయోగించాలనే కారణం కూడా ఇదే.

sudo-rs లో లేని ఇతర అంశాలు

sudo -E అమలు కాలేదు. అవసరమైన వేరియబుల్స్‌కు బదులుగా Defaults env_keep += "HTTP_PROXY HTTPS_PROXY NO_PROXY" ఉపయోగించండి. env_reset ఎల్లప్పుడూ సక్రియంగా ఉంటుందని గుర్తుంచుకోండి. అందువల్ల నిల్వ చేయని ఏదైనా సమాచారం తొలగించబడుతుంది.

LDAPలోని కేంద్రీకృత sudoers నిల్వ తొలగించబడింది. sudoers.ldap మరియు cvtsudoers అమలు కాలేదు. sudo-ldap package ను 26.04లో తొలగించారు. PAM లేదా SSSD ద్వారా LDAP authentication ఇప్పటికీ పనిచేస్తుంది. పరిధికి వెలుపల ఉన్నది directoryలో policy నిల్వ చేసే భాగం మాత్రమే.

అనుమతించిన command నుంచి shell escapes ను నిరోధించడానికి ప్రయత్నించిన INTERCEPT అమలు కాలేదు. పట్టుదలతో ఉన్న user ను అది ఏమైనప్పటికీ నిరోధించలేకపోయేది. ఒక rule ద్వారా ఎవరైనా rootగా editor లేదా interpreter నడపగలిగితే, వారికి root ప్రాప్యత ఉన్నట్లే. ఏ sudo option కూడా దీనిని మార్చదు.

Session recording అమలు కాలేదు. అందువల్ల I/O log మరియు sudoreplay లేవు. Logging syslogకు మాత్రమే వెళ్తుంది. దాన్ని మరొక స్థానానికి మళ్లించడానికి logfile option లేదు. కాబట్టి sudo messages మీ system ఇప్పటికే syslogను పంపే స్థానానికే వెళ్తాయి.

మళ్లీ sudo.ws కు మారాలా?

మారవచ్చు. 26.04 cycle సమయంలో అసలు ప్యాకేజీ అందుబాటులో ఉండటానికి ఇదే కారణం.

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

--config output నుండి ఖచ్చితమైన paths ను copy చేయండి. ఈ పేజీ నుంచి copy చేయవద్దు. మీ సిస్టమ్ అంగీకరించే జాబితా అదే. తరువాత మళ్లీ sudo-rs కు మారాలంటే, అదే జాబితాలోని sudo-rs binary path కు alternative ను సెట్ చేయాలి.

sudo కు ప్రభావం చూపే మార్పులు చేయడానికి ముందు, login అయి idle గా ఉన్న రెండవ SSH session ను తెరిచి ఉంచండి. parse కాకపోయే sudoers file లేదా ఇన్‌స్టాల్ చేయని binary కు సూచించే alternative కారణంగా remote box లో root గా మారే మార్గం లేకుండా పోవచ్చు. కొత్త VPS పై మొదటి పది నిమిషాల్లో చేసే ఇతర పనుల మాదిరిగానే ఈ అలవాటును కూడా పాటించండి.

మళ్లీ మారడాన్ని fix గా కాకుండా deadline గా పరిగణించండి. నియమాలను సరిగ్గా తిరిగి రాయడానికి ఇది మీకు ఒక వారం సమయం ఇస్తుంది. ఆ rewrite ను స్వతంత్రంగా చేయడం కూడా విలువైనదే. ఎందుకంటే మీరు తొలగించే ప్రతి wildcard rule, దాని రచయిత ఉద్దేశించిన దానికంటే ఎక్కువ అనుమతులను ఇచ్చి ఉండేది.

FAQ

నా sudoers wildcard నియమం Ubuntu 26.04లో ఎందుకు పనిచేయడం ఆపింది?

Ubuntu 26.04 LTSలో default sudoగా sudo-rs ఎంపిక చేయబడుతుంది. sudo-rs కమాండ్ arguments లోని wildcard patterns ను match చేయదు. ఇది కమాండ్ file nameలో wildcardను అనుమతిస్తుంది, arguments లేవని సూచించడానికి "" ను అనుమతిస్తుంది, అలాగే చివరి argumentగా ఒకే * ను అనుమతిస్తుంది. /usr/bin/systemctl restart app-* వంటి నియమం argument మధ్యలో patternను ఉంచుతుంది. అందువల్ల అది ఎలాంటి అనుమతినీ ఇవ్వదు మరియు కమాండ్ తిరస్కరించబడుతుంది. Accountకు వాస్తవంగా ఉన్న అనుమతులను చూడటానికి rootగా sudo -l -U deploy అమలు చేయండి. తరువాత ఆ నియమాన్ని ఖచ్చితమైన commandsతో లేదా root-owned wrapper scriptతో భర్తీ చేయండి.

Ubuntu 26.04లో అసలు sudoకు తిరిగి ఎలా మారాలి?

అసలు sudo sudo packageలో ఉంటుంది. దాని binariesకు .ws suffix ఉంటుంది. sudo apt install sudoతో దాన్ని install చేయండి. తరువాత sudo update-alternatives --set sudo /usr/bin/sudo.wsతో alternativeను దానికి point చేయండి. ముందుగా update-alternatives --config sudo అమలు చేసి మీ system అందించే ఖచ్చితమైన pathsను చూడండి. మార్పు చేస్తున్నప్పుడు రెండవ SSH sessionను తెరిచి ఉంచండి. మీరు ఎంచుకున్న implementation ఏదైనా, ఇది sudo-ldapను తిరిగి తీసుకురాదు. sudo-ldapను 26.04లో తొలగించారు.

sudo-rs అదే /etc/sudoers fileను చదువుతుందా?

అవును. sudo-rs /etc/sudoersను మరియు /etc/sudoers.d/ కింద ఉన్న drop-in filesను చదువుతుంది. Users, groups, aliases, run-as specifications మరియు NOPASSWD tagకు అదే syntaxను ఉపయోగిస్తుంది. sudoers languageలోని ఒక subsetను మాత్రమే ఇది అమలు చేస్తుంది. అందువల్ల తేడాలు భిన్నంగా పనిచేసే constructsగా కాకుండా, లేని constructsగా కనిపిస్తాయి. sudo visudoతో edit చేయండి. Sessionను మూసే ముందు sudo visudo -cతో verify చేయండి.

sudo-rsలో sudo -Eకు బదులుగా ఏమి ఉపయోగించాలి?

sudo -E అమలు చేయబడదు. అసలు sudoలో కూడా దీన్ని ఇప్పటికే నిరుత్సాహపరిచారు. Caller నియంత్రించే environmentను root processకు అందించడం వల్ల ఆ process ప్రవర్తనను మార్చే అవకాశం ఉంటుంది. sudoersలో మీకు నిజంగా అవసరమైన variablesను మాత్రమే పేర్కొనండి. ఉదాహరణకు Defaults env_keep += "HTTP_PROXY HTTPS_PROXY NO_PROXY" వంటి lineను ఉపయోగించండి. sudo-rsలో env_reset ఎల్లప్పుడూ enabledగా ఉంటుంది. దీన్ని disable చేయలేరు. అందువల్ల మీరు ఉంచని ప్రతి variable clear అవుతుంది.

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