Я хотел бы запретить пользователям удалять файлы, которые они загрузили на мой сервер sftp. Я знаю, что могу создать собственное решение, используя inotify / dnotify (или pam hook) и lsof, который запускает скрипт для выполнения чего-то вроде chattr +i $filename
после загрузки файла и закрыто. Но мне интересно, есть ли что-то уже доступное как функция или уже проверенное и доступное решение, о котором я не знаю.
Текущая настройка такова, что я использую openssh sftp, и пользователи попадают в тюрьму после подключения.
Если вы добавите свой sftp-server
опция umask -u
с параметром 0222
, новые загруженные файлы будут созданы с указанной выше umask, что означает, что у них не будет доступа на запись для своих файлов, поэтому они не смогут удалить файлы.
Линия в вашем sshd_config
будет выглядеть примерно так:
Subsystem sftp internal-sftp -u 0222
Посмотрите lsyncd (http://code.google.com/p/lsyncd/). Он предоставит часть действия inotify => для вашего решения. Это будет выглядеть так:
cat /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/run/lsyncd.status",
nodaemon = false,
insist = true,
}
-- config action
my_config = {
delay = 10,
maxProcesses = 1,
onCreate = "chattr +i -R /path/to/dir/*",
}
sync { my_config,
source="/path/to/dir/",
}
-- EOF
вы можете изменить действие onCreate для лучшей логики, возможно, запустить скрипт, который найдет загруженные файлы и установит chattr + i.