Использование mysqldump на размещенных серверах без разрешения каталога 777

Я пытаюсь создать php-файл, к которому будет обращаться cron. Этот файл создаст резервную копию базы данных, к которой он подключен. Для этого он использует PHP exec() а также mysqldump

Это все работает нормально, НО, это работает только в том случае, если директория, к которой она пишет, имеет разрешения 0777, Я проверил с разными разрешениями, и кажется, что только мировой номер должен быть 7. (или, по крайней мере, писать и читать, я думаю)

Проблема в том, что я не хочу, чтобы кто-либо, кроме сервера, мог видеть эту резервную копию, поскольку она содержит информацию о пользователе! (хотя эта информация зашифрована)
Я пытался использовать chmod в каталоге, чтобы сделать его 0777 только во время записи файла, но он не может изменить разрешения, и это может быть еще одной угрозой безопасности.

Есть ли способ записать этот файл в каталог с 0700 разрешения? Или есть какой-то другой способ, которого я сейчас не вижу …

Исходный код:

<?php
backup('notecms', 'root');
function backup($name, $user, $pass = NULL) {
$filename='/note_db_backup_'.date('G_a_m_d_y').'.sql';
if ($pass == NULL) {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -r '. $filename . ' 2>&1', $output, $return_var);
}
else {
$result=exec('mysqldump notecms --single-transaction --user='. $user .' -p='. $pass .' -r '. $filename . ' 2>&1', $output, $return_var);
}
if($return_var == 0){
//return 0;
if (!chmod($filename, 0600)) {
die('could not change backup permissions');
}
deleteold();
}
else {
print_r($output);
global $backup_output;
$backup_output = $output;
//return 1;
}
}

function deleteold() {
$filecount = count(scandir("../backup/")) - 2;
if ($filecount > 5) {
$files = glob( '../backup/*' );
array_multisort(
array_map( 'filemtime', $files ),
SORT_NUMERIC,
SORT_ASC,
$files
);
unlink($files[0]);
}
}
?>

0

Решение

Нет причин для разрешения 0777, Пользователь, выполняющий сценарий, должен иметь доступ на чтение и запись к каталогу, поэтому убедитесь, что пользователь владеет каталогом, и все, что вам нужно, это 0700,

3

Другие решения

Ваш сценарий должен запускаться как владелец каталога или быть в состоянии передать этому владельцу права на запуск сценария. Поскольку вам нужно сделать это на нескольких серверах, вы должны поговорить с системным администратором, чтобы они настроили это.

Они могут настроить его так, чтобы он работал только для этой задачи, и, вероятно, имеют метод, позволяющий передать его на все серверы.

1