Чому один користувач може видалити 755 файлів іншого користувача?


35

У мене є сценарій завантаження резервного копіювання, який скапує файли на інший сервер за допомогою користувача upload. Інший скрипт на цільовому сервері потім замовчує їх іншому користувачеві і встановлює режим файлу на 755.

Якщо я потім SSH uploadперейду на цільовий сервер за допомогою користувача, я можу видалити порушені файли. Чи не слід їх читати?

Ось як виглядає файл на цільовому сервері, і користувач uploadможе його видалити.

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

Користувача uploadщойно додали за допомогою useraddта не входить до maciekishгрупи.

При спробі видалити файл як uploadчерез ssh, у мене виникає питання, чи хочу я видалити "записувати захищений звичайний файл", і я в змозі сказати Yта видалити його.


Відповіді:


64

Файли будуть тільки для чтенія-; однак видалення файлу не змінює його, а лише батьківський каталог (він в основному видаляє файл з переліку каталогів) - і це здається, що ви маєте повні дозволи на запис у каталог.

Ви можете встановити stickyбіт, який також називається "обмеженим видаленням", що не дозволить перейменувати або видалити файли в цьому каталозі (наприклад, у /tmp) будь-хто, крім власника . Для цього запустіть chmod o+t *directory*як власника каталогу.


12

У типовій файловій системі Unix будь-який файл може бути ідентифікований за довільною кількістю записів каталогів, кожна з яких містить "жорстке посилання".

З точки зору реалізації існує різниця між видаленням останнього запису в каталозі (жорстке посилання) для файлу та простим видаленням однієї посилання з багатьох. Однак з семантичної точки зору різниці немає.

Якщо до файлу існує декілька жорстких посилань, запис у файл, використовуючи будь-який з них, змінює файл, побачений усіма ними. rmОднак, використовуючи посилання, це лише призводить до того, що файл не може бути доступний через це посилання. Інші посилання на файл продовжують бачити той самий файл.


3
Загальновідомі як жорсткі посилання.
Боб

1
@Bob: я знаю, що термін "жорстке посилання" використовується для опису посилань, створених до вже існуючого файлу; у випадках, коли файл ніколи не мав більше ніж одне посилання на нього, це одинока посилання все ще називається "жорсткою ланкою"?
supercat

3
Різниці між посиланнями немає. Створіть файл A, створіть жорстке посилання B, видаліть файл A. Чи B зараз файл чи жорстке посилання? Щоб зрозуміти, як це працює, краще розглядати його як N жорстких посилань, а не як 1 файл та (N-1) жорсткі посилання. Є також посилання, які існують при відкритті файлу.
gnasher729

@ gnasher729: Я погоджуюсь, що у випадках, коли до файлу існує чимало посилань, або існує файл, є сенс називати їх усіма "жорсткими посиланнями", якщо між ними немає семантичної різниці. З іншого боку, я думаю, що з точки зору як семантичного, так і з точки зору продуктивності можуть бути переваги розрізнення запису каталогів, який завжди був єдиним посиланням на файл, порівняно з тим, на який могли бути створені інші жорсткі посилання. У будь-якому випадку, я не знав, чи було б правильним посилатися на слова про записи каталогів, "кожна з яких називається" жорсткою ланкою ".
supercat

2
@supercat це не надзвичайно часто, але це правильно. Розглянемо поле st_nlink("кількість жорстких посилань") у struct stat. Простіше кажучи, каталоги містять жорсткі посилання на файли.
варення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.