С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 31/03/17 в 21:44 |
В скрипте участок проверки изменения пермишенс
Берется значение перм.., до изменяются и берется после. Изменения происходят по факту. но после берется значение которое равно до. Не могу раздулпить. Уже пробовал Sleep (1); делать, думал может система ставить какое то время и берутся старые.
EX. вывод лога: где значение для новых прав
File: fancybox/blank.gif 755 0666 ----> 0666 NOT REPLACE PERMISSSION-
File: fancybox/fancy_close.png 755 0666 ----> 0666 NOT REPLACE PERMISSSION-
Хотя по уму должно
File: fancybox/fancy_close.png 755 0666 ----> 0755 OK
Код: |
$perms1 = substr(sprintf('%o', fileperms($file_name)), -4);
exec('chmod '. $files_chmod ." ".$file_name);
$perms2 = substr(sprintf('%o', fileperms($file_name)), -4);
if ($perms1 == $perms2 )
{
echo "File: " . $file_name . " ". $files_chmod . " ". $perms1 . " ----> ". $perms2 . " NOT REPLACE! <br>";
}
if ($perms1 != $perms2 )
{
echo "File: " . $file_name . " ". $perms1 . " ----> ". $perms2 . " OK <br>";
}
|
Всем заранее благодарен за советы
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 31/03/17 в 23:43 |
Код: |
exec('chmod '. $files_chmod .' '.$file_name, $output, $return);
var_dump($output);
echo($return);
|
что в $output и $return?
возможно у вебсервера нет прав на chmod?
сделай через php chmod ( string $filename , int $mode ) увидишь ошибку сразу, смысл через exec чмодить?
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 01/04/17 в 00:35 |
dizziness: Выводит array(0) {
}
0
File: index.php 666 0755 ----> 0755 NOT REPLACE! <br>
Код: | <?php
$files_chmod = 666;
$file_name = 'index.php';
$perms1 = substr(sprintf('%o', fileperms($file_name)), -4);
exec('chmod '. $files_chmod .' '.$file_name, $output, $return);
//chmod($file_name, $files_chmod = 0666);
var_dump($output);
echo($return);
$perms2 = substr(sprintf('%o', fileperms($file_name)), -4);
if ($perms1 == $perms2 )
{
echo "File: " . $file_name . " ". $files_chmod . " ". $perms1 . " ----> ". $perms2 . " NOT REPLACE! <br>";
}
if ($perms1 != $perms2 )
{
echo "File: " . $file_name . " ". $perms1 . " ----> ". $perms2 . " OK <br>";
}
?> |
На счет же PHP варианта chmod($file_name, $files_chmod);
Да он заменяет, но не во всех каталогах. Возможно это связано с группой к которой принадлежит каталог или файл или надо 777 задать каталогам до замены файлов PHP функцией chomd ((.
Поэтому пошел в лоб через exec - UNIX команду заюзал, она всё топорно заменяет.
Цель была написать замену пермишинс директорий и файлов от корня вверх рекурсивно. На нужные, исключая некоторые файлы и каталоги. Вроде корректно заменяет - вот загвоздка в том что хотел осуществить ещё проверку факта замены на лету, но не получается. Поэтому удалил сейчас эти условия.
Сам скрипт.
Код: | <?php
//Scrypt work with function EXEC !!!
//1. Set Chmods for Dirs and Files
//2. Add or delete STOP Dirs and Files {Files no Set Mods}
//3. Load in Root of http://domain.com/ch.php
//4. Run Scrypt
///INI
$dir_chmod = 777; //Directories format Ex. 777
$files_chmod = 755; //Files format Ex.766
//Propuskaem eti catalogi i files
$stop_dirs = 'cache, tmp'; //No ChMod Dirs ! Add ONE DIR IN STOP Array For Correct... Ex . ZZZZZZZZ;
$stop_files = 'ch.php, a_name_stop.ini, b_name_stop.ini'; //No ChMod Files - 1 or More Files To Correct Work Ex. zzzzzzz.txt
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: " . date("r"));
echo "<h1>", date("H:i:s"), "</h1>";
checkExecFunction();
getDirList();
setPermissionFiles($all_data, $files_chmod, $stop_files, $stop_dirs, $dir_chmod);
setPermissionDirs($all_data, $dir_chmod, $stop_dirs);
echo "OK" . "<br>";
function getDirList()
{
global $all_data;
$dirs_array = glob('*', GLOB_ONLYDIR);
//print_r ( $dirs_array);
foreach ($dirs_array as $work_dir) {
$root_dirs = $root_dirs . ":::" . $work_dir;
$scan_result = makeScanDirs($work_dir);
// echo $scan_result;
}
$all_data = $root_dirs . $all_data;
}
function makeScanDirs($work_dir)
{
global $all_data;
$dirs_array = glob($work_dir . '/*', GLOB_ONLYDIR); {
foreach ($dirs_array as $dir_name) {
makeScanDirs($dir_name);
// echo $dir_name . "\n";
$all_data = $all_data . ':::' . $dir_name;
}
}
}
function setPermissionDirs($all_data, $dir_chmod, $stop_dirs)
{
echo "<h2> DIRS </h2>";
$i = 0;
$dirs = explode(':::', $all_data);
foreach ($dirs as $dir_name) {
$dir_str_size = strlen($dir_name);
// $flag_dir =
if ($dir_str_size > 0) {
$dir_len = strlen($dir_name);
$dir_array[$i] = $dir_len . ':' . $dir_name;
$i++;
}
}
natsort($dir_array);
//print_r ( $dir_array);
$k = 0;
foreach ($dir_array as $new_dr) {
$dir_array_ex = explode(':', $new_dr);
$dir_array_work[$k] = $dir_array_ex[1];
$k++;
}
$z = count($dir_array_work);
$i = 0;
foreach ($dir_array_work as $dir_name_temp) {
$sort_dir_array[$i] = $dir_array_work[$z - 1];
$i++;
$z--;
}
//Chmod
foreach ($sort_dir_array as $directory_name) {
$stop_flag = checkStop($object = $directory_name, $stop_str = $stop_dirs);
if ($stop_flag != "stop") {
exec('chmod ' . $dir_chmod . " " . $directory_name);
echo $directory_name . " " . $dir_chmod . "<br>";
}
if ($stop_flag == "stop") {
echo $directory_name . " NO REPLACE.. OK?" . "<br>";
}
}
}
function setPermissionFiles($all_data, $files_chmod, $stop_files, $stop_dirs, $dir_chmod)
{
echo "<h2> FILES </h2>";
hta_PermReplace($files_chmod, $stop_files);
rootPermReplace($files_chmod, $stop_files);
$dirs = explode(':::', $all_data);
foreach ($dirs as $dir_name) {
$dir_str_size = strlen($dir_name);
$stop_flag = checkStop($object = $dir_name, $stop_str = $stop_dirs);
if ($dir_str_size > 0 and $stop_flag != 'stop') {
// echo $dir_name . "\n";
$perms1 = substr(sprintf('%o', fileperms($dir_name)), -4);
$files_array = glob($dir_name . "/*.*");
foreach ($files_array as $file_name) {
$stop_flag = checkStop($object = $file_name, $stop_str = $stop_files);
if ($stop_flag == 'stop') {
echo $file_name . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != 'stop') {
// echo $file_name . "\n";
$perms1 = substr(sprintf('%o', fileperms($file_name)), -4);
exec('chmod ' . $files_chmod . " " . $file_name);
echo $file_name . " " . $files_chmod . "<br>";
}
}
}
}
}
function checkStop($object, $stop_str)
{
$stop_array = explode(",", $stop_str);
foreach ($stop_array as $stp_component) {
$pos = strpos(" " . $object, trim($stp_component));
if ($pos > 1) {
$flag = 'stop';
// echo $object . "!!!!!!!!!!!!!!!!"."\n" ;
return $flag;
}
}
}
function rootPermReplace($files_chmod, $stop_files)
{
$root_files = array_filter(glob("*"), 'is_file');
//$root_files = glob ('*');
foreach ($root_files as $root_file_name) {
$stop_flag = checkStop($object = $root_file_name, $stop_str = $stop_files);
if ($stop_flag == "stop") {
echo $root_file_name . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != "stop") {
exec('chmod ' . $files_chmod . " " . $root_file_name);
echo $root_file_name . " " . $files_chmod . "<br>";
}
}
}
function hta_PermReplace($files_chmod, $stop_files)
{
$filename = '.htaccess';
if (file_exists($filename)) {
$stop_flag = checkStop($object = $filename, $stop_str = $stop_files);
if ($stop_flag == "stop") {
echo $filename . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != "stop") {
exec('chmod ' . $files_chmod . " " . $filename);
echo $filename . " " . $files_chmod . "<br>";
}
}
}
function checkExecFunction()
{
exec ('ls > exec.txt');
$filename = 'exec.txt';
$flag = "no_exec";
if (file_exists($filename)) {
echo 'Exec function Present in Sever Config! - OK <br>';
echo 'WORK...<br>';
exec ('rm exec.txt');
$flag = "exec";
}
if ($flag == "no_exec")
{
echo "Warning! Activate Exec function or ROOT / Directory not Writable";
exit;
}
}
?>
|
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 01/04/17 в 01:42 |
Int13h: сделай clearstatcache(); после exec()
Цитата: |
Список функций, результаты выполнения которых кешируются: stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().
|
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 01/04/17 в 02:01 |
dizziness: спасибо
помогло, кеш сбросился
задал сменить с 666 на 755 проверка на лету показала замену
File: index.php 0666 ----> 0755 OK
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 01/04/17 в 23:20 |
Int13h писал: | Цель была написать замену пермишинс директорий и файлов от корня вверх рекурсивно. На нужные, исключая некоторые файлы и каталоги. Вроде корректно заменяет - вот загвоздка в том что хотел осуществить ещё проверку факта замены на лету, но не получается. Поэтому удалил сейчас эти условия.
Сам скрипт. |
Хрена себе простыня. Почитай Mastering Unix Shell Scripting и подобные задачи будешь решать в баше 1-строчниками, написанными за минуту.
P.S. Я даже боюсь представить во сколько строчек кода выливаются более-менее серьезные проекты.
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 19/04/17 в 14:01 |
Прошу прощения за поднятую темку. Уж больно интересно пишет ТС
Ну, типа вот этого:
Код: | $all_data = $all_data . ':::' . $dir_name; |
Далее:
Код: | $dirs = explode(':::', $all_data); |
Вот это тоже. Массивы? Не не слышал.
Код: | //Propuskaem eti catalogi i files
$stop_dirs = 'cache, tmp'; //No ChMod Dirs ! Add ONE DIR IN STOP Array For Correct... Ex . ZZZZZZZZ;
$stop_files = 'ch.php, a_name_stop.ini, b_name_stop.ini'; //No ChMod Files - 1 or More Files To Correct Work Ex. zzzzzzz.txt |
Ну можно же было что-то типо того?
Код: |
$excludedDirs = [
'cache',
'tmp',
];
$excludedFiles = [
'ch.php',
'a_name_stop.ini',
'b_name_stop.ini',
];
$excludedExtensions = [
'ini',
'htaccess',
// etc..
];
|
А потом проверять на наличие в массиве того или иного элемента.
Рекурсивный обход директорий без рекурсии функций:
http://php.net/manual/ru/class.recursivedirectoryiterator.php
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 19/04/17 в 15:47 |
Ailk: пффф... массивы... массивы для слабаков, смотри сюда,
Код: | ##105**Наименование товара 1**60 штук**1**2650.00##79**Наименование товара 2**5 штук**1**0.00## |
так хранится корзина заказа в одной работающей партнерке, и это еще не самое худшее в том коде
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 19/04/17 в 16:41 |
Ailk:
1) я же не кодер по специализации, вебмастер
2) время на рефакторинг, поиск функций, классов, фрейморков и тп не было, за час пока импульс был захотел написать на коленке код, что бы закрыть на сайте папки и файлы от вирусни из вне. С лету написал, работает и гуд
На счёт массивов - мне проще через запятую по быстрому в конфиг вписывать потом файлы и папки вот так
Код: | dirs = 'one, xxx, free'; |
сейчас подумал, что конфиг проще ещё может через пробел, что бы ещё быстрее вводить Код: | dirs = 'one xxx free'; |
потом только Код: | $dirs_array = explode (" ", dirs); |
чем ковычки ставить, запятые...
Код: | dirs_array = array ('one', 'xxx', 'free'); |
и тем более
Код: | $excludedDirs = [
'cache',
'tmp',
]; |
одинарные ковычки ставить каждый раз, особенно если штук 20 файлов и столько же папок которые надо исключить и забыть поставить ковычку.
Хотя согласен - массивом будет правильней и проще в плане обработки через foreach махом.
|
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 19/04/17 в 17:27 |
Int13h писал: | Ailk:
На счёт массивов - мне проще через запятую по быстрому в конфиг вписывать потом файлы и папки вот так
Код: | dirs = 'one, xxx, free'; |
сейчас подумал, что конфиг проще ещё может через пробел, что бы ещё быстрее вводить Код: | dirs = 'one xxx free'; | потом только Код: | $dirs_array = explode (" ", dirs); |
чем ковычки ставить, запятые...
Код: | dirs_array = array ('one', 'xxx', 'free'); |
|
text.txt:
1=one
2=two
3=three
4=four
похапэ скрипт:
$list=parse_ini_file('text.txt');
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 19/04/17 в 18:57 |
localhost писал: | text.txt:
1=one
2=two
3=three
4=four
похапэ скрипт:
$list=parse_ini_file('text.txt'); |
зачем такие сложности? тогда уж просто
dirs.txt
--------
one
two
three
Код: | $list = file('dirs.txt',FILE_IGNORE_NEW_LINES);
|
результат, чистый массив , каждый элемент = 1 строка файла.
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 19/04/17 в 19:47 |
localhost: я не хотел внешних файлов делать
stop_dirs.txt
stop_files.txt
... и тп хотел одним файлом с кодом и конфиг в коде. Что бы в корень домена залил и запустил.
Думаю, если развивать идею, то лучше даже так сделать можно было.
Код: | $stop_dirs = <<< HTML_END
folder-one
xxx
sysfolder
HTML_END;
$stop_dirs_array = explode ("\n", $stop_dirs); |
Последний раз редактировалось: Int13h (19/04/17 в 20:05), всего редактировалось 1 раз
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 19/04/17 в 19:52 |
Int13h: ну а когда тебе $stop_dirs понадобиться в другом файле, копипастить будешь? а потом в двух местах редактировать код?
вообще если это не часть чего-то, а просто реально права на файлах менять, то проще как писали выше, средствами shell команд сделать, типа chown -R и т.д.
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 19/04/17 в 20:20 |
dizziness: если, структура движка будет другая ) поменяю в файле ch.php - значение stop_files и stop_dirs - через noteped2, без NuSphere, залью и запущу domain.txt/ch.php )
я знаю про рекурсивную смену прав chown -R , но прикол в том, что некоторые (папки и файлы) разной вложенности, надо было оставить, не меняя права, файлам задать одни права, папкам другие + запускать скрипт по web, без SSH доступа, не заходя по putty и не бродя там в поисках public_html )
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 19/04/17 в 20:22 |
dizziness писал: | Ailk: пффф... массивы... массивы для слабаков, смотри сюда,
Код: | ##105**Наименование товара 1**60 штук**1**2650.00##79**Наименование товара 2**5 штук**1**0.00## |
так хранится корзина заказа в одной работающей партнерке, и это еще не самое худшее в том коде |
Сколько платят за поддержку этого говна?
Кстати в мускул 5.7 жсон поля ввели. И по ним есть поиск.
Int13h писал: | 2) время на рефакторинг, поиск функций, классов, фрейморков и тп не было, за час пока импульс был захотел написать на коленке код, что бы закрыть на сайте папки и файлы от вирусни из вне. С лету написал, работает и гуд |
К таким вещам надо ответственно относится. До кучи надо еще посчитать хеши файлов, и проверять периодически что изменилось. Пхп, жс, файлы шаблонов в особенности. Вот.
Еще 1 мысль. Вот закрыл ты все файлы, молодец. А потом надо что-то изменить. Что делать? Правильно, разлочить все нада =) Значит тулзу нада, которая запомнит у кого какие разрешения были, а потом по заранее созданной карте восстановит обратно, для работы.
|
|
|
|
С нами с 25.12.14
Сообщения: 602
Рейтинг: 441
|
Добавлено: 19/04/17 в 20:31 |
Ailk писал: |
Кстати в мускул 5.7 жсон поля ввели. И по ним есть поиск.
|
да я знаю, использую местами, но уже на новых проектах буду c postgresql работать, там типов поболее(в т.ч. и json, array), и свои создать можно, и еще много интересного, короче mysql, maria отдыхают.
|
|
|
|
С нами с 16.06.12
Сообщения: 8470
Рейтинг: 313
|
Добавлено: 19/04/17 в 20:32 |
Ailk: ну тогда цель была движок Joomla закрыть, на запись. Потом бы сменил бы временно тем же скриптом прописав, перед обновлением .
Код: |
$dir_chmod = 777;
$files_chmod = 755;
|
А так, да можно было log.txt делать где путь до файла, изначальные права, и CRC.
На крон поставил бы, что бы скрипт сверял было ли изменение в контрольных суммах файлов, так как время создания хакер может откорректировать и даже размер теоретически вернуть, вставив мини eval шелл с получением параметров по post,get,cookie и удалив комменты и тп что бы размер файла остался таким же. Но с CRC уже сложнее ему. Да и сам log.txt - защифровать xor, что бы в самом файле хакер не поменял данные проверочные, если догадается. Ну и с алертом в случае появления любых новых файлов. Так же можно было файлы сканировать на eval, base64_decode и тп
Но это совсем другая история
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|