Apache 2 හි පරිශීලක www-data / var / www හි අවසරයන් හැසිරවීමේ හොඳම ක්‍රමය කුමක්ද?


220

ලිපිගොනු හැසිරවීම සඳහා යමෙකුට හොඳ විසඳුමක් /var/wwwතිබේද? අපි නම පදනම් කරගත් අතථ්‍ය ධාරකයන් ධාවනය කරන අතර Apache 2 පරිශීලකයා www-data වේ.

අපට සාමාන්‍ය පරිශීලකයින් දෙදෙනෙකු සිටී. ඒ නිසා ලිපිගොනු අවුල් කරන විට /var/www, එසේ කිරීමට වඩා ...

chown -R www-data:www-data

... සෑම විටම, මෙය හැසිරවීමට හොඳ ක්‍රමයක් කුමක්ද?

අතිරේක ප්‍රශ්නය: ඔබ අවසර ලබා ගන්නේ කෙසේද?

සහයෝගිතා සංවර්ධන පරිසරවල මෙය සැමවිටම ගැටලුවක් වී තිබේ.


Answers:


210

@ සෝරඩේච්ගේ පිළිතුර පුළුල් කිරීමට උත්සාහ කිරීම , මම මෙය තනිවම කර ගනිමි :

  • නව කණ්ඩායමක් (www-pub) නිර්මාණය කර පරිශීලකයින් එම කණ්ඩායමට එක් කරන්න

    groupadd www-pub

    usermod -a -G www-pub usera ## පවතින කණ්ඩායම් වලට එකතු කිරීමට -a භාවිතා කළ යුතුය

    usermod -a -G www-pub userb

    groups usera ## පරිශීලකයා සඳහා කණ්ඩායම් පෙන්වන්න

  • / Var / www යටතේ ඇති සෑම දෙයකම හිමිකම root ලෙස වෙනස් කරන්න: www-pub

    chown -R root:www-pub /var/www පුනරාවර්තන සඳහා ## -R

  • සියලුම ෆෝල්ඩර වල අවසර 2775 දක්වා වෙනස් කරන්න

    chmod 2775 /var/www ## 2 = කණ්ඩායම් හැඳුනුම්පත සකසන්න, හිමිකරු සඳහා 7 = rwx (මූල), 7 = rwx කණ්ඩායම සඳහා (www-pub), ලෝකයට 5 = rx (අපාචේ www-data භාවිතා කරන්නා ඇතුළුව)

    කණ්ඩායම් හැඳුනුම්පත ( SETGID ) බිට් (2) මඟින් සමූහය (www-pub) එම ෆෝල්ඩරයේ සාදන ලද සියලුම නව ගොනු / ෆෝල්ඩර වලට පිටපත් කිරීමට හේතු වේ. අනෙක් විකල්පයන් වන්නේ පරිශීලක හැඳුනුම්පත පිටපත් කිරීම සඳහා SETUID (4) සහ ලිපිගොනු මකා දැමීමට අයිතිකරුට පමණක් ඉඩ දෙන STICKY (1) ය.

    එහි තියෙන්නේ -R, ඔබ කළ යුතු නිසා, ආවර්තනික විකල්පය, නමුත් එම ගොනු සහ ෆෝල්ඩර අතර පහත් ලෙස නෑ සොයා භාවිතා වගේ නිසා,:

    find /var/www -type d -exec chmod 2775 {} +

  • සියලුම ලිපිගොනු 0664 ට වෙනස් කරන්න

    find /var/www -type f -exec chmod 0664 {} +

  • ඔබගේ පරිශීලකයින් සඳහා උමාස්ක් 0002 දක්වා වෙනස් කරන්න

    Umask මඟින් පෙරනිමි ගොනු සෑදීමේ අවසරය පාලනය කරයි, 0002 යන්නෙන් අදහස් වන්නේ ලිපිගොනු 664 සහ නාමාවලි 775 ය. මෙය සැකසීම ( මගේ නඩුවේ umaskපතුලේ ඇති පේළිය සංස්කරණය කිරීමෙන් /etc/profile) යන්නෙන් අදහස් වන්නේ එක් පරිශීලකයෙකු විසින් සාදන ලද ලිපිගොනු www- හි වෙනත් පරිශීලකයින් විසින් ලිවිය හැකි බවයි. chmodඔවුන්ට අවශ්‍ය නොවී සමූහය .

ගොනුවක් සහ නාමාවලියක් නිර්මාණය කිරීමෙන් සහ අයිතිකරු, කණ්ඩායම සහ අවසරයන් සත්‍යාපනය කිරීමෙන් මේ සියල්ල පරීක්ෂා කරන්න ls -l.

සටහන: ඔබගේ කණ්ඩායම්වල වෙනස්කම් බලාත්මක කිරීම සඳහා ඔබට ලොග්අවුට් / ඉන් අවශ්‍ය වේ!


7
findමේ සඳහා විධානය භාවිතා කිරීමට ඔබ නිර්දේශ කරන බව දැකීමට ටොම් ග්‍රේට් . ඔබ සතුව ලිපිගොනු / නාමාවලි විශාල ප්‍රමාණයක් තිබේ නම් සහ GNU සොයා ගැනීම භාවිතා කරන්නේ නම් මම ලබා දෙන එක් කුඩා කාර්ය සාධන ඉඟියක් වන්නේ +ඒ වෙනුවට \;විධානය බහු ලිපිගොනු මත ක්‍රියාත්මක වන නිසා “හැකි තරම් ගොනු මත විධානයක් ක්‍රියාත්මක කිරීම වේගවත් වන බැවිනි. එක් වරකට, එක් ගොනුවකට එක් වරක් නොව. මෙය කිරීමෙන් සෑම අවස්ථාවකම විධානය ආරම්භ කිරීමට ගතවන කාලය ඉතිරි වේ. එසේම, බැක්ස්ලෑෂ් අවශ්‍ය නොවන බැවින් ටයිප් කිරීම පහසුය.
aculich

2
+ නොව use භාවිතා කිරීමට @ aculich ගේ යෝජනාව සමඟ යාවත්කාලීන කරන ලදි;
ටොම්

1
Un සනී ජේ. මෙය උත්සාහ කරන්න (පිටත උපුටා දැක්වීම් නොමැතිව): "find / var / www -type f -exec chmod 0664 '{}' \ +" එය උත්සාහ කරන්න. '{}' සහ \ + අතර ඉඩක් ඇත.
බට්ල් බට්කස්

1
ඇයි අපි අන් අයට දැක බලා ගැනීමට සහ ක්‍රියාත්මක කිරීමට අවසර දිය යුත්තේ.
කෙවින් පාකර්

1
@ ටොම්- එය බිඳ දැමීමේ මාර්ගය, ස්තූතියි. සටහනක් පමණක් - ඔබේ පිළිතුරෙහි ඇතුළත් කර ඇති පරිදි "පරිශීලක හැඳුනුම්පත පිටපත් කිරීම සඳහා SETUID (4)" වැරදියි - ලිනක්ස් / යුනික්ස් හි නාමාවලි වලට යොදන විට SETUID නොසලකා හරිනු ලැබේ - Ref
Yarin

62

ඔබට අවසර වින්‍යාසගත කරන්නේ කෙසේදැයි මට සම්පූර්ණයෙන්ම විශ්වාස නැත, නමුත් මෙය ඔබට ආරම්භක ස්ථානයක් ලබා දෙනු ඇත. බොහෝ විට වඩා හොඳ ක්‍රම තිබේ. / Var / www / යටතේ ඕනෑම දෙයක් වෙනස් කිරීමට පරිශීලකයින්ට හැකි වේ යැයි මම සිතමි

  • නව කණ්ඩායමක් (www-pub) නිර්මාණය කර පරිශීලකයින් එම කණ්ඩායමට එක් කරන්න.
  • / Var / www යටතේ ඇති සෑම දෙයකම හිමිකම root ලෙස වෙනස් කරන්න: www-pub.
  • සියලුම ෆෝල්ඩර වල අවසර 2775 දක්වා වෙනස් කරන්න
  • සියලුම ලිපිගොනු 0664 ට වෙනස් කරන්න.
  • ඔබගේ පරිශීලකයින් සඳහා උමාස්ක් 0002 දක්වා වෙනස් කරන්න

මෙයින් අදහස් කරන්නේ ඔබේ පරිශීලකයින් විසින් නිර්මාණය කරන ලද ඕනෑම නව ගොනුවක් පරිශීලක නාමය විය යුතු බවයි: www-pub 0664 සහ නිර්මාණය කරන ඕනෑම නාමාවලිය පරිශීලක නාමය වනු ඇත: www-pub 2775. අපාචේට 'වෙනත් පරිශීලකයින්ගේ' සංරචකය හරහා සෑම දෙයකටම කියවීමේ ප්‍රවේශය ලැබේ. ඩිරෙක්ටරිවල ඇති SETGID බිට් මඟින් නිර්මාණය කරන සියලුම ලිපිගොනු ෆෝල්ඩරය හිමි කණ්ඩායමට අයිති වීමට බල කරයි. කණ්ඩායමේ ඕනෑම කෙනෙකුට ලිපිගොනු සංස්කරණය කිරීමට හැකි වන පරිදි ලිවීමේ බිට් සකසා ඇති බව තහවුරු කර ගැනීම සඳහා උමාස්ක් සකස් කිරීම අවශ්‍ය වේ.

මම අවසර මත කොතරම් තදින් ක්‍රියා කරනවාද යන්න. එය සම්පූර්ණයෙන්ම වෙබ් අඩවිය / සේවාදායකය මත රඳා පවතී. සංස්කාරකවරුන් 1-2 ක් පමණක් සිටී නම් සහ ඒවා නරක ලෙස බිඳ දැමීමෙන් වළක්වා ගත යුතු නම් මම පහසුවෙන් යන්නෙමි. ව්‍යාපාරයට වඩාත් සංකීර්ණ යමක් අවශ්‍ය නම් මම වඩාත් සංකීර්ණ දෙයක් සකස් කරමි.


1
හැකි එකතු කිරීම - වෙබ් සේවාදායකයා විසින් www-data: www-data සහ 775 වෙත ලිවිය යුතු හැඹිලි / උඩුගත කරන ලද
ඩර්ස් සකසන්න.

'වෙනත්' අවසරයන් මත විශ්වාසය තැබීම වෙනුවට පරිශීලකයින් අපාචේ කණ්ඩායමට එක් කිරීමද සාර්ථක වේද? ඔබ කරන්නේ ගොනු උඩුගත කිරීම පමණක් නම් සහ එම ලිපිගොනු අපචේ විසින් කියවිය යුතු නම් 3 වන කණ්ඩායම ප්‍රයෝජනවත් වන්නේ එම ගොනු සංස්කරණය කිරීමට අවශ්‍ය නම් පමණි.
සිමූර්

1
ඔබට මෙය ටිකක් පුළුල් කළ හැකි කිසියම් අවස්ථාවක් තිබේද? මම rwx බිටු, chmod, chown, adduser, usermod හි මූලික භාවිතය උදුරා ගත්තෙමි, නමුත් අෂ්ටක අවසරයන්, උමාස්ක් සහ ඒ සියල්ල පිළිබඳ අමතර පළමු ඉලක්කම් සමඟ ඔබ මට අහිමි විය. ඔබගේ දළ සටහනක් නිරූපණය කරන සමහර නියැදි විධානයන් බෙහෙවින් අගය කරනු ඇත.
ටොම්

1
මේ ආකාරයට සෑම පරිශීලකයෙකුටම අනෙක් සෑම පරිශීලක ලිපිගොනුවකටම පිවිසිය හැකිය! මෙයින් අදහස් කරන්නේ userA හට userB හි config.php කියවිය හැකි බවයි ... එහි mysql අක්තපත්‍රය සොරකම් කිරීම, උදාහරණයක් ලෙස
drAlberT

1
Acl භාවිතා කිරීමෙන් ඔබට ආරක්ෂාව සහ සහයෝගීතාව යන දෙකම පාලනය කළ හැකිය :)
drAlberT

39

මම හිතන්නේ ඔබට POSIX ACL (ප්‍රවේශ පාලන ලැයිස්තු) ප්‍රයෝජනවත් විය හැකිය. පරිශීලකයා හා සසඳන විට වඩාත් සියුම් අවසර ආකෘතියකට ඔවුන් ඉඩ දෙයි: කණ්ඩායම: වෙනත් ආකෘතිය. මට වඩාත් පැහැදිලිව පෙනෙන නිසාත්, ගොනු පද්ධතියේ ශාඛාවක් සඳහා “පෙරනිමි” හැසිරීම සැකසිය හැකි නිසාත් ඒවා මගේ හිසෙහි කෙළින් තබා ගැනීමට පහසු බව මට පෙනී ගොස් ඇත.

උදාහරණයක් ලෙස, ඔබට එක් එක් පරිශීලකයාගේ අවසරයන් පැහැදිලිව සඳහන් කළ හැකිය:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

නැතහොත් හවුල් කණ්ඩායමක් මත පදනම්ව ඔබට එය කළ හැකිය:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

සමහර විට ඔබට ඔබේ Apache පරිශීලකයා කියවීමට පමණක් තබා ගැනීමට අවශ්‍ය වනු ඇත

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

මෑන් පිටු:

නිබන්ධනය


2
ඒක තමයි මාර්ගය ! +1
drAlberT

ජයග්‍රහණය සඳහා ACL +1 ... වැඩි විස්තර සඳහා serverfault.com/a/360120/41823
යරින්

1
ACL එදිරිව මූලික අවසරයන් සඳහා කිසියම් කාර්යසාධනයක් තිබේදැයි මම කල්පනා කරමි.
බට්ල් බට්කස්

2
අවාසනාවකට මෙන්, සම්මත ස්ථාපනයන් / බෙදාහැරීම් වලදී ACL බොහෝ විට අස්ථානගත වී ඇත. මා කළමනාකරණය කරන සෑම සේවාදායකයකම කර්නලය සම්පාදනය කිරීම වේදනාකාරී වේ, හෝ ඊටත් වඩා නරක නම් සමහර විට ගොනු පද්ධතිය වෙනස් කිරීම. ප්ලස් ඔබ උපස්ථ කිරීමේදී ඉතා ප්‍රවේශම් විය යුතුය, විශේෂයෙන් ඔබ සේවාදායක මාරු කරන්නේ නම්. ACL විශිෂ්ටයි නමුත් එහි වර්තමාන සහාය ඉතා අඩු බැවින් සේවාදායකයේ සහ වටපිටාවේ සෑම දෙයක් ගැනම පූර්ණ පාලනයක් නොමැති ඕනෑම කෙනෙකුට මම එයට එරෙහිව නිර්දේශ කරමි. නමුත් ACL එය සැබවින්ම අර්ථවත් වන තැනට යොමු කිරීම සඳහා +1!
නින්ජ්

හොඳ පිළිතුර +1; අපාචේ ක්‍රියාවලිය කියවීම / ලිවීමේ අවසරය ( www-dataනිදසුනක් ලෙස) මුළු වෙබ් අඩවිය සඳහාම කියවීමට පමණක් වෙනස් කිරීම පිළිබඳ සටහනක් (setfacl හෝ chmod හරහා - හෝ දෙකම හරහා) -> මෙය පැහැදිලිවම සියලුම ලිවීම් අවහිර කරනු ඇත (ප්ලගිනය / මොඩියුලය උඩුගත කිරීම / බ්‍රව්සර් පැත්තේ සිට යාවත්කාලීන කිරීම) බොහෝ CMS උදාහරණයක් ලෙස). බොහෝ ජනප්‍රිය අය කණ්ඩායම් මට්ටමින් නොව පරිශීලක පර්ම් මට්ටමින් ලිවීමේ ප්‍රවේශය සඳහා පමණක් පරීක්‍ෂා කරන බව මම විශ්වාස කරමි. ඔබට තවමත් යාවත්කාලීන කළ හැකිය, නමුත් යාවත්කාලීනයන් අතින් යෙදිය යුතු අතර ලිවීමේ ෆෝල්ඩර සඳහා ඕනෑම අභිරුචි අවසරයක් (ලොග් / තාවකාලික / උඩුගත කිරීම් / යනාදිය). ඔබේ වෙබ් අඩවිය එය සමඟ වැඩ කරන්නේ නම් කියවීමට පමණක් විශාල ආරක්ෂාවක් ඇත .. බොහෝ විට එසේ නොවේ.
bshea

11

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


ආරක්ෂිත වෙබ් සේවාදායකයක් සහ සහයෝගී සංවර්ධනයක් සඳහා ගොනු අවසරයන්ට වඩා වැඩි යමක් ඇත:

  • සෑම වෙබ් අඩවියකටම වෙනම පරිශීලකයෙකු සිටින්න, එනම් සියලුම වෙබ් අඩවි භාවිතා නොකර සේවය කරන්න www-data. මෙය වැදගත් ය, වර්තමානයේ අපාචේ තනිකරම ස්ථිතික අන්තර්ගත ලිපිගොනු සේවය කරන්නේ කලාතුරකිනි , නමුත් ගතික වෙබ් අඩවි ධාවනය කරයි. මෙම පිළිතුර PHP කෙරෙහි වැඩි අවධානයක් යොමු කරන්නේ එය වඩාත් පොදු සේවාදායක අඩවි භාෂාව වන නමුත් එම මූලධර්ම අනෙක් අයටද අදාළ වේ.

    ඔබට තනි වෙබ් අඩවියක ආරක්ෂක ගැටළුවක් ඇත්නම්, එය එකම පරිශීලකයෙකු ලෙස ක්‍රියාත්මක වන සෑම වෙබ් අඩවියකටම පැතිර යා හැකිය. දත්ත සමුදා පිවිසුම් තොරතුරු ඇතුළුව පරිශීලකයා දකින සෑම දෙයක්ම ප්‍රහාරකයාට දැකිය හැකි අතර පරිශීලකයාට ලිඛිත අවසර ඇති සෑම වෙබ් අඩවියක්ම වෙනස් කළ හැකිය.

  • SSH ගොනු හුවමාරු ප්‍රොටොකෝලය (SFTP) භාවිතා කරන්න . ආරක්ෂාව සඳහා FTP භාවිතා කිරීම අතහැර දැමිය යුතු අතර (එය මුරපද සහ අන්තර්ගතය සරල පා text යෙන් යවන බැවින්), එය ආරක්ෂිත ආදේශක SFTP සතුව සහයෝගී වෙබ් සංවර්ධනය සඳහා කදිම විසඳුමක් වන අංගයක් ද ඇත.

    ඔබ වෙබ් අඩවි හුදකලා කළ පසු සහ එක් වෙබ් අඩවියකට එක් පරිශීලකයෙකු වූ පසු, ඔබේ වෙබ් සංවර්ධකයින්ට ප්‍රවේශය ලබා දිය යුතුය, මෙම ප්‍රශ්නය කුමක් ද යන්න. මෙම වෙබ් අඩවි භාවිතා කරන්නන් සඳහා මුරපද ලබා දෙනවා වෙනුවට - හෝ මුලින් යෝජනා කළ පරිදි ඔවුන්ගේ පුද්ගලික පරිශීලක ගිණුම් භාවිතා කර අඩවි ලිපිගොනු වෙත ප්‍රවේශ වීම - ඔබට පිවිසීම සඳහා SSH යතුරු භාවිතා කළ හැකිය .

    සෑම සංවර්ධකයෙකුටම යතුරුපුවරුව ජනනය කර පුද්ගලික යතුර රහසක් ලෙස තබා ගත හැකිය. ඉන්පසු, ~/.ssh/authorized_keysසංවර්ධකයා වැඩ කරන සෑම වෙබ් අඩවි පරිශීලක ගිණුමක් සඳහාම පොදු යතුර ගොනුවට එක් කරනු ලැබේ. මුරපද සහ පිවිසුම් කළමනාකරණය සඳහා මෙය බොහෝ වාසි ඇත:

    • සෑම සංවර්ධකයෙකුටම ඕනෑම වෙබ් අඩවි ගණනකට ප්‍රවේශය නොමැතිව පරිශීලකයාට එක් එක් වෙබ් අඩවිය සැකසීමට සම්බන්ධ සියලුම මුරපද මතක තබා ගැනීමට හෝ ගබඩා කිරීමට හැකිය.

    • යමෙකු සමාගමෙන් ඉවත් වන සෑම අවස්ථාවකම මුරපද වෙනස් කිරීමට හා බෙදා ගැනීමට අවශ්‍ය නොවේ.

    • ඔබට ඉතා ශක්තිමත් මුරපද භාවිතා කිරීමට හෝ මුරපද පදනම් කරගත් පිවිසුම සම්පූර්ණයෙන්ම අක්‍රිය කළ හැකිය.

  • PHP-FPM භාවිතා කරන්න . PHP භාවිතා කරන්නා ලෙස ක්‍රියාත්මක කිරීම සඳහා වර්තමාන ප්‍රවේශය එයයි. සෑම පරිශීලකයෙකුටම එනම් සෑම වෙබ් අඩවියකටම එක් තටාකයක් සඳහා නව තටාකයක් සාදන්න . ආරක්ෂාව සහ ක්‍රියාකාරීත්වය යන දෙකටම මෙය හොඳම වේ, එක් වෙබ් අඩවියකට කොපමණ සම්පත් ප්‍රමාණයක් පරිභෝජනය කළ හැකිද යන්න ඔබට නියම කළ හැකිය.

    උදා: නෙවර් එන්ඩිං සෙකියුරිටීස් හි වෙනම පරිශීලක / යූඩ් සහ ලිනක්ස් හි කණ්ඩායමක් සමඟ php-fpm ධාවනය කරන්න . උබුන්ටු 16.04 හි Apache සමඟ HowtoForge's PHP-FPM භාවිතා කිරීම වැනි නිබන්ධන ඇත , එය පරිශීලක වෙන්වීම තුළින් ආරක්ෂාව වැඩි කිරීම සඳහා PHP-FPM භාවිතා නොකරයි, සේවාදායකය හරහා තනි FPM සොකට් එකක් භාවිතා කිරීමට මග පෙන්වයි.

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.