නුසුදුසු පරිශීලකයින් ලෙස ඉහළ රැකියා ක්‍රියාත්මක කිරීම


143

ඉහළ රැකියාවක් ලබා ගැනීම සඳහා කැනොනිකල් ක්‍රමය කුමක්ද?

පැහැදිලිවම එක භාවිතා කළ හැකිය suහෝ sudo, නමුත් මේ hacky පෙනේ (සහ අනවශ්ය ලඝු-සටහන රේඛා ජනනය කළ හැකිය).

Answers:


109

Upstart v1.4 සමඟ, වින්‍යාස ගොනුව තුළ setuid සහ setgid දේශීයව සහය දක්වයි.


7
මේ පිළිබඳ විශේෂතා සඳහා කුක් පොත බලන්න: upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user
ජේසන්

10
වෙනත් වචන වලින් කිවහොත්, එය නිරවද්යතාව (12.04) සහ නවතම ඒවා සඳහා සහය දක්වයි.
එඩ්වඩ් ඇන්ඩර්සන්

8
වෙනත් වචන වලින් කිවහොත්, සෙන්ටෝස් 6 හි සහය නොදක්වයි
සොකට්පෙයාර්

5
වාර්තාව සඳහා, initctl --versionඔබගේ වර්තමාන උඩුමහලේ අනුවාදය සොයා ගැනීමට.
මහන්

5
කරදරකාරී ලෙස, AWS හි ඇති ඇමසන් ලිනක්ස් ඩිස්ට්‍රෝ RHEL 6 හි ඉහළම අනුවාදය (0.6.5 !!!!) භාවිතා කරයි, එබැවින් එය භාවිතා කරන ඕනෑම කෙනෙකුට 'su' විසඳුම භාවිතා කිරීමට සිදුවේ.
අස්ෆන්ඩ් කාසි

86

ෆ්‍රීනෝඩ් හි #upstart නාලිකාවෙන් විමසීමේදී, නිල කාරණය වන්නේ:

අනාගතයේ Upstart නිකුතුව සඳහා ඒ සඳහා ස්වදේශීය සහාය ලැබෙනු ඇත, නමුත් දැනට ඔබට මෙවැනි දෙයක් භාවිතා කළ හැකිය:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

7
ඇමසන් ලිනියු ඊසී 2 හි වැඩ කළ එකම පිළිතුර මෙයයි (මම - සැසි-විධාන,-සී, දැන්වීම් ඔක්කාරය ඇතුළුව සුඩෝ සහ සු හි සියලු වෙනස්කම් අත්හදා බැලුවෙමි); ඔවුන්ගෙන් කිසිවෙකු ක්‍රියාවලිය ආරම්භ වූ වහාම නතර කිරීමට ඉඩ දුන්නේ නැත; මේ සඳහා බොහොම ස්තූතියි.
කැටෝ

ඒක සමහර විසිතුරු ෂෙල් මැජික්, +1.
ස්ටීව් කෙහෙලට්

7
CentOS 6 (Upstart 0.6.5) හි මෙය මට වැඩ කළේ නැත. දෙබලක මාලාවක් ඇත (4 ගැඹුරු යැයි මම සිතමි) suඑයින් අදහස් කරන්නේ අවසාන PID expect forkපවා expect daemonඅල්ලා නොගන්න.
මාර්ක් ලකාටා

2
මම මෙය ඇමසන් ලිනක්ස් (අප්ස්ටාර්ට් 0.6.5) හි ජෙන්කින්ස් ක්‍රියාවලියක් ආරම්භ කිරීමට භාවිතා කළෙමි. සම්මත ප්‍රතිදානය ලොග් ගොනුවකට හරවා පරිසර විචල්‍යයන් කිහිපයක් සැකසීමට මට එය ටිකක් වෙනස් කිරීමට සිදු විය, නමුත් එය ක්‍රියාත්මක විය! මගේ අනුවාදය පෙනේ:exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
අස්ෆන්ඩ් කාසි

CentOS 6 සඳහා, පහත දැක්වෙන hxysayhi ගේ පිළිතුර බලන්න. එය මාර්ක් ලකාටා හඳුනාගත් ගැටළුව විසඳයි
bitsoflogic

17

ආරම්භක නැවතුම්-ඩීමන් භාවිතා කරන්නේ කෙසේද?

exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd

Upstart කුක් පොතෙන් :

ඩේබියන් සහ උබුන්ටු පද්ධති සඳහා නිර්දේශිත ක්‍රමය වන්නේ සහායක උපයෝගීතාව භාවිතා කිරීමයි start-stop-daemon. […] start-stop-daemonඑය ආරම්භ වන ක්‍රියාවලියට PAM ("ප්ලග් කළ හැකි සත්‍යාපන මොඩියුලය") සීමාවන් පනවන්නේ නැත.

සටහන: start-stop-daemonRHEL හි සහය නොදක්වයි.


2
ඔබට අවශ්‍ය නම් කණ්ඩායමද භාවිතා කළ හැකිය. --Chuid daemonuser සමඟ: daemongroup
Evgeny

13

එය කිරීමට ක්‍රම කිහිපයක් තිබේ, සියල්ලම තරමක් වෙනස් අර්ථකථන සහිතව, විශේෂයෙන් කණ්ඩායම් සාමාජිකත්වයට අදාළ වේ:

  • setuidgid ඔබ සඳහන් කරන කණ්ඩායමට ඔබව ඇතුළත් කරනු ඇත.

    • මුල් ඩීමොන්ටූල්ස් setuidgidඔබව එම කණ්ඩායමට පමණක් ඇතුළත් කරනු ඇත, එබැවින් ඔබ සාමාජිකයෙකු වන වෙනත් කණ්ඩායම් වලට අයත් ලිපිගොනු වෙත ප්‍රවේශ වීමට ඔබට නොහැකි වනු ඇත.
    • මෙම setuidgiddaemontools-encore සිට සහ setuidgidඑම nosh toolset සිට දෙකම සතුව -s(හෙවත් --supplementary, ඒ පිරිස අතරේ, ඔබ පත් කරන අතර, ද සියලු ඔබ දමා) විකල්පය පරිපූරක කණ්ඩායම් ඔබ නියම වූ පරිශීලක භාවිතා සඳහා.
  • newgrpඔබ වරප්‍රසාද අඩු පරිශීලකයෙකු බවට පත් වූ පසු භාවිතා කිරීම ඔබේ කණ්ඩායම් කට්ටලයට තනි කණ්ඩායමක් එකතු කරනු ඇත, නමුත් නව උපසිරැසියක් නිර්මාණය කරයි, එමඟින් ස්ක්‍රිප්ට් ඇතුළත භාවිතා කිරීම උපක්‍රමශීලී වේ.

  • start-stop-daemon ඔබගේ කණ්ඩායම් සාමාජිකත්වය ආරක්ෂා කරන අතර, සෙටූයිඩ් / සෙට්ජිඩ් වලට වඩා වැඩි යමක් කරයි.

  • chpst -u username:group1:group2:group3... commandnameකණ්ඩායම් සාමාජිකත්වය අනුගමනය කළ යුතු දේ හරියටම සඳහන් කිරීමට ඔබට ඉඩ සලසයි, නමුත් ( උබුන්ටු වල ) එය පැමිණෙන්නේ runitපැකේජය සමඟ පමණි , එය විකල්පයකි upstart.

  • su -c commandname usernameපරිශීලක නාමයේ කණ්ඩායම් සාමාජිකත්වය සියල්ලම ලබා ගනී sudo -u username commandname, එබැවින් ඔවුන් අවම වශයෙන් මවිතයට පත් කිරීමේ මාවත විය හැකිය.


8

setuidgidපැකේජයෙන් භාවිතා කරන්න daemontools.

මෙහි ප්‍රලේඛනය: http://cr.yp.to/daemontools/setuidgid.html


7
ඩීමොන්ටූල්ස් උඩුමහලේ පූර්ව අවශ්‍යතාවක් නොවේ, එබැවින් මෙය 'කැනොනිකල්' පිළිතුර ලෙස නොපෙනේ
ඇඩම් නෙල්සන්

2
තවද, ඩීමොන්ටූල්ස් විශ්වයේ ඇත (උබුන්ටු 10.04), සහ ඉහළට ප්‍රධාන වශයෙන්.
jtimberman

4

ඇමේසන් ඊසී 2 හි උබුන්ටු 10.10 නිදසුනක් මත, මට start-stop-daemonවිධානය සමඟ වඩා හොඳ වාසනාවක් තිබුණි .

මම තවත් ඉහළ ගාථා කිහිපයක් සමඟ පොරබදිමි . මම virtualenvක්‍රියාත්මක කරන ලද වැඩසටහනට නිශ්චිත හා පරාමිතීන් සහිත පයිතන් යෙදුමක් අමතන්නෙමි .

පහත දැක්වෙන්නේ මට වැඩ කළ දෙයයි.

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

මෙම PYTHONPATHඉහළ කාර්යය ක්‍රියාත්මක වන විට ප්‍රභවයේ සිට සමහර පැකේජයන් පයිතන් මොඩියුල මාර්ගයට ස්ථාපනය කිරීමයි . chdirගාථාව වැඩ කරන බවක් නොපෙනෙන නිසා මට සෑම දෙයක්ම නිරපේක්ෂ මාවත්වල කිරීමට සිදුවිය.


විධායක ආරම්භක-නැවතුම්-ඩීමන් සමඟ භාවිතා කරන env විචල්‍යයන් සමඟ ද මට ගැටළු තිබේ .
තෝමස් බ්‍රැට්

3

මම CentOS 6 භාවිතා කළ අතර, මට වැඩ කිරීමට නිර්දේශිත හැක් (අප්ස්ටාර්ට් 0.6.5 සඳහා) ලබා ගැනීමට නොහැකි විය, හෝ 'සු' උපක්‍රමය එයට සම්බන්ධ වූ දෙබලක ගණන (4 මම සිතන්නේ) 'අපේක්‍ෂා කරන දෙබලක' ලුහුබැඳ නොතිබුණි. 'හෝ' ඩීමන් බලාපොරොත්තු වන්න '.

මම අන්තිමට කළා

chown user:group executable
chmod +s executable

(එනම් සෙටූයිඩ් බිට් එක සකසා හිමිකාරිත්වය වෙනස් කරන්න).

එය ආරක්ෂිතම ක්‍රමය නොවිය හැකි නමුත් අභ්‍යන්තර පර්යේෂණ හා සංවර්ධන ව්‍යාපෘතියක් සඳහා එය අපගේ කාරණයේදී වැදගත් නොවේ.


ඔබ යුක්තිසහගත නොවී එහි chmod 1700අවම වශයෙන් හෝ අවම වශයෙන් යමක් කිරීමට අදහස් කරන්නේ නම් , එය "ප්‍රමාණවත් තරම් සුරක්ෂිත" ලෙස සුදුසුකම් ලබයි. :)chmod u+sx,go-x+s
dannysauer

1

සෙන්ටෝස් 6 හි 0.6.5 දක්වා ඉහළට, පහත දැක්වෙන්නේ මට වැඩ කළ දෙයයි.

script

    exec su user_name << EOF
        exec /path/to/command [parameters...]
EOF

end script

හෝ :

script

    exec su user_name << EOF
       ..... what you want to do ....
EOF

end script

භාවිතා කරන විට

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

රැකියා ක්‍රියාවලිය නතර කළ නොහැක initclt stop. මම හිතන්නේ හේතුව:

1. the job forked and the main process is not tracked.
2. the main process changed its process group,because of `su -c`

0

ඔබ ඉටු කිරීමට උත්සාහ කරන දේ අනුව තුන්වන හැකියාවක් ඇත. සැක සහිත ලිපිගොනු / උපාංගවල ප්‍රවේශ පාලනය ලිහිල් කිරීමට ඔබට හැකි විය හැකිය . නුසුදුසු පරිශීලකයෙකුට සාමාන්‍යයෙන් ඉඩ නොදෙන අයිතම සවි කිරීමට හෝ ප්‍රවේශ වීමට මෙය ඉඩ දෙයි. ක්‍රියාවලියේදී ඔබ රාජධානියට යතුරු ලබා නොදෙන බවට වග බලා ගන්න.

ඔබට සුඩෝ මුරපද හැඹිලියේ වේලාව වෙනස් කළ හැකිය . නමුත් ඔබේ යන්ත්‍රය භෞතිකව ආරක්ෂිත නම් මිස මම එය නිර්දේශ නොකරමි (එනම්, ඔබ පසුකරන්නෙකු සුඩෝ ප්‍රවේශය ලබා ගැනීමට උත්සාහ කරනු ඇතැයි සිතිය නොහැක).

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

නම් ප්රමාණය ඔබේ ලඝු-සටහන ගොනු, කනස්සල්ල යමක් බොහෝ විට වැරදි දෙයක්. සුඩෝ සාමාන්‍ය තත්වයන් යටතේ භාවිතයට එක් පේළියක් පමණක් ජනනය කරයි.

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.