လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Chole ကိုအသုံးပြုပြီးဖိုင်ပိုင်ရှင်များကိုပြုပြင်သည့်အခါအာရုံစိုက်ရမည့်ခွင့်ပြုချက်ပြ issues နာများ

Chole ကိုအသုံးပြုပြီးဖိုင်ပိုင်ရှင်များကိုပြုပြင်သည့်အခါအာရုံစိုက်ရမည့်ခွင့်ပြုချက်ပြ issues နာများ

gitbox 2025-06-03

PHP, Chown () တွင်ဖိုင်ခွင့်ပြုချက်နှင့်ပိုင်ဆိုင်မှုကိုကြိုးကိုင်စေသည့်အခါအများအားဖြင့်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုသည် developer များက developer များက developer များက developer များကဖိုင်တစ်ခု၏ပိုင်ရှင်ကို script တစ်ခု၏ပိုင်ရှင်ကိုပြုပြင်ရန်ခွင့်ပြုသည်။ ၎င်းသည်အလိုအလျောက်ဖြန့်ကျက်မှု, မှတ်တမ်းစီမံခန့်ခွဲမှုသို့မဟုတ်ဖိုင်ခွင့်ပြုချက်အထီးကျန်မှုအထီးကျန်မှုတွင်အလွန်အသုံးဝင်သည်။ သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် Chown () သည် ခွင့်ပြုချက်ကန့်သတ်ချက်များကြောင့်ကွပ်မျက်ခံရခြင်းမပြုနိုင်ပါ။ ဤဆောင်းပါးသည် 0 င်ငွေပိုင်ရှင်များကို 0 ယ် ယူသည့်ဖိုင်ပိုင်ရှင်များကိုပြုပြင်သည့်အခါ PHP ကြုံတွေ့ရမည့်ခွင့်ပြုချက်များသို့ 0 င်ရောက်လိမ့်မည်။

1 ။ Chown () function ကို၏အခြေခံအသုံးပြုမှု

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 "ပိုင်ရှင်ပြုပြင်မွမ်းမံမှုမအောင်မြင်ပါ";
}

2 ။ ဘုံခွင့်ပြုချက်ပြ issues နာများ

function call ကိုယ်နှိုက်ကအရမ်းရိုးရှင်းပေမယ့်အမှန်တကယ် applications တွေမှာ "မအောင်မြင်" ကိုမကြာခဏကြုံတွေ့ရလိမ့်မယ်။ ၎င်းကိုအောက်ပါအကြောင်းပြချက်များကြောင့်ဖြစ်သည်။

1 ။ ဇာတ်ညွှန်းခွင့်ပြုချက်မလုံလောက်ပါ

PHP script များကို Web Server အသုံးပြုသူများက (ဥပမာ, www-data or apache ) ဖြင့်ကွပ်မျက်သည်။ Chown ၏လည်ပတ်မှု () ဖိုင်ပိုင်ရှင်ကိုပြုပြင်ခြင်းသည်များသောအားဖြင့် စူပါသုံးစွဲသူ (root) သည် execute လုပ်ရန်ခွင့်ပြုချက်ရှိသည်။ အကယ်. PHP Process သည်အမြစ်အဖြစ်မပြေးပါက Chown () သည် မအောင်မြင်ပါ။

2 ။ ဖိုင်စနစ်ကန့်သတ်ချက်များ

ပစ်မှတ်ထားဖိုင်တည်ရှိရာဖိုင်စနစ်သည်ပိုင်ဆိုင်မှုပြောင်းလဲမှုများကိုမထောက်ခံပါက (ထိုကဲ့သို့သောကွန်ယက်သိုလှောင်ခြင်းသို့မဟုတ် form format format drives),

3 ။ Selinux / ပရိုဂရမ်လုံခြုံရေးမူဝါဒကန့်သတ်ချက်များ

အချို့သော Linux System အချို့သည် Selinux (သို့ ) Apparmor enable လုပ်ထားပြီး PHP ၏ system files များကိုဝင်ရောက်ခွင့်ကိုကန့်သတ်ထားသည်။

3 ။ ဖြေရှင်းနည်း

1 ။ command line ကို သုံး. (သွယ်ဝိုက်သောရှောင်ကွင်းခွင့်ခွင့်ပြုခြင်း) ကို အသုံးပြု. Execute လုပ်ပါ။

အသုံးများသောနည်းလမ်းမှာ 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 တွေကိုနှင့်ပစ်မှတ်လမ်းကြောင်းများကိုတင်းကြပ်စွာကန့်သတ်ထားရမည်။

2 ။ ခွင့်ပြုချက်ကိုကိုင်တွယ်ရန် daemon ကိုသုံးပါ

နောက်ထပ်ပိုမိုလုံခြုံသောနည်းလမ်းမှာ Redis, Unix Socket မှတစ်ဆင့်ဆက်သွယ်ရေးကဲ့သို့သော PHP မှပေးပို့သည့် Modificate တောင်းဆိုမှုများကိုတည်ဆောက်ရန်ဖြစ်သည်။ ဤဗိသုကာသည် 0 က်ဘ်အပလီကေးရှင်းများကိုခွင့်ပြုချက်မရှိဘဲခွင့်ပြုချက်မရှိသော Daemons ဖြင့်ဆောင်ရွက်ရန်ခွင့်ပြုသည်။

3 ။ exits ကိုစောစီးစွာ: ကျိုးကြောင်းဆီလျော်ဖိုင်ခွင့်ပြုချက်ကို configure

အကယ်. ဖိုင်ပိုင်ရှင်သည်စီးပွားရေးလုပ်ငန်းတွင်မကြာခဏပြုပြင်လေ့ရှိသည်ဆိုပါကကန ဦး ခွင့်ပြုချက်ပုံစံသည်မဆင်ခြင်နိုင်ဟုဆိုလိုသည်။ ဖိုင်များကိုနေရာချထားခြင်းသို့မဟုတ်ဖန်တီးခြင်းအတွက်ဖိုင်များကိုနေရာချထားခြင်း ( ဥပမာ scripts များမှဖိုင်များကိုထုတ်လုပ်ခြင်း,

4 ။ အမှန်တကယ်ကိစ္စတွင်ခွဲခြမ်းစိတ်ဖြာခြင်း

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 က န့်သတ်ချက်များဖြင့်ဤနည်းလမ်းသည်လုံခြုံပြီးလက်တွေ့ကျသည်။

5 ။ အကျဉ်းချုပ်

PHP တွင် Chown () သည်အင်အားကြီးမားသော်လည်းခွင့်ပြုချက်ကန့်သတ်ချက်များကြောင့်၎င်းကိုတိုက်ရိုက်မသုံးပါ။ ဖိုင်ပိုင်ရှင်အပြောင်းအလဲများကိုလုံခြုံစွာအကောင်အထည်ဖော်ရန် System Permission Configuration, Dao Methods များကိုအသုံးပြုရန်လည်းအကြံပြုသည်။ ဤကဲ့သို့သောခွင့်ပြုချက်ကိုရှောင်ကွင်းခြင်းသို့မဟုတ် command ထိုးခြင်းစသည့်အားနည်းချက်များကိုကာကွယ်ရန်အတွက်လုံခြုံရေးကိုထိန်းသိမ်းရန်အရေးကြီးသည်။ မကြာခဏဆိုသလိုစစ်ဆင်ရေးခွင့်ပြုချက်လိုအပ်သည့်စနစ်များအတွက် Design Process တွင်အသုံးပြုသူခွင့်ပြုချက်နှင့်ဖိုင်ဘဝ၏စီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှုများကိုနားလည်ရန်အကြံပြုသည်။