Як обмежити виконання команд у певному каталозі через SUDOERS?


13

Я можу налаштувати sudo (через файл sudoers), щоб дозволити користувачеві запускати команди chownта chmodкоманди на будь-якому файлі чи каталозі в системі. Однак я хочу лише надати користувачеві дозвіл на запуск цих команд у файлах, що знаходяться під /var/www/htmlкаталогом.

Як я можу обмежити привілейовані команди таким чином, щоб користувач міг запускати їх лише у заздалегідь заданому каталозі?

Наприклад: Наступна команда надає 777 дозволів на index.htmlфайл.

sudo chmod 777 /var/www/html/index.html

Тепер я хочу виконати дві дії

  1. Обмежити sudoтаким чином, що користувач може працювати тільки chmodі chownзсередини/var/www/html

  2. Заборонити користувачеві виконувати ці команди в інших місцях системи (наприклад, команди не можна запускати /var/wwwабо /var/ftp)


1
Будь ласка, не перехрещуйтесь - superuser.com/questions/456662/…
Ульріх Дангел

7
Це справді правильний шлях? Як щодо www-dataгрупи, що позбавляє потреби chmod/ chownнічого?
sr_

Класно. Таким чином ви корінь досить легко. Дуже погана ідея дарувати chown. Крім того, я не бачу жодної причини, чому chmodпотрібно запускати як root.
Нілс

Відповіді:


13

Те, що ви запитуєте, важко, якщо не неможливо. Навіть якщо ви обмежили застосування chownта chmodфайли у певному каталозі, хтось все одно може передати символічне посилання та впливати на файли в будь-якому місці.

На щастя, велика ймовірність, що те, що ви намагаєтеся зробити, - це просто не правильне рішення вашої реальної проблеми, і є ще один метод, який працює.

Зазвичай /var/wwwдо групи додаються користувачі, яким потрібні додаткові дозволи для створення та зміни файлів (часто www-data, або у вас можуть бути різні групи для різних частин сайту). Ви можете використовувати групову власність та встановлені жорсткі каталоги: chgrp www-data /var/www/html; chmod g+ws /var/www/htmlдозволяє всім учасникам www-dataгрупи записувати в /var/www/htmlкаталог, а файли, створені в цьому каталозі, будуть належати www-dataгрупі замість первинної групи користувача, який створив файл. Однак це не дуже гнучко.

Можливо, ви повинні налаштувати списки контролю доступу для файлів під /var/www. Спочатку переконайтеся, що ACL включені: увімкнена файлова система /var/wwwповинна бути встановлена ​​за допомогою aclпараметра. Див. Розділ Зробити всі нові файли в каталозі доступними для групи для отримання довідки. Також встановіть утиліти ACL ( getfaclі setfacl). Потім надайте додаткові дозволи на дерево, /var/www/htmlтим, хто має їх мати. Ви можете встановлювати ACL для кожного користувача, але часто простіше розмістити користувачів, які повинні мати однакові права на частину файлової системи, і встановити ACL для цієї групи. Наприклад, якщо користувачі групи html-writersповинні мати доступ для читання-запису до дерева під /var/www/html:

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

Щодо "це не дуже гнучко" (в кінці пункту 3) - чому це не так? Це тому, що людям потрібно бути в певній групі? (Я майже нічого не знаю про дозволи та ACL та пов'язані з ними речі.)
KajMagnus,

3
@KajMagnus Це негнучкість, оскільки root має керувати групами, а файли можуть належати лише одній групі. ACL дозволяє будь-якому користувачеві вибирати, хто може отримати доступ до власних файлів, а кілька користувачів та груп можуть бути згадані в ACL.
Жил "ТАК - перестань бути злим"

2

Ви можете обмежити команду, яку повинен використовувати "myuser", з усіма аргументами у /etc/sudoersфайлі за допомогою команди visudoadd:

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

включити ведення журналу для кожної операції, додаючи:

Defaults logfile=/var/log/sudo.log

вихід вибірки:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

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


Я пробував це раніше, але він видав помилку як: Вибачте, користувачеві prashant заборонено виконувати '/ bin / chmod 777 / var / www / html / a' як root на prashant.xyz.com.
PrashantB

Ви переключили користувача з su - prashantабо su prashant?
tombolinux

Так, я виконую команду користувачем prashant. Я читаю форуми, вони кажуть, що команди працюють у всій системі. Про таке питання ніхто не пише.
PrashantB

Я запускаю його whooo :). Але це буде статична команда. Чи можемо ми зробити це загальним, щоб я міг застосувати будь-який дозвіл на будь-який файл під / var / www / html?
PrashantB

3
Це абсолютно невпевнено: sudo /bin/chmod 666 /var/www/html/../../../etc/passwdі якщо ви якось це виправите,ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
Жил "ТАК - перестаньте бути злим"

1

Насправді існує досить простий спосіб зробити це, створивши сценарій Bash (або оболонку на ваш вибір), щоб обмежити зміни, внесені до певного файлу чи каталогу.

У вашому прикладі це виглядатиме так:

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

Тоді ви б змінили файл sudoers, щоб дозволити www-data виконувати / usr / local / bin / mychmod.

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


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