Chown ($ filmename, string ကို strings, strings | string ကို trand user) - သတ်မှတ်ထားသောဖိုင်သို့မဟုတ် directory ၏ပိုင်ရှင်ကိုပြောင်းလဲရန်အတွက် bool function ကိုအသုံးပြုသည်။ ၎င်းကိုဖိုင်မှတ်တမ်းတင်ခြင်းအပြီးတွင်၎င်း၏ပိုင်ဆိုင်မှုကိုပြုပြင်မွမ်းမံခြင်းကဲ့သို့သောအခြေအနေများကိုပုံမှန်ပြုပြင်ပြောင်းလဲရန်လိုအပ်သည့်အခြေအနေတွင်အသုံးပြုသည်။
နမူနာကုဒ်:
<?php
$file = '/path/to/file.txt';
$user = 'www-data'; // ပိုင်ရှင်အသစ်အသုံးပြုသူအမည်
if (chown($file, $user)) {
echo "ဖိုင်ပိုင်ရှင်ကိုပြောင်းထားသည် {$user}";
} else {
echo "ပြောင်းလဲထားသောဖိုင်ပိုင်ရှင်မအောင်မြင်ပါ";
}
?>
ခွင့်ပြုချက်မလုံလောက်
Chown () function သည်လုံလောက်သောခွင့်ပြုချက်လိုအပ်သည်။ ယေဘုယျအားဖြင့် Superuser (root) သည်ပိုင်ရှင်ကိုပြောင်းလဲနိုင်သည်။ အကယ်. လက်ရှိတွင် PHP script ကို run နေသောအသုံးပြုသူသည် root မဟုတ်ပါကစနစ်သည်ခွင့်ပြုချက်များကိုငြင်းပယ်လိမ့်မည်။
ဖိုင်စနစ်ကန့်သတ်ချက်များ
အချို့သောဖိုင်စနစ်များ (ဥပမာ NFS, FAT32 ကဲ့သို့သောရွေးချယ်စရာများ) မှတစ်ဆင့်ဖိုင်ပိုင်ရှင်များကိုပြောင်းလဲခြင်းသည်ဖိုင်ပိုင်ရှင်အားပြောင်းလဲခြင်းကိုမထောက်ပံ့ပါ ။
လုံခြုံရေး Module ကန့်သတ်ချက်များ
လုံခြုံရေးဆိုင်ရာ module များသည် (Selinux, Apparmor စသည်) ကိုဆာဗာတွင်ဖွင့်ထားနိုင်ပြီးဖိုင်ပိုင်ရှင်ကိုပြောင်းလဲစေနိုင်သည်။
PHP Configuration ကန့်သတ်ချက်များ
PHP operating ပတ် 0 န်းကျင်သို့မဟုတ်လုံခြုံရေးမူဝါဒများ (ထိုကဲ့သို့သော open_basedir က န့်သတ်ချက်များကဲ့သို့) သည်ခွင့်ပြုချက်မလုံလောက်ခြင်းများကိုသွယ်ဝိုက်။ ဖြစ်စေနိုင်သည်။
PHP လည်ပတ်နေသောပတ် 0 န်းကျင်ရှိသုံးစွဲသူများသည် 0 င်ငွေ ကိုသယ်ဆောင်ရန်ခွင့်ပြုချက်ရှိသည်။ ထုတ်လုပ်မှုပတ် 0 န်းကျင်အတွက်အောက်ပါနည်းလမ်းများကိုအသုံးပြုနိုင်သည်။
Sudo ကို cli mode မှာသုံးပါ
sudo -u root php script.php
System Schedule Task (CROS) ကိုအသုံးပြုပြီး root ote အဖြစ် Execute လုပ်ပါ။
လိုအပ်ပါက PHP-FPM သို့မဟုတ်ဝက်ဘ်ဆာဗာ၏အသုံးပြုသူများကိုချိန်ညှိပါ
ChoN () ကို မသုံးနိုင်ပါကအောက်ပါရွေးချယ်စရာတစ်ခုကိုသင်စဉ်းစားနိုင်သည်။
ပိုင်ရှင်အစားခွင့်ပြုချက်ကိုချိန်ညှိရန် chmod () ကိုသုံးပါ။
chmod($file, 0644);
ပြင်ပ shell ကို command များမှတဆင့် execute (ခွင့်ပြုချက်ရရှိနိုင်ပါသည်)
exec("sudo chown www-data " . escapeshellarg($file));
မှတ်စု: EXICE () ကို အသုံးပြုသည့်အခါ command injection ကိုကာကွယ်ရန်လုံခြုံမှုကိုသေချာစေရန်သေချာပါစေ။
ဖိုင်သည် 0 င်ငွေများကိုတည်နေရာတည်ရှိရာအခန်းက န့် ရှိ, မရှိကိုအတည်ပြုပါ။ အကယ်. Mountain အတွင်းခွင့်ပြုချက်ကိုကန့်သတ်ထားပါကပြန်စဉ်းစားပါ။
mount -o remount,defaults /mount/point
သို့မဟုတ်ခွင့်ပြုချက်စစ်ဆင်ရေးကိုထောက်ပံ့သောဖိုင်စနစ်ကိုသုံးပါ။
အကယ်. ဆာဗာသည် Selinux သို့မဟုတ် apparmor enable လုပ်ထားပါကစည်းမျဉ်းများကိုခေတ္တပိတ်ထားနိုင်သည်သို့မဟုတ်ချိန်ညှိနိုင်သည်။
Selinux ကိုပိတ်ပါ
setenforce 0
Chown စစ်ဆင်ရေးခွင့်ပြုရန်သက်ဆိုင်ရာလုံခြုံရေးမူဝါဒများညှိပါ
Chown (): စစ်ဆင်ရေးသည်ခွင့်ပြုထားသော အမှားများကိုများသောအားဖြင့်ခွင့်ပြုချက်မလုံလောက်ခြင်းကြောင့်ဖြစ်သည်။ PHP script တည်ရှိနေသောအသုံးပြုသူသည်ဖိုင်ပိုင်ရှင်ကိုပြောင်းလဲရန်လုံလောက်သောခွင့်ပြုချက်ရှိရမည်။ ယေဘုယျအားဖြင့် PHP process များသည်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်အမြစ်နှင့်တိုက်ရိုက်ဆက်သွယ်လိမ့်မည်မဟုတ်ပါ။ လုပ်ငန်းများကိုစီစဉ်ခြင်းသို့မဟုတ်ပြင်ပပညတ်များမှတစ်ဆင့် sudo နှင့်စစ်ဆင်ရေးများကိုလုပ်ဆောင်ရန်အကြံပြုသည်။
တစ်ချိန်တည်းမှာပင်ဖိုင်စနစ်အမျိုးအစားများနှင့်လုံခြုံရေး module များကိုခွင့်ပြုချက်ကန့်သတ်ချက်များကိုဂရုပြုရန်နှင့်အမှန်တကယ်အခြေအနေများအပေါ် အခြေခံ. သင့်လျော်သောဖြေရှင်းနည်းများကိုရွေးချယ်ရန်လိုအပ်သည်။
<?php
$file = '/path/to/file.txt';
$user = 'www-data';
if (!file_exists($file)) {
die("ဖိုင်မတည်ရှိပါဘူး");
}
if (@chown($file, $user)) {
echo "ဖိုင်ပိုင်ရှင်အောင်မြင်စွာပြုပြင်ပြီးပြီ {$user}";
} else {
$error = error_get_last();
echo "ပိုင်ရှင်ပြုပြင်မွမ်းမံမှုမအောင်မြင်ပါ,အမှားသတင်းစကား: " . ($error['message'] ?? 'အမည်မသိအမှား');
}
?>