CH-J Server Managerуправление на сървъри над SSH
Меню
Всички ръководства и статии →

Отдалечен файл е променен, докато го редактирате: как да избегнете презаписването му

Как да установите, че някой друг е променил файл на сървъра по време на редакцията ви, да сравните версиите и да запазите и двете промени.

Как възниква проблемът

Отваряте файл и докато редактирате своето копие, нещо друго записва в оригинала: друг администратор, изпълнение на инструмент за управление на конфигурацията, надграждане на пакет или самото приложение. Ако след това запазите, другата промяна изчезва без съобщение за грешка. Локалното редактиране с качване през SFTP е особено уязвимо, защото между прочитането и записването минава много време, а обикновеното качване не сравнява нищо.

Запишете състоянието, преди да започнете

Когато изтегляте файла, отбележете контролната сума и часа на последната промяна. Проверете ги отново непосредствено преди качването. Различна контролна сума означава, че файлът е променен и не бива да го презаписвате, без да прегледате промените.

sha256sum /etc/example.conf
stat -c '%y %U %G %a' /etc/example.conf

Сравнете и обединете промените

Запазете редактираното си копие с ново име, изтеглете текущата версия и я сравнете с версията, от която сте започнали, и със своята. След това приложете промяната си към текущата версия, вместо да я презаписвате. Командата diff3 може да покаже и трите версии заедно.

diff -u example.conf.orig example.conf.current
diff -u example.conf.orig example.conf.mine
diff3 example.conf.mine example.conf.orig example.conf.current

Установете какво променя файла

Ако файлът продължава да се променя, установете източника, преди да го редактирате отново. Проверете кой го е отворил и прегледайте журнала и историята на пакетите. Ако файлът се управлява от инструмент за управление на конфигурацията, променете шаблона там, иначе следващото изпълнение ще замени редакцията ви.

sudo lsof /etc/example.conf
sudo journalctl --since "1 hour ago" --no-pager | grep example.conf
grep example.conf /var/log/dpkg.log

Предупреждението не е заключване

Редактори като vim и nano предупреждават, когато файлът е променен след отварянето му, но не спират друг процес да записва в него. Същото важи за сравняването на контролни суми: проверката точно преди записване прави времевия прозорец много кратък, но не го премахва. На сървъри, на които работят няколко души, източник на конфигурацията под контрол на версиите ви защитава по-добре от всеки редактор.

Защита при записване в CH-J Server Manager

Редакторът на File Manager проверява файла отново при записване. Ако съдържанието, правата или целта на връзката са променени, записването спира и оригиналът остава непокътнат. След това можете да заредите текущата версия от сървъра, което отхвърля незаписаните ви промени, затова първо копирайте текста си на друго място. Редакторът не обединява версиите вместо вас. При прехвърляне приложението пита, преди да замени цел, която е променена или вече съществува, и ви казва да започнете отначало, ако източникът се е променил по време на прехвърлянето.

Подробна документация

man: stat →

man: diff →

Биометрични отключване и сигурност →