Как взаимодействуют жесткие ссылки, символические ссылки и права доступа к папке ACL?

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


Предположим, у нас есть система с двумя пользователями, назовем их alice и bob , которые в определенной степени делят папку с именем stuff со следующими разрешениями:

 bob@server:~$ getfacl /home/stuff getfacl: Removing leading '/' from absolute path names # file: home/stuff # owner: alice # group: bob user::rwx group::-wx other::--- default:user::rwx default:user:bob:rwx default:group::-wx default:mask::rwx default:other::--- по bob@server:~$ getfacl /home/stuff getfacl: Removing leading '/' from absolute path names # file: home/stuff # owner: alice # group: bob user::rwx group::-wx other::--- default:user::rwx default:user:bob:rwx default:group::-wx default:mask::rwx default:other::--- по bob@server:~$ getfacl /home/stuff getfacl: Removing leading '/' from absolute path names # file: home/stuff # owner: alice # group: bob user::rwx group::-wx other::--- default:user::rwx default:user:bob:rwx default:group::-wx default:mask::rwx default:other::--- по bob@server:~$ getfacl /home/stuff getfacl: Removing leading '/' from absolute path names # file: home/stuff # owner: alice # group: bob user::rwx group::-wx other::--- default:user::rwx default:user:bob:rwx default:group::-wx default:mask::rwx default:other::--- по bob@server:~$ getfacl /home/stuff getfacl: Removing leading '/' from absolute path names # file: home/stuff # owner: alice # group: bob user::rwx group::-wx other::--- default:user::rwx default:user:bob:rwx default:group::-wx default:mask::rwx default:other::--- 

Как вы видите, владелец папки – alice , но Боб может написать туда что- alice и сделать ее исполняемой, чтобы alice могла работать в (+ x флаг). Однако, из-за ACL, каждый раз, когда bob записывает / копирует файл в файл, права доступа к файлу изменяются и в итоге выглядят следующим образом. Предположим, мы создали файл в домашнем каталоге bob и переместили его в файл.

 bob@server:~$ touch myfile bob@server:~$ chmod 777 myfile bob@server:~$ ls -la myfile -rwxrwxrwx 1 bob bob 0 myfile bob@server:~$ mv myfile /home/stuff/myfile bob@server:~$ ls -la /home/stuff/myfile -rwxrwx---+ 1 bob bob 0 /home/stuff/myfile 

Как вы можете видеть, даже если myfile находится в папке, alice будет иметь к нему доступа. Поскольку файл принадлежит bob:bob , alice должна получить к нему доступ с правами доступа «другие», которые --- согласно последней из перечисленных выше команд ls . Тем не менее, поскольку alice является владельцем папки, она может удалить их (хотя я получаю предупреждение о том, что мой myfile защищен).

Теперь самое интересное. Если вместо перемещения / копирования myfile я создаю жесткую ссылку на него, посмотрите, что произойдет.

 bob@server:~$ ln myfile /home/stuff/myfile bob@server:~$ ls -la /home/stuff/myfile -rwxrwxrwx 2 bob bob 0 /home/stuff/myfile 

По-видимому, alice может читать и использовать его. На самом деле, если проверить это на моей системе, и она действительно может. Несмотря на это, символическая ссылка, кажется, не работает вообще.

 bob@server:~$ ln -s myfile /home/stuff/myfile bob@server:~$ ls -la /home/stuff/myfile lrwxrwxrwx 1 bob bob 4 /home/stuff/myfile -> /home/bob/myfile 

На этот раз, хотя ссылка также имеет все разрешения, установленные как lrwxrwxrwx (именно потому, что она является ссылкой, и любой должен иметь возможность перейти по ней, чтобы получить разрешения), alice не может выполнить ее, только удаляет ее.


Мои вопросы:

  • Почему я могу “пропустить” разрешения ACS с жесткой ссылкой в ​​первую очередь?
  • И почему этот же трюк не работает с символическими ссылками?
  • Это намеренно, или это дыра в безопасности?

Поскольку alice имеет разрешение на запись в каталог stuff/ , Алиса может изменять ее содержимое, даже если она не является владельцем файлов.

При использовании списков ACL для Linux, когда файл создается (или копируется, так как копирование создает новый файл в целевой папке), применяются разрешения, как описано в man acl . Перемещение файла с помощью mv сохраняет права, когда файл можно перемещать без копирования. Похоже, по какой-то причине mv не может переместить файл и вместо этого делает копию, поскольку ACL применяются к myfile .

Создание жесткой ссылки совсем другое. Создание жесткой ссылки создает запись каталога (в целевом каталоге), которая указывает на тот же индекс, что и исходный файл, иными словами, один и тот же файл существует в нескольких каталогах. Права доступа к файлам, как ACL, так и традиционные разрешения UNIX, хранятся в inode. Поскольку и /home/stuff/myfile и /home/bob/myfile указывают на один и тот же инод, любое изменение одного из них будет отражаться на другом. Вот почему alice может получить доступ к жесткой ссылке. Разрешения /home/bob/myfile (777) совпадают с разрешениями /home/stuff/myfile .

Символические ссылки вместо этого указывают на целевой путь. Для доступа к файлу, на который указывает символическая ссылка, требуются те же разрешения, что и для доступа к целевому файлу. Возможно, у alice нет доступа к поиску (выполнению бита) к домашнему каталогу bob , и поэтому доступ невозможен.