Я должен признать, что я никогда полностью не получал модель разрешений * nix для файловой системы. о, материал rwxrwxrwx не слишком сложен, но я легко запутываюсь, когда программы создают новые файлы и как я могу их обработать.
Моя текущая проблема - это смесь java-апплета (с закрытым исходным кодом), который выполняет загрузку файлов через ftp и php (он находится на выделенном сервере, и данные на самом деле не критичны, так что я не слишком обеспокоен мирового writeability).
Итак, у меня есть два пользователя: ftp (1000) и apache / php (81). группы не совпадают, поэтому они в основном "другие", если я прав.
каталог «import», установленный на 0777, принадлежащий ftp.
если посетитель заходит на страницу загрузки, мой скрипт создает подкаталог с именем его имени пользователя. скажем, имя пользователя для посетителей - "foo", так что это "import / foo", значение 0777, пользователь 81 / php.
Затем посетитель использует Java-апплет для загрузки файла в этот каталог (test.jpg). права доступа к файлу теперь rw-r - r--, пользователь ftp.
первый вопрос
Первое, что я не понимаю, это то, что я могу отсоединить этот файл через php.
Зачем? пользователи не совпадают, и файл не доступен для записи во всем мире.
это из-за разрешения на запись в родительские каталоги? понятно, я не могу chown или chmod через php.
Пока проблем нет, потому что, пока я могу читать и отключать связь, все в порядке.
второй вопрос
Java-апплет может загружать целые каталоги, что приятно. если я это сделаю, новый подкаталог import / foo / test будет иметь права доступа rwxr-xr-x / ftp. файлы в этом каталоге: rw-r - r - / ftp.
теперь мне не повезло. я ничего не могу сделать с этими файлами (кроме чтения, что я делаю успешно), без разыменования, без chmod / chowning. они просто сидят и поглощают дисковое пространство.
Итак, каков план по умолчанию для новых файлов? я предполагаю, что у них есть разрешение, установленное через umask, пока сценарий создания не изменяет их в другом месте. я прав?
третий вопрос
что я могу с этим сделать? Я имею в виду, что бы сделал разумный человек? Могу ли я / я должен изменить Umask для пользователя FTP? (Я только что узнал о Umask вчера). мне это не очень удобно, так как это повлияет на весь трафик ftp, не так ли? Кроме того, сервер выделен, но я не администратор, поэтому мой доступ ограничен.
У меня просто была другая идея. перед тем, как начать этот пост, я прочитал материал о базовых разрешениях Linux. Во-первых, бит закрепления не установлен нигде в цепочке каталогов. и затем, это было: «установить бит идентификатора пользователя».
Итак, мой текущий план состоит в том, чтобы написать простой сценарий оболочки с владельцем ftp, который можно запускать с помощью setuid. скрипт просто передает файл в владельцах каталогов импорта пользователю php.
затем после каждого импорта я просто exec()
этот файл из моего php-скрипта и обрабатывать файлы дальше.
это сработает? и что более важно: это чисто и законно? или сисадмин наградит меня за голову?
Спасибо большое!
обновление: Я просто попытался установить бит uid (4755) через winscp (через соединение ftp), но он как-то не работает - кажется, что он «забывает» только бит uid другие биты установлены). это почему? почему владелец не может установить UID сам? это для конкретного сервера или вообще так?
обновление 2:
Википедия говорит все это
Из-за повышенной вероятности недостатков безопасности многие операционные системы игнорируют атрибут setuid при применении к исполняемым сценариям оболочки.
Может ли пользователь root установить бит uid?