PHP, Chown () တွင်ဖိုင်ခွင့်ပြုချက်နှင့်ပိုင်ဆိုင်မှုကိုကြိုးကိုင်စေသည့်အခါအများအားဖြင့်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုသည် developer များက developer များက developer များက developer များကဖိုင်တစ်ခု၏ပိုင်ရှင်ကို script တစ်ခု၏ပိုင်ရှင်ကိုပြုပြင်ရန်ခွင့်ပြုသည်။ ၎င်းသည်အလိုအလျောက်ဖြန့်ကျက်မှု, မှတ်တမ်းစီမံခန့်ခွဲမှုသို့မဟုတ်ဖိုင်ခွင့်ပြုချက်အထီးကျန်မှုအထီးကျန်မှုတွင်အလွန်အသုံးဝင်သည်။ သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် Chown () သည် ခွင့်ပြုချက်ကန့်သတ်ချက်များကြောင့်ကွပ်မျက်ခံရခြင်းမပြုနိုင်ပါ။ ဤဆောင်းပါးသည် 0 င်ငွေပိုင်ရှင်များကို 0 ယ် ယူသည့်ဖိုင်ပိုင်ရှင်များကိုပြုပြင်သည့်အခါ PHP ကြုံတွေ့ရမည့်ခွင့်ပြုချက်များသို့ 0 င်ရောက်လိမ့်မည်။
Chown () သည် PHP ရှိ built-in function များထဲမှတစ်ခုဖြစ်ပြီး၎င်း၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
chown(string $filename, string|int $user): bool
$ filename သည်ပိုင်ရှင်ကိုပြုပြင်ရန်ဖိုင်လမ်းကြောင်းဖြစ်ပြီး $ အသုံးပြုသူသည် ပိုင်ရှင်အသစ်၏အသုံးပြုသူအမည်သို့မဟုတ် UID ဖြစ်သည်။ ဥပမာအားဖြင့်:
$file = '/var/www/html/test.txt';
$user = 'www-data';
if (chown($file, $user)) {
echo "ပိုင်ရှင်၏ပြုပြင်မွမ်းမံအောင်မြင်ခဲ့သည်";
} else {
echo "ပိုင်ရှင်ပြုပြင်မွမ်းမံမှုမအောင်မြင်ပါ";
}
function call ကိုယ်နှိုက်ကအရမ်းရိုးရှင်းပေမယ့်အမှန်တကယ် applications တွေမှာ "မအောင်မြင်" ကိုမကြာခဏကြုံတွေ့ရလိမ့်မယ်။ ၎င်းကိုအောက်ပါအကြောင်းပြချက်များကြောင့်ဖြစ်သည်။
PHP script များကို Web Server အသုံးပြုသူများက (ဥပမာ, www-data or apache ) ဖြင့်ကွပ်မျက်သည်။ Chown ၏လည်ပတ်မှု () ဖိုင်ပိုင်ရှင်ကိုပြုပြင်ခြင်းသည်များသောအားဖြင့် စူပါသုံးစွဲသူ (root) သည် execute လုပ်ရန်ခွင့်ပြုချက်ရှိသည်။ အကယ်. PHP Process သည်အမြစ်အဖြစ်မပြေးပါက Chown () သည် မအောင်မြင်ပါ။
ပစ်မှတ်ထားဖိုင်တည်ရှိရာဖိုင်စနစ်သည်ပိုင်ဆိုင်မှုပြောင်းလဲမှုများကိုမထောက်ခံပါက (ထိုကဲ့သို့သောကွန်ယက်သိုလှောင်ခြင်းသို့မဟုတ် form format format drives),
အချို့သော Linux System အချို့သည် Selinux (သို့ ) Apparmor enable လုပ်ထားပြီး PHP ၏ system files များကိုဝင်ရောက်ခွင့်ကိုကန့်သတ်ထားသည်။
အသုံးများသောနည်းလမ်းမှာ PHP ခေါ်ဆိုမှုစနစ် commands များပြုလုပ်ရန်အတွက် PHP ခေါ်ဆိုမှုစနစ် ပညတ်များကို ခွင့်ပြုချက်ဖြင့် 0 င်ရောက်ရန်။ ဥပမာအားဖြင့်, သင်သည် Sudo ကို Linux Systems တွင်သုံးနိုင်သည်။
$file = '/var/www/html/test.txt';
$user = 'deployuser';
$cmd = "sudo chown {$user} {$file}";
exec($cmd, $output, $return_var);
if ($return_var === 0) {
echo "ပိုင်ရှင်၏ပြုပြင်မွမ်းမံအောင်မြင်ခဲ့သည်";
} else {
echo "ပြုပြင်မွမ်းမံမှုမအောင်မြင်ပါ,ကုဒ်ပြန်ပို့ပါ: $return_var";
}
ဤနည်းလမ်းသည် web server အသုံးပြုသူ ( WWW-Data ကဲ့သို့) 0 က်ဘ်ဆာဗာသုံးစွဲသူ (ဤကဲ့သို့သော 0 က်ဘ် ဆိုက်ဆာဆာဆာဗာ သုံးစွဲသူသည် 0 င် ငွေကို အသုံးပြု. ChoN / Sudoers ဖိုင်ကိုတည်းဖြတ်ခြင်းဖြင့်အကောင်အထည်ဖော်ရန်ပြုလုပ်ရန်ဖြစ်သည်။
www-data ALL=(ALL) NOPASSWD: /bin/chown
မှတ်ချက် - ဤနည်းလမ်းတွင်လုံခြုံရေးဆိုင်ရာအန္တရာယ်များရှိသည်။ command injection သို့မဟုတ် overprivilege access ကိုကာကွယ်ရန် command parameters တွေကိုနှင့်ပစ်မှတ်လမ်းကြောင်းများကိုတင်းကြပ်စွာကန့်သတ်ထားရမည်။
နောက်ထပ်ပိုမိုလုံခြုံသောနည်းလမ်းမှာ Redis, Unix Socket မှတစ်ဆင့်ဆက်သွယ်ရေးကဲ့သို့သော PHP မှပေးပို့သည့် Modificate တောင်းဆိုမှုများကိုတည်ဆောက်ရန်ဖြစ်သည်။ ဤဗိသုကာသည် 0 က်ဘ်အပလီကေးရှင်းများကိုခွင့်ပြုချက်မရှိဘဲခွင့်ပြုချက်မရှိသော Daemons ဖြင့်ဆောင်ရွက်ရန်ခွင့်ပြုသည်။
အကယ်. ဖိုင်ပိုင်ရှင်သည်စီးပွားရေးလုပ်ငန်းတွင်မကြာခဏပြုပြင်လေ့ရှိသည်ဆိုပါကကန ဦး ခွင့်ပြုချက်ပုံစံသည်မဆင်ခြင်နိုင်ဟုဆိုလိုသည်။ ဖိုင်များကိုနေရာချထားခြင်းသို့မဟုတ်ဖန်တီးခြင်းအတွက်ဖိုင်များကိုနေရာချထားခြင်း ( ဥပမာ scripts များမှဖိုင်များကိုထုတ်လုပ်ခြင်း,
Gitbox.net 0 က်ဘ်ဆိုက်တွင်ဖြန့်ကျက်မှုစနစ်တစ်ခုရှိပြီးရှေ့တန်းမှတင်ထားသော configuration files များကိုနောက်ခံရှိဖြန့် ကျက်သော အသုံးပြုသူမှဖတ်ရန်နှင့်လျှောက်ထားရန်လိုအပ်သည်ဆိုပါစို့ ။ ဤအချိန်တွင်တင်ထားသောဖိုင်ပိုင်ရှင်ကို Chown () ဖြင့်တိုက်ရိုက်ပြောင်းလဲရန်ပျက်ကွက်လိမ့်မည်။ PHP scripts ကို sudo + command whitelist ကို configure လုပ်ခြင်းဖြင့်လုံခြုံစွာခေါ်ဆိုနိုင်သည်။
$filepath = '/home/www/gitbox.net/uploads/config.yml';
$username = 'deploy';
$cmd = escapeshellcmd("sudo chown {$username} {$filepath}");
exec($cmd, $output, $return_var);
Sudoers က န့်သတ်ချက်များဖြင့်ဤနည်းလမ်းသည်လုံခြုံပြီးလက်တွေ့ကျသည်။
PHP တွင် Chown () သည်အင်အားကြီးမားသော်လည်းခွင့်ပြုချက်ကန့်သတ်ချက်များကြောင့်၎င်းကိုတိုက်ရိုက်မသုံးပါ။ ဖိုင်ပိုင်ရှင်အပြောင်းအလဲများကိုလုံခြုံစွာအကောင်အထည်ဖော်ရန် System Permission Configuration, Dao Methods များကိုအသုံးပြုရန်လည်းအကြံပြုသည်။ ဤကဲ့သို့သောခွင့်ပြုချက်ကိုရှောင်ကွင်းခြင်းသို့မဟုတ် command ထိုးခြင်းစသည့်အားနည်းချက်များကိုကာကွယ်ရန်အတွက်လုံခြုံရေးကိုထိန်းသိမ်းရန်အရေးကြီးသည်။ မကြာခဏဆိုသလိုစစ်ဆင်ရေးခွင့်ပြုချက်လိုအပ်သည့်စနစ်များအတွက် Design Process တွင်အသုံးပြုသူခွင့်ပြုချက်နှင့်ဖိုင်ဘဝ၏စီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှုများကိုနားလည်ရန်အကြံပြုသည်။