альтернатива sudo, щоб дозволити певному користувачу виконувати chmod з програми


2

Я хотів би дозволити певному користувачеві, який не володіє файлами в каталозі, виконувати chmodнад ними. В інтерактивному режимі я знаю, що я можу це зробити, конфігуруючи sudoз файлами конфігурації sudoers, і я також можу визначити псевдонім, як

alias chmod='sudo chmod'

в .bashrc, .profile або .bash_profile, щоб користувачеві більше не потрібно було друкувати sudo chmod. Цей підхід, хоча chmodі не виконується з командного рядка в оболонці bash, але з програми. Як я можу змусити це все ще працювати?

Фон полягає в налаштуванні Syncthing , який я хочу використовувати для синхронізації файлів від різних користувачів. Крім того, він syncthingне працює rootяк користувач syncuser. syncuserКористувач не має дозволів для виконання chmodна файли , які він не володіє , але які він синхронізується (права на читання / запис керованих груп), і це, де він виходить з ладу.

Така ситуація повинна виникати частіше. Я майже впевнений, що є інше рішення, ніж працювати syncthingяк root, але на даний момент я не бачу, як ...


1
Чи встановлення встановленого прапора є опцією? chmod, мабуть, вже належить root, тому якщо ви також встановите його, він повинен мати змогу зробити це магією для всіх файлів. Викликає занепокоєння, що це по суті означає, що ви надаєте кореневі права всім своїм користувачам. chmod може використовуватися звичайними користувачами для встановлення більшої кількості бінарних файлів як встановлених. Гарним прикладом може бути / bin / sh. Я думаю, ви можете зробити копію chmod, зробити це налаштованим і обмежити доступ лише до синхронізації.
Пол

Перше рішення встановлення встановленої настройки chmodне є можливим для проблеми, яку ви викликаєте. Другий (зробіть копію, обмежте доступ до виконуваного файлу) розумний! Синхронізація написана на Go і, здається, закликає os.chmod()виконувати a chmod. Мені цікаво, чи все-таки твій фокус все-таки спрацював би, але, мабуть, ні. Якщо іншої ідеї немає, я спробую все одно!
bdoering

@Paul, який заслуговує на відповідь. Особливо таке, що пояснює, як доступ до копії Suid може бути обмежений. Розумна ідея!
тердон

Я не знайомий з go. Але якщо програма працює як виділений користувач, ви, можливо, зможете змінити налаштування шляху, тому першим місцем розташування стане копія chmod. Тому що ви можете поставити його в будь-який шлях таким чином, ви все ще можете назвати його chmod ...
Павло,

@bdoering Якщо це API, він взагалі не дзвонить chmod. Замість цього він дзвонить chmod()безпосередньо.
Даніель Б

Відповіді:


0

Коли у мене була схожа проблема із зовсім іншим фоном, я виявив, що chmod має обмеження на root. Це за дизайном. Моє рішення було завданням incron (inotify) [1] у папці, де зберігалися файли. Інкрон (запускається як root) дозволить chmod всі нові файли на "user: user", дозволяючи обробляти його далі.

[1] http://inotify.aiken.cz/?section=inotify&page=about&lang=en


Я розумію концепцію, але це суперечить "концепції синхронізації файлів", де я спеціально хочу зберегти синхронізацію користувача / групи та дозволи між різними машинами.
bdoering

0

Якщо у вас є досить недавній Linux, ви можете використовувати систему можливостей, щоб надати синхронізацію можливість chmod будь-якого файлу. Це також надасть їй додаткові можливості, такі як зміна розширених атрибутів у файлах або зміна часу доступу будь-якого файлу. Дивіться man 7 capabilitiesповний список.

Для цього просто використовуйте setcap "CAP_FOWNER=EP" syncthing. Замініть syncthingповний шлях до виконуваного файлу, якщо ви не в потрібній папці.


Я про це не чув. Звучить багатообіцяюче! Я вивчу це пізніше, дякую!
бердерінг

0

Я зіткнувся з тим же питанням:

[YNQCP] 12:42:21 INFO: Puller: shortcut: chmod /some/file.name: operation not permitted

Дивіться також це інше попереднє питання щодо більш загального питання щодо дозволу невласникам користуватися chmodта chown.

У моєму випадку ми маємо єдиний комп’ютер із кількома користувачами, які мають права на sudo. Вони поділяють одну папку з низкою підпапок, які повинні синхронізуватися автоматично та бути доступними для всіх. Я chmod 777головна папка і підпапки, але syncthingвсе одно скаржиться і намагається chmodфайли чомусь (чому?).

Я використовував хак-рішення для запуску syncthingяк root. Це добре працює, але створює:

введіть тут опис зображення

Це здається кращою альтернативою, ніж намагатися возитися з налаштуваннями дозволів, щоб syncthingдозволити chmod-файлам, яким він не володіє.

Альтернативне рішення - зробити користувача, що синхронізує, і надати йому право власності на файли, а інші дозволити використовувати їх через chmod 777.

Про проблему також повідомлялося в інших місцях:

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