Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Файлы блокировок  (Прочитано 12513 раз)
0 Пользователей и 1 Гость смотрят эту тему.
WWX
Участник

ru
Offline Offline

« : 10-06-2020 11:14 » 

Доброго времени суток.

В Ubuntu в директории /var/lock (которая на самом деле является ссылкой на /run/lock) у меня создаются файлы блокировок нолевой длины для синхронизации общего доступа через ф-цию flock.
Всё работает с обычными пользовательскими правами.

Обнаружилось, что в CentOS 7 директория /run/lock имеет права rwxr-xr-x, т.е. обычный пользователь уже не имеет возможность создать там файл блокировки.

Но есть возможность создавать файлы блокировок в директории /var/tmp.

Насколько правильно так делать? И где вообще полагается создавать файлы блокировок для ф-ции flock?
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 10-06-2020 14:05 » 

В Ubuntu в директории /var/lock (которая на самом деле является ссылкой на /run/lock) у меня создаются файлы блокировок нолевой длины для синхронизации общего доступа через ф-цию flock.
Всё работает с обычными пользовательскими правами.

Обнаружилось, что в CentOS 7 директория /run/lock имеет права rwxr-xr-x, т.е. обычный пользователь уже не имеет возможность создать там файл блокировки.

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

Но есть возможность создавать файлы блокировок в директории /var/tmp.

Насколько правильно так делать? И где вообще полагается создавать файлы блокировок для ф-ции flock?

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

PS: тут нашлось полное теоретическое обоснование.
« Последнее редактирование: 10-06-2020 14:18 от darkelf » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 10-06-2020 18:09 » 

В директорию /run в современных версия Линукса монтируется temfs. Рамдиск. По этому разница между /run и /tmp есть.
Обычному пользователю надо писать в /run/user/<UID>/ или в соотв. /var/... При создании сессии там создаются директории. Во всяком случае Debian-подобные так делают, почему-то за RHEL такое не заметил. Как и кто это создает, не знаю, не разбирался, но пользовался этим персональным рамдисом не раз.
« Последнее редактирование: 10-06-2020 21:16 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-06-2020 21:15 » 

Гуглеж указывает на pam_systemd и systemd-logind.service.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
WWX
Участник

ru
Offline Offline

« Ответ #4 : 11-06-2020 20:40 » 

Спасибо за ответы / наводки. Поизучаю.

Но есть один момент: приложение в общем случае может запускаться от разных пользователей.
Соответственно синхронизация должна проходить между процессами, запущенными разными пользователями.

В идеале было бы найти директорию доступную для записи для любого пользователя, очищающуюся после перезагрузки.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-06-2020 01:50 » new

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines