Это обычно связывается с аппаратными средствами, которые Вы используете. На большинстве аппаратных средств (включая Intel) MMU управляет целым процессом.
Когда программа выделит память, она запросит это к MMU и возвратит виртуальный адрес. В свою очередь MMU зарегистрирует ту страницу как использующийся в глобальной карте адресного пространства.
Когда программа на самом деле получит доступ, что пространство памяти, MMU будет поиск страница в таблицу адресов. Если та страница будет в "живой" памяти, то она передаст "живой" указатель обратно на ОС, которая обработает чтение-запись памяти в имени программы. Если память не будет в настоящее время выделяться, то она инициирует отсутствие страницы. Это исключение процессора затем поймано ОС, которая затем ответственна от выяснения, где данные находятся в файле подкачки, загрузите его в физическую память и отдайте страницу к MMU так, чтобы начальный процесс мог продолжиться.
Это означает, что, если к странице памяти не получают доступ, она никогда не будет возвращаться в "живую" память, однажды помещенную в подкачку. Именно поэтому обычно существует API ОС, который позволяет программам указывать, что конкретный блок памяти не должен быть подкачан к диску и должен быть сохранен в памяти (я не знаю о Linux, но в Windows, это - функция VirtualLock).
Solution with chmod g+s and forcing umasks works quite well. Did you force sftp subsystem umask in sshd_config file?
Subsystem sftp internal-sftp -u 0002
Если вам нужна некоторая гибкость для sftp, вы можете попробовать mysecureshell . Он имеет такие параметры разрешений, как:
DirFakeUser # Скрыть реального владельца файла / каталога (просто изменить отображаемые разрешения)
DirFakeGroup # Скрыть реальную группу файла / каталога (просто изменить отображаемые разрешения)
DirFakeMode # Скрыть реальный файл / права каталога (просто измените отображаемые разрешения)
ForceGroup