Користувач не може торкнутися -t


10

Коли SCP'ing на моєму сервері Fedora, користувач постійно отримує помилки щодо неможливості зміни часових міток файлів ("встановити час: операція не дозволена"). Користувач не є власником файлу, але ми не можемо chownподати файли до цього користувача з міркувань безпеки. Користувач може sudo, але так як це відбувається через клієнт SCP / FTP, немає жодного способу зробити це. І нарешті, ми не хочемо надавати цьому користувачеві кореневого доступу, аби дозволити йому використовувати таку синхронізацію, як rsync або WinSCP, якій потрібно встановити часові позначки.

Користувач входить до групи з повними rwдозволами на всі відповідні файли та файли. Будь-які думки щодо того, як надати користувачеві дозвіл на touch -tці конкретні файли, не надаючи chownїм його?

Додаткова інформація. Це все пов'язане з включенням PHP-розробки в сценарії для одного розробника (тобто без SCM). Я намагаюся працювати з Eclipse або NetBeans для роботи над локальною копією сайту на базі PHP (WordPress), дозволяючи користувачеві "миттєво" переглянути його зміни на сервері розробки. Користувач працюватиме віддалено. Поки всі спроби автоматичної синхронізації не вдалися - навіть за допомогою WinSCP в режимі «папки дивитися», де він контролює локальну папку та намагається завантажити будь-які зміни до помилки віддаленого каталогу, оскільки вона завжди намагається встановити дату / часову позначку .

Користувач має доступ до sudo, але мені сказали, що це дійсно не дуже гарна ідея працювати в режимі "root", тому я не бажаю просто входити як root, щоб виконувати цю роботу. Крім того, це не повинно бути необхідним. Я хотів би, щоб хтось інший, що не надійшов користувачеві, мав змогу зробити те ж саме - використовуючи інформацію про їх обліковий запис, встановити FTP-з'єднання та мати можливість віддалено працювати через синхронізацію. Тому рішення потрібно працювати для когось без доступу до кореня.

Що мене вражає - скільки труднощів у мене виникає. Усі ці програмні засоби (NetBeans, Eclipse, WinSCP) розроблені для забезпечення синхронізації, і всі вони намагаються написати часову позначку. Отже, це має бути можливо. У WinSCP є можливість вимкнути "встановити часові позначки", але ця опція стає недоступною (завжди "увімкнена"), коли ви вибираєте папку "монітор / синхронізація". Тож має бути щось досить стандартне.

Зважаючи на те, що я повний ідіот, коли мова йде про Linux, і я "адміністратор сервера", я можу лише припустити, що це щось ідіотське, що я роблю, або що я (неправильно) налаштував.

Резюме В двох словах, я хочу всіх користувачів , які мають групу R / W доступ до каталогу, щоб мати можливість змінити мітку часу на файли в цьому каталозі з допомогою SCP.


1
Ваша файлова система змонтована чимось смішним? Ви використовуєте ACL? Зазвичай це можливо через членство в групі.
Калеб

5
В основному ваша система каже вам: "Ви не можете торкнутися -t [його]".
boehj

@Caleb: Ні, ви можете встановити лише поточну дату, якщо ви не є власником. @Tom: Чи важливо дотримуватися дати? Чи можете ви трохи розширити вимоги: якщо користувач може записати у файл, чому це важливо, чи може він ним володіти? Зазвичай у цих ситуаціях той, хто останній раз писав у файл, володіє ним.
Жил "ТАК - перестань бути злим"

@Tom: Існує очевидне протиріччя між "ми не хочемо надавати цьому користувачеві кореневий доступ" та "Користувач може судо", чи могли б ви пояснити цю частину краще? Що стосується Вашого використання rootгрупи: rootгрупа не має спеціальних дозволів, робить це лише rootкористувач.
Жил "ТАК - перестань бути злим"

Відповіді:


10

Чому це не працює

При спробі змінити час модифікації файлу за допомогою touchабо, загалом, за допомогою базового системного виклику utime, є два випадки.

  • Ви намагаєтесь встановити час модифікації файлу на певний час. Це вимагає, щоб ви були власником файлу. (Технічно кажучи, ефективний ідентифікатор користувача процесу повинен бути власником файлу .²)
  • Ви намагаєтесь встановити час модифікації файлу на поточний час. Це працює, якщо і лише якщо у вас є дозвіл на запис у файл. Причиною цього винятку є те, що ви могли в будь-якому випадку домогтися такого ж ефекту, перезаписавши наявний байт файлу з тим же значенням¹.

Чому це зазвичай не має значення

  • Коли ви копіюєте файли за допомогою ftp, scp, rsync тощо, копія створює новий файл, яким належить той, хто робив копію. Отже, копір має дозвіл встановлювати час файлу.
  • За допомогою rsync ви не зможете встановити час існуючих каталогів: вони будуть встановлені на час останнього синхронізації файлу в них. У більшості випадків це не має значення. Ви можете сказати rsync не турбуватися про час каталогів, передаючи --omit-dir-times( -O).
  • У системах управління версіями дати перегляду зберігаються у файлах; метадані у файлах здебільшого не мають значення.

Рішення

Це все пов'язано з включенням PHP-розробки в сценарії для одного розробника (тобто без SCM).

Гаразд, зупинись прямо там. Тільки тому, що є один розробник, це не означає, що ви не повинні використовувати SCM. Ви повинні використовувати SCM. Запропонуйте розробнику перевірити файл і дати йому спосіб натиснути кнопку "розгорнути", щоб перевірити файли з SCM в реальному каталозі.

Не існує абсолютно жодної технічної причини, чому ви не повинні використовувати SCM, але може бути причина людини. Якщо людина, що працює над цими файлами, називає себе «розробником», він повинен використовувати SCM. Але якщо це не технічна особа, яка залучає документи, SCM може бути занадто складним. Тож продовжуйте натискання файлів через FTP або SSH. Існує три способи роботи.

  • Вам справді потрібно синхронізувати часи? Як зазначено вище, rsyncє можливість не синхронізувати час. Scp не робить, якщо ви цього не скажете. Я не знаю WinSCP, але це, мабуть, теж може.
  • Продовжуйте робити те, що ви робите, просто ігноруйте повідомлення про рази. Файли все ще копіюються. Це не вдалий варіант, тому що ігнорувати помилки завжди ризиковано. Але технічно це можливо.
  • Якщо вам потрібна гнучкість у заповненні файлів, що належать apacheкористувачеві, то звичайним підходом було б дозволити користувачеві SSH доступ як apache. Легкий підхід щоб користувач створити закритий ключ SSH і додати відповідний відкритий ключ ~apache/.ssh/authorized_keys. Це означає, що користувач зможе виконувати довільні команди як apacheкористувач. Оскільки ви все одно з наданням права користувачеві на sudo, у вашому випадку це не має значення. Можна встановити більше обмежень (але не так просто) (потрібен окремий запис бази даних з іншим іменем, той самий ідентифікатор користувача, обмежена оболонка та в'язниця chroot; деталі в окремому запитанні, хоча це вже може бути висвітлено на цьому веб-сайті або на помилках сервера ).

¹ Або для порожнього файлу напишіть байт, а потім усікайте.
² Заборона додаткових ускладнень, але жодне, що я знаю, стосується тут.


Дякую Жиллу, за цікаве пояснення. Я не впевнений, наскільки ясніше я можу бути щодо випадку використання. NetBeans продовжує видавати помилки "не можу відключити" під час синхронізації (хоча файл передано правильно та перевірено на сервері); WinSCP кидає "встановлений час: операція не дозволена" помилки; коли я знімаю файл, я отримую попередження про неможливість встановлення часової позначки на час у майбутньому. Крім того, я не знаю, де лежить проблема. Я просто хочу мати можливість синхронізувати локальний з віддаленим режимом. через SCP / FTP, і проблема, схоже, часові позначки. Чи допомагає це? Напевно, ні.
Том Ожер

@Tom: Я все ще не розумію, чому ви не можете просто мати користувачів, які володіють файлами.
Жил "ТАК - перестань бути злим"

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

@Tom: Власник не змінюється лише тому, що це вже наявні файли. Я не розумію, чому ви не дозволяєте користувачам завантажувати файли як apache- тоді вони зможуть встановити час. Дивіться мою переглянуту відповідь щодо правильного рішення та пару неоптимальних.
Жил 'SO- перестань бути злим'

Дякуємо, що дотримувались цього питання, Гілл. Використання SVN або якогось варіанту є неоптимальним з точки зору розвитку. Кожен, хто зайнявся веб-розробкою віддалено, може сказати вам, що процес зазвичай мікро-інкрементальний, особливо при візуальному стилю, тому ви робите зобов’язання кожні 30-60 секунд. Якщо вам доведеться постійно виходити з IDE, виконувати фіксацію та переглядати веб-переглядач, ви додасте тонну накладних витрат до того, що має бути простим процесом. SVN має сенс лише в контексті, коли на одній частині сайту працює декілька розробників. Це відрізняється від програмування.
Том Ожер

2

Ви можете налаштувати rsync на використання sudo на віддаленому кінці так:

rsync -ave ssh --rsync-path="sudo rsync" /source/ user@host:/dest/

Яким було б правило судо? Просто дозволити rsync дозволить користувачеві перезаписати довільні файли. Визначити обмеження аргументів досить важко, і все одно тут я думаю, що вам потрібно буде встановити обмеження на введення rsync, що технічно можливо за допомогою сценарію обгортки, але це не просто.
Жил "ТАК - перестань бути злим"

Ви маєте рацію, дозволяючи sudo rsyncобмежити їх дуже важко. Я запропонував це лише тому, що ОП заявив, що користувач уже мав доступ до судо.
Калеб

Дякую - це цікаво, хоча розробник знаходиться у вікні Windows, тому я не впевнений, що rsync - це найкращий шлях. Знову ж таки, як я вже згадував у редакції до своєї публікації, я хочу, щоб це рішення працювало для будь-якого середнього користувача, а не для деяких привілейованих користувачів, крім того, хто належить до групи, яка володіє цим конкретним каталогом.
Том Ожер

Я думаю, що наступне, на що слід звернути увагу, - це налаштування списків доступу до списку доступу (ACL), але у мене мало досвіду в цій галузі, тому, можливо, якийсь гуру може додати відповідь і пояснити, якщо і як це можна зробити.
Калеб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.