Допустим, у меня есть каталог, к которому может обращаться только 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, если путь известен?
Мне интересно, что здесь происходит за кулисами.