'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - භාවිතා කරන දෙය වැදගත් වන්නේ කවදාද, නැතහොත් එය කිසිසේත්ම වැදගත්ද?


276

මම පේළිය දුසිම් වාරයක් ටයිප් කිරීමට අවශ්‍ය දෙයක් කරන විට, මගේ සැසිය මූල සැසියකට මාරු කිරීමට මම කැමැත්තෙමි. අන්තර්ජාලයේ මා භාවිතා කර ඇති විවිධ නිබන්ධන සහ උපදෙස් sudo suවලදී sudo su -, මූල සැසියක් විවෘත කිරීම සඳහා මම දකිමි , sudo -iසහ sudo /bin/bashභාවිතා කරමි, නමුත් මේවා අතර වෙනස සහ එම වෙනස වැදගත් වන්නේ කවදාද යන්න පිළිබඳව මට පැහැදිලි නැත.

මා වෙනුවෙන් මෙය ඉවත් කිරීමට යමෙකුට හැකිද?


12
ඔබ ගැන අහන්න අමතක වුණා sudo -sහා sudo su.
රාදු රදෙනු




3
@ RaduRădeanu මම ප්‍රශ්නය ටයිප් කරන විට මම යෝජනා කළ ප්‍රශ්න සමාලෝචනය කළ අතර ඒ කිසිවක් මගේ සම්පූර්ණ ප්‍රශ්නයට ආමන්ත්‍රණය කළේ නැත. ඔබ සම්බන්ධ කළ ප්‍රශ්න සඳහා ද එය එසේම වේ. ඒවා මා සඳහා නව තොරතුරු රාශියක් අඩංගු වුවද, ඒවා සම්බන්ධ කිරීම ගැන ඔබට ස්තූතියි, පහත දැක්වෙන පරිශීලක අවුල්සහගත පිළිතුරු සපයන තරම් ඒවා සම්පූර්ණ නොවන බව මට පෙනී ගියේය, එය මා සොයන දෙයට වඩා බොහෝ සෙයින් ගැලපේ.
පෝල්

Answers:


361

මෙය පැහැදිලි කිරීම සඳහා වැඩසටහන් කරන්නේ කුමක්දැයි ඔබ දැනගත යුතුය:

  • su- විධාන su(තවත් පරිශීලක මාරු කිරීම සඳහා භාවිතා වේ ගේ දඩයමක් ඔබ ඇතැම්භාණ්ඩ), නමුත් ඔබට කිසිදු පරාමිතිය සමඟ මෙම විධානය යොදාගැනීම මගින් root පරිශීලක සඳහා මාරු විය හැක. suමුරපදය ටයිප් කිරීමෙන් පසු ඔබ පරිශීලකයාගේ පරිසරයට මාරුවීමට මුරපදය ඉල්ලා සිටී.
  • sudo- sudoයන්නෙන් අදහස් කරන්නේ මූල වරප්‍රසාද සහිත තනි විධානයක් ක්‍රියාත්මක කිරීමයි. නමුත් suඑය මෙන් නොව වත්මන් පරිශීලකයාගේ මුරපදය ඔබෙන් විමසනු ඇත. මෙම පරිශීලකයා sudoers ගොනුවේ තිබිය යුතුය (හෝ sudoers ගොනුවේ ඇති කණ්ඩායමක්). පෙරනිමියෙන්, උබුන්ටු ඔබගේ මුරපදය මිනිත්තු 15 ක් "මතක තබා ගනී", එවිට ඔබට සෑම විටම ඔබගේ මුරපදය ටයිප් කිරීමට අවශ්‍ය නොවේ.
  • bash- පරිගණකය සමඟ අන්තර් ක්‍රියා කිරීමට පෙළ අතුරු මුහුණතක්. පුරනය වීම, පුරනය නොවීම, අන්තර්ක්‍රියාකාරී සහ අන්තර්ක්‍රියාකාරී නොවන කවච අතර වෙනස තේරුම් ගැනීම වැදගත්ය:

ෂෙල් වර්ග:

  • පිවිසුම් කවචය : පිවිසුම් කවචයක් මඟින් ඔබ නිශ්චිත පරිශීලකයෙකු ලෙස පද්ධතියට ලොග් වේ, මේ සඳහා අවශ්‍ය වන්නේ පරිශීලක නාමය සහ මුරපදයයි. අථත්ය පර්යන්තයකට පිවිසීමට ඔබ ctrl+ alt+ F1එබූ විට සාර්ථකව පිවිසුම් කවචයකට පිවිසීමෙන් පසු ඔබට ලැබෙනු ඇත.
  • පුරනය නොවන කවචය : පුරනය නොවී ක්‍රියාත්මක වන කවචයක්, මේ සඳහා අවශ්‍ය වන්නේ දැනට පුරනය වී ඇති පරිශීලකයෙකි. ඔබ gnome හි ග්‍රැෆික් පර්යන්තයක් විවෘත කළ විට එය පුරනය නොවන කවචයකි.
  • අන්තර්ක්‍රියාකාරී කවචය : ඔබට අන්තර්ක්‍රියාකාරී ලෙස විධානයන් ටයිප් කිරීමට හෝ බාධා කිරීමට හැකි කවචයක් (පිවිසුම් හෝ පිවිසුම් නොවන). උදාහරණයක් ලෙස ග්නෝම් පර්යන්තය.
  • අන්තර්ක්‍රියාකාරී නොවන කවචය : ස්වයංක්‍රීය ක්‍රියාවලියකින් ක්‍රියාත්මක වන A (උප) කවචය. ආදානය හෝ ප්‍රතිදානය ඔබට නොපෙනේ.

එබැවින් නඩු:

  • sudo susudoවිධානය සමඟ ඇමතුම් su. බෑෂ් අන්තර්ක්‍රියාකාරී නොවන පිවිසුම් කවචයක් ලෙස හැඳින්වේ. එබැවින් bash පමණක් ක්‍රියාත්මක කරයි .bashrc. මූලයට මාරුවීමෙන් පසු ඔබ තවමත් එකම නාමාවලියක සිටින බව ඔබට පෙනේ:

    user@host:~$ sudo su
    root@host:/home/user#
  • sudo su -මෙම කාලය එය පිවිසුම් ෂෙල් වේ, එසේ /etc/profile, .profileහා .bashrcක්රියාත්මක කර ඇති අතර ඔබ root පරිසරය සමඟ මූල ගෙදර බහලුම ඔබම සොයා ඇත.

  • sudo -iඑය sudo su --i (ආරම්භක පිවිසුම අනුකරණය කිරීම) විකල්පය ඉලක්ක පරිශීලකයාගේ මුරපද දත්ත සමුදා ප්‍රවේශය මඟින් නිශ්චිතව දක්වා ඇති කවචය පිවිසුම් කවචයක් ලෙස ක්‍රියාත්මක කරයි. මෙයින් අදහස් කරන්නේ පිවිසුම්-විශේෂිත සම්පත් ලිපිගොනු .profile, .bashrcහෝ .loginකවචය කියවා ක්‍රියාත්මක කරනු ඇති බවයි.

  • sudo /bin/bashමෙයින් අදහස් කරන්නේ ඔබ sudoවිධානය සමඟ අමතන්න /bin/bash. /bin/bashපිවිසුම් නොවන කවචයක් ලෙස ආරම්භ කර ඇති බැවින් සියලු තිත් ගොනු ක්‍රියාත්මක නොවේ, නමුත් බාෂ් විසින්ම .bashrcඇමතුම් පරිශීලකයා කියවනු ලැබේ. ඔබේ පරිසරය එලෙසම පවතී. ඔබේ නිවස රූට්ගේ නිවස නොවනු ඇත. එබැවින් ඔබ root, නමුත් ඇමතුම් පරිශීලකයාගේ පරිසරය තුළ.

  • sudo -s$SHELLවිචල්‍යය කියවා අන්තර්ගතය ක්‍රියාත්මක කරයි. එය $SHELLඅඩංගු වන්නේ /bin/bashනම් sudo /bin/bash(ඉහත බලන්න).

චෙක් පත:

ඔබ පිවිසුම් කවචයක සිටීද නැද්ද යන්න පරීක්ෂා shoptකිරීම සඳහා (බිල්ඩින් විධානයක් වන බැවින් එය පමණක් ක්‍රියාත්මක වේ):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

20
පැහැදිලි කිරීමක් පමණි: sudoඅවසර ලත් පරිශීලකයෙකුට සුපර් යූසර් හෝ වෙනත් පරිශීලකයෙකු ලෙස විධානයක් ක්‍රියාත්මක කිරීමට ඉඩ දෙයි . කෙසේ වෙතත්, ඔබගේ උත්සාහය සඳහා +1 කරන්න.
රාදු රදෙනු

2
@chaos මෙම විශිෂ්ට පිළිතුරට ස්තූතියි! එය බොහෝ දුරට මගේ ප්‍රශ්න වලට පිළිතුරු සපයයි, එබැවින් මම ඉදිරියට ගොස් ප්‍රශ්නයට පිළිතුරු සලකුණු කළෙමි, නමුත් විශේෂිත කවචයක් ධාවනය කිරීම සුදුසු වන්නේ කවදාදැයි මට නොතේරේ. මම ඇත්ත වශයෙන්ම උබුන්ටු භාවිතා කරන්නේ විධාන රේඛාව හරහා පමණක් වන අතර rootපරිශීලක සැසියක් විවෘත කිරීම සඳහා මගේ වඩාත් පොදු භාවිතය (එදිරිව භාවිතා කිරීම sudo) මම rootවරප්‍රසාද අධික ලෙස භාවිතා කිරීමට අවශ්‍ය දෙයක් කරන විට, එනම් අලුත් දෙයක් ස්ථාපනය කිරීමේදී හෝ ප්‍රධාන ප්‍රතිනිර්මාණයක් සිදුකිරීම වැනි. . මම භාවිතා කර ඇත sudo /bin/bash, නමුත් පෙනෙන විදිහට එම ක්‍රමයට නරක රැප් එකක් ඇත.
පෝල්

3
එසේම, සු යනු සුපිරි පරිශීලකයාට වඩා ස්විච් භාවිතා කරන්නෙකු බව පැවසීම වඩාත් "නිවැරදි" ය. එනම් php ස්ක්‍රිප්ට් එකක් ධාවනය කරන්න: su www-data /usr/share/script.php හෝ අන්තර්ක්‍රියාකාරී කවචය සඳහා www www-data. නමුත් කිසිදු පරිශීලක නාමයක් නොමැතිව su විසින් root (සුපිරි පරිශීලක) ගිණුම ගණනය කරනු ඇත.
oblivian

අවුල් සහගත - "shopt -q login_shell && echo 'Login shell' || echo 'no login shell'" මේ ආකාරයේ යෝජනා මා නිතර දකින නමුත් එය මෙතරම් දිගු කරන්නේ ඇයි? && ක්‍රියාකරු යන්නෙන් අදහස් වන්නේ පිටවීමේ කේතය 0 නම් “ඊළඟ විධානය කරන්න” සහ ද්විත්ව පයිප්ප (||) යන්නෙන් අදහස් කරන්නේ වෙනත් (0 නොවේ නම්) මෙම විධානය කරන්න. ඉතින් මූලික වශයෙන් කියන්නේ පිටවීමේ කේතය 0 නම් "ලොගින් ෂෙල්" ප්‍රතිරාවය කරන්න, පිටවීමේ කේතය 1 (අසමත්) නම් "පිවිසුම් නැත" ප්‍රතිරාවය කරන්න. "Shopt -q login_shell; echo $" පමණක් නොවන්නේ ඇයි? $? පූර්ව විධානයේ ප්‍රති result ල / පිටවීමේ කේතය අදහස් කරයි. බොහෝ විට සියලුම වැඩසටහන් 0 යනු සාර්ථකත්වය, 1 හෝ වැඩි ගණනක් අසමත් වීමයි. එබැවින් දෝංකාරය 0 = සාර්ථක නම් ...
oblivian

2
A පෝල්: sudo -iයෝජනා කර ඇත. මෙතැනින් කියවන්න: ubuntuforums.org/showthread.php?t=1817402 සහ මෙතැන: unix.stackexchange.com/questions/98531/…
මාකෝ සුල්ලා

0

වෙනස්කම් සෙවීම සඳහා ඔබට විවිධ ආයාචනා අතර ඇති වන පරිසරය යටපත් කළ හැකිය.

සමහර විවේචනාත්මක විචල්‍යයන්හි "කුඩා" වෙනස්කම් ඔබට සොයාගත හැකිය :

  • PATH, LD_LIBRARY_PATH,LD_PRELOAD

හෝ ~ / හි යම් වෙනසක්. dotfiles හැසිරවීම ( ~/.config).

විධාන ජනනය කරන $ HOME පදනම් කරගත් ලොග්ෆයිල් ( ~/.xsession.errors, ආදිය ...) හෝ xauth කුකීස් ( ~/.Xauthority) හි හිමිකාරිත්වය ද සලකා බලන්න .

මෙම විධානයන් උත්සාහ කරන්න:


# 'su -' vs 'su'

diff <(sudo su - -c env | sort) <(sudo su -c env | sort)


# 'su -' vs 'sudo -i'

diff <(sudo su - -c env | sort) <(sudo -i env | sort)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.