Pull to refresh

Comments 39

mv /home/hostuser/vhosts/sitename.ru/logs /home/hostuser/vhosts/sitename.ru/pwned
[root@woland /]# mv /home/siteuser/vhosts/site.ru/logs /home/siteuser/vhosts/site.ru/tlogs
mv: cannot move `/home/siteuser/vhosts/site.ru/logs' to `/home/siteuser/vhosts/site.ru/tlogs': Permission denied

Centos, reiserfs. Тоже самое на archlinux ext4.
Что я сделал не так?
Скрытый текст
kekekeks@KeksMPC:~/sometests$ ls -la
итого 16
drwxrwxr-x   2 kekekeks kekekeks  4096 нояб. 30 23:33 .
drwxr-xr-x 195 kekekeks kekekeks 12288 нояб. 30 23:33 ..
kekekeks@KeksMPC:~/sometests$ sudo mkdir test
kekekeks@KeksMPC:~/sometests$ sudo touch test/.keep
kekekeks@KeksMPC:~/sometests$ sudo chattr +i test/.keep
kekekeks@KeksMPC:~/sometests$ mv test test2
kekekeks@KeksMPC:~/sometests$ ls
test2
kekekeks@KeksMPC:~/sometests$ ls -la test2/
итого 8
drwxr-xr-x 2 root     root     4096 нояб. 30 23:33 .
drwxrwxr-x 3 kekekeks kekekeks 4096 нояб. 30 23:33 ..
-rw-r--r-- 1 root     root        0 нояб. 30 23:33 .keep
kekekeks@KeksMPC:~/sometests$ sudo mv test2 /tmp
mv: невозможно удалить «test2/.keep»: Отказано в доступе
kekekeks@KeksMPC:~/sometests$ mount|grep home
/dev/sda5 on /home type ext3 (rw)
kekekeks@KeksMPC:~/sometests$ uname -a
Linux KeksMPC 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
На ext4 повторяется. Заметьте, что удалить я .keep не могу даже от рута, то есть, атрибут применился.
Ну вообще-то я считаю, что это правильное поведение. Мы всего лишь меняем путь до папки test, при этом мы ни как не изменяем запись о файле .keep.
Всё, что изменилось это поле name для inode описывающего директорию test.
Так что перемещение работает и это логично. Но почему оно не сработало у AgentSIB мне не ясно.
Это и есть правильное поведение. Видимо, у AgentSIB immutable-флаг ещё на что-то навешен.
Хм, у меня есть подозрение. что в момент тестов у AgentSIB был выставлен immutable flag на каталог /home/siteuser/vhosts/site.ru/ или непосредственно на logs.
Да, стоит на папке. У вас на файле. Я думаю стоит сделать небольшую приписку к статье…
Просто назначьте логи в другое место, в которое у гостей доступа не будет, а это другое место просто примонтируйте к локальной директории гостя через -o bind. Если удалит — сам себе злобный буратино, но зато никто больше не пострадает.
Согласен, об этого сделал приписку ниже. Но согласитесь, bind по хорошему нужно прописывать в fstab, а это лишний шаг. Если изобретать коммерческий хостинг, то это сделать нужно. Но так как у меня на сервере хостятся доверенные люди — достаточно простой защиты от удаления. Цель данной статьи показать, что есть такая возможность.
Вы на спичках экономите, на самом деле. Это не «лишний шаг», это одноразовое действие при загрузке машины, которое решает вашу проблему с «удалили директорию, покрешился демон» в полном объеме, без костылей с попытками предотвратить mv, о котором писал kekekeks.

И да, immutable для mount-а не нужен вообще в данном случае — зачем запрещать модификацию структуры директории? Пусть меняют, это их директория и их личные проблемы.
Да, логи можно хранить отдельно. Но создавать папку логово под каждого пользователя (или хост) и отдельно монтировать для каждого пользователя (или хоста) это лишний шаг. В таком случае уж лучше сделать как я предложил в примечании: сделать бинд на папку /srv/www/site.ru, где /srv/www — root:root, а site.ru — имеет флаг immutable.
Простите, а не лучше ли было задать этот вопрос на специализированном форуме?
Угу, и получить в ответ «Юзай Гугл». А если серьезно, то даже на хабре не встретил информацию по поводу этих атрибутов. Все советы по данной теме сводятся к chown, chmod, более продвинутые говорят использовать acl либо bind.
Миш, не проще :) Тут профит немного иной.
Можно в деталях, какой именно профит в сравнении с использованием bind, acl или прав доступа?
Профит в том, что когда выполняете удаление, забыв о том, что путь является критическим — система не даст это сделать. Ни конечному пользователю, ни суперпользователю.
Спасибо за объяснение. Интересный костыль, но есть решения намного лучше. О них тут уже говорили.
Угу, и получить в ответ «Юзай Гугл». А если серьезно, то даже на хабре не встретил информацию по поводу этих атрибутов

ви таки не поверите, но даже вы не осветили атрибуты:
lsattr /home/hostuser/vhosts/sitename.ru

Ну или man chattr. К слову, информация по chattr +i будет в первых строках гугла
А еще симлинк /var/log/apache/site.com можно сделать в папку юзера, и тогда да, удалит симлинк — его проблемы, логи не увидит.
UFO just landed and posted this here
Вот вроде бы уже не детский сад, а все равно «папка».
Да еще и в заголовке.
Фу! Как безграмотно!!!

P.S. И, кстати, этот ваш chattr работает совсем не на всех файловых системах! Скажем, на кошерном Reiserfs — нет.
Монокль не уроните.
На рейзере работает, читайте выше.
Да уж, «работает»:

touch test
lsattr test
lsattr: Неприменимый к данному устройству ioctl While reading flags on test
chattr -i test
chattr: Неприменимый к данному устройству ioctl while reading flags on test



// а extX я не считаю нормальной ФС.
Хотя в посте я сразу написал о файловых системах ext*
Удобно когда логи рядом с виртуальным хостом.
+ чтобы сами пользователи их видели. Только свои по своему хосту.
Может проще было бы сделать хардлинк на директорию в другом месте или, как уже преложили выше, примонтировать с -o bind?
Научите, как хардлинк на директорию сделать?
Хмм, совсем забыл про это. Тогда симлинк ничем не хуже.
При использовании симлинка, пользователь может его сам удалить, это его проблемы.
Профит в том, что когда выполняете удаление, забыв о том, что путь является критическим — система не даст это сделать. Ни конечному пользователю, ни суперпользователю.

Запрещать что-то делают руту это вообще абсурд.

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

Ошибиться может простой пользователь, а вот серьезно накосячить может только суперпользователь. Выскажите свою точку зрения людям, которые добавили параметр --no-preserve-root в команду rm.
Если что то нужно исправить или удалить, снять атрибут пара секунд.
Т.е. хочу сказать, что тут на лицо излишнее усложнение, можно, вполне, обойтись штатными и привычными средствами.

Если бы все так рассуждали, до сих пор писали бы на асме или вообще использовали бы перфокарты.
Sign up to leave a comment.

Articles