PHP တွင် PHP တွင် socket_set_stion ကို အသုံးပြုသောပရိုဂရမ်းမင်းကွန်ယက်များသည်အလွန်အရေးကြီးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ developer များကမူကွဲပြားခြားနားသောဆက်သွယ်ရေးလိုအပ်ချက်များနှင့်တွေ့ဆုံရန် Sockets အတွက်ရွေးချယ်စရာများကိုရွေးချယ်ခွင့်ပြုသည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဤလုပ်ဆောင်မှုကို အသုံးပြု. socket options များကိုသတ်မှတ်သည့်အခါအထူးသဖြင့်ဆာဗာဝန်းကျင်သို့မဟုတ်ဒေသဖွံ့ဖြိုးရေးကာလအတွင်းခွင့်ပြုချက်နှင့်သက်ဆိုင်သောအမှားများကိုသင်မကြာခဏတွေ့လေ့ရှိသည်။ ဤဆောင်းပါးသည်ဤဘုံခွင့်ပြုချက်အမှားများကိုဆန်းစစ်။ သက်ဆိုင်ရာဖြေရှင်းနည်းများကိုထောက်ပံ့ပေးသည်။
ဒါကအသုံးအများဆုံးအမှားတွေထဲကတစ်ခုပါ။ အမှားကုဒ် [13] သည် "ခွင့်ပြုချက်" ကိုဆိုလိုသည်, ဆိုလိုသည်မှာခွင့်ပြုချက်ကိုငြင်းပယ်သည်။ so_broadcast သို့မဟုတ် so_reuserport ကဲ့သို့သော system-protected socient options အချို့ကိုသတ်မှတ်ရန်ကြိုးစားသည့်အခါ၎င်းသည်များသောအားဖြင့်ဖြစ်လေ့ရှိသည်။
IP_HDRICL ကို မူလ socket အတွက် Op_Hdrincl အတွက်ရွေးချယ်စရာများကိုသတ်မှတ်ရန်ကြိုးစားသောအခါ script တွင် script တွင်လုံလောက်သောခွင့်ပြုချက်မရှိပါက (ဥပမာ root as Uss-root မပြေးပါ) ကိုစနစ်ကတားမြစ်လိမ့်မည်။
Selinux (သို့) Apparmor စသည့်လုံခြုံရေးဆိုင်ရာညှိနှိုင်းမှုများကိုတင်းတင်းကျပ်ကျပ် configured security module များနှင့်အတူစနစ်များတွင်မူဝါဒကန့်သတ်ချက်များကြောင့်အချို့သော socket options များကိုသတ်မှတ်မည်မဟုတ်ပါ။
PHP-FPM (သို့) CLI ကိုအခွင့်အလမ်းမရှိသောအသုံးပြုသူအနေဖြင့်အသုံးပြုသည် ။
ကန့်သတ်ထားသည့် port သို့မဟုတ် broadcast address သို့ - 1024 အောက်ရှိဆိပ်ကမ်းသို့ port ကိုအသုံးပြုသည့်အခါ operating system ကို အသုံးပြု. operating system operating system operating system သည်အသုံးပြုသောအသုံးပြုသူများကိုအသုံးပြုရန်ကန့်သတ်နိုင်သည်။
DEGHEER သို့မဟုတ်ကန့်သတ်ကွန်တိန်နာတွင်ပါ 0 င်ပါ ။
၎င်းကိုလက်ခံနိုင်ဖွယ်ရှိပါက၎င်းကို script ကိုဖွင့်ရန်ခွင့်ပြုချက်ကိုတိုးမြှင့်ခြင်းဖြင့်ဖြေရှင်းနိုင်သည်။
sudo php your_script.php
သို့မဟုတ်အသုံးပြုသူများကို PHP ကို PHP ကိုအခွင့်အလမ်းများဖြင့်အသုံးပြုခွင့်ပြုရန်ဝက်ဘ်ဝန်ဆောင်မှုကို configure လုပ်ပါ။
CLI script များအရအသုံးပြုသောအသုံးပြုသူများကို php scripts များကိုစကားဝှက်မ 0 င်ဘဲ PHP scripts များကိုအသုံးပြုခွင့်ပြုရန်အတွက် / etc / sudoers များကို configure / sudoers များကို configure လုပ်နိုင်သည်။
username ALL=(ALL) NOPASSWD: /usr/bin/php /path/to/your_script.php
မူရင်း packet ကိုပို့ရန်လိုအပ်သည့် Socket Operations များအတွက် PHP executable ကိုလိုအပ်သောခွင့်ပြုချက်ပေးနိုင်သည်။
sudo setcap cap_net_raw+ep /usr/bin/php
ဤနည်းအားဖြင့် Php script တစ်ခုလုံးကို root အဖြစ် run ရန်မလိုပါ, သို့သော်သင်လိုအပ်သော socket operations များကိုလုပ်ဆောင်နိုင်သေးသည်။
Selinux သို့မဟုတ် apparmor enable လုပ်ထားသည့်စနစ်များအတွက်လုံခြုံရေးမူဝါဒသည် socket တွင်အချို့သောလုပ်ငန်းများပိတ်ဆို့ခြင်းရှိမရှိစစ်ဆေးပါ။ အောက်ပါ command ကိုလိုက်နာခြင်းဖြင့် Selinux မှတ်တမ်းများကိုစစ်ဆေးနိုင်သည်။
sudo ausearch -m avc -ts recent
apparmor အတွက် / var / log / syslog အတွက်သက်ဆိုင်ရာကန့်သတ်ထားသည့်မှတ်တမ်းများကိုသင်ကြည့်ရှုရန်လိုအပ်သည်။
ဥပမာအားဖြင့်, root permissions လိုအပ်တာကိုရှောင်ရှားရန် Service Port ကို 1024 အထက်သို့ချိန်ညှိပါ -
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 12345); // Unprivileg ports များကိုအသုံးပြုခြင်း
တစ်ခါတစ်ရံ Socket Soccare သည်မလိုအပ်ပါ။ ဥပမာ - So_Broadcast သည် UDP ဆက်သွယ်မှုများတွင်လုံးဝလျစ်လျူရှုနိုင်သည့် UDP ဆက်သွယ်မှုအတွက်သာအသုံးပြုသည်။
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1); // တကယ်လိုအပ်ရင်သာသတ်မှတ်ပါ
ခွင့်ပြုချက်နှင့်သက်ဆိုင်သောအမှားများကိုဖြေရှင်းသည့်အခါအသေးစိတ်အမှားမှတ်တမ်း output ကို enable လုပ်ရန်အကြံပြုသည်။
error_reporting(E_ALL);
ini_set('display_errors', 1);
ထို့အပြင်အခြေအနေများပိုမိုများပြားသောသတင်းအချက်အလက်များရရှိရန်အတွက်စနစ်မှတ်တမ်းများ (ဥပမာ / var / log / syslog /var/log/php-fpm.log ) ကိုပေါင်းစပ်ပါ။
ထို့အပြင်သင်၏ Code သို့ debug အချက်အလက်ထည့်သွင်းခြင်းဖြင့်ပြ problems နာများကိုရှာဖွေရန်သင်ကူညီနိုင်သည်။
if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo "Set option failed: " . socket_strerror(socket_last_error($socket)) . PHP_EOL;
}
အများအားဖြင့်ခွင့်ပြုချက်အမှားများကိုများသောအားဖြင့် system permissions များ, လုံခြုံရေးမူဝါဒန့် က န့်သတ်ချက်များ, ဤပြ problem နာအမျိုးအစားသည် Excover Permissions တိုးတက်အောင်ပြုလုပ်ခြင်း,
ထုတ်လုပ်မှုပတ် 0 န်းကျင်များတွင် PHP scripts များဖွ င့ ်ရန် root permissions များကိုအသုံးပြုခြင်းကိုရှောင်ကြဉ်ပါ။ အကယ်. သင်သည်အမှန်တကယ်စီမံကိန်းများတွင်ထုတ်လွှင့်ခြင်းသို့မဟုတ် port အနိမ့်သောဆက်သွယ်ရေးကိုအကောင်အထည်ဖော်လိုပါကနမူနာကုဒ်နှင့် https:/gitbox.net/phip -socscs/php-socketsocket-boadcast ၏လက်တွေ့အတွေ့အကြုံနှင့်လက်တွေ့အတွေ့အကြုံများကိုသင်ရည်ညွှန်းနိုင်သည်။