2

Допустим, у меня есть каталог, к которому может обращаться только root:

 $ sudo -s
 $ mkdir ~/rootonly
 $ chmod 000 ~/rootonly

Внутри этого каталога находится файл с разрешениями global-everything:

 $ cd ~/rootonly
 $ mkdir openforall
 $ chmod 777 openforall

Нет, если я хочу получить доступ к этому каталогу как обычный пользователь, я, по-видимому, не могу (как я и ожидал):

 $ su me
 $ cd ~/rootonly/openforall/
 bash: cd: /home/me/rootonly/openforall: Permission denied
 $ touch ~/rootonly/openforall/foo
 touch: cannot touch `/home/me/rootonly/openforall/foo': Permission denied

Тем не менее, если я сначала перейду в каталог как root, а затем su для обычного пользователя, это сработает:

 $ sudo -s
 $ cd /home/me/rootonly/openforall
 $ su www-data
 $ touch test
 $ ls
 $ -rw-r--r-- 1 www-data www-data 0 2011-08-05 14:17 test

Почему это работает? Является ли первый случай просто определенным поведением "cd", который пытается пройти по иерархии каталогов папка за папкой? Другими словами, для злоумышленника, обходящего bash, предоставляет ли ядро запись для доступа к openforall, если путь известен?

Мне интересно, что здесь происходит за кулисами.

1 ответ1

1

Разрешения вступают в силу, когда команде нужно "пройти" каталог.

Когда вы touch ~/rootonly/openforall/foo , команде touch необходимо открыть каталог rootonly чтобы он мог найти местоположение (inode и т.д.) openforall чтобы затем он мог редактировать содержимое структуры каталогов openforall чтобы установить метку времени. там foo .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .