Обмежити доступ користувача лише до читання з / proc


1

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

  • SSH
  • Баш
  • Лише для читання в /proc

Інші пости згадували rssh чи Chroot, але це найкращі методи? Мені здається, що повинен бути спосіб створити користувача без дозволів і додати лише те, що потрібно, застосовуючи мої обмеження на рівні файлової системи, а не на SSH. Чи можливо це?

Усі системи, за якими я хочу зараз відстежувати, мають Ubuntu, але я хотів би не замикатися ні на одному патикулярному розподілі.


що ти намагаєшся захистити? Деякі файли є світовими записами. Дозволи на файли встановлюються модулем ядра - якщо ви не хочете змінити код ядра (і впливати на всіх), ви не можете їх змінити. Також ви хочете захистити / sys? і sysctl?
Багата Гомолка

@RichHomolka Я не намагаюся захистити щось, зокрема ... просто намагаюся обмежити потенціал збитку, якщо будуть порушені облікові дані облікового запису моніторингу. Якщо щось записується у світі, я не надто переживаю.
Бред

@Brad За умовчанням будь-який обліковий запис має лише домашні записи та групові записи у свій домашній каталог. Звичайно, можна отримати доступ до всього, що пишеться у світі чи читається у всьому світі. Напевно, не існує способу запобігти такому нестачеві використання користувальницької оболонки або включення ACL. Насправді, якщо ви встановите "оболонку" для входу, яка запускає сценарій і повертає результати, не беручи жодного вводу, це може працювати. Якщо ви дійсно хочете обмеження рівня FS, використовуйте ACL.
Боб

@Bob Мені дуже подобається ваша ідея оболонки. Будь ласка, опублікуйте це та решту ваших роз'яснень щодо облікових записів користувачів, тому я можу прийняти це як відповідь. Дякую!
Бред

Просто для запису - rsshпризначений лише для дозволу SCP і SFTP, а не довільних команд у певному каталозі. І якщо ви дійсно хочете дозволити будь-яку команду, chrootце, мабуть, найпростіший шлях. Але, знову ж таки, я рекомендую лише білі списки конкретних команд.
Боб

Відповіді:


1

По-перше, дозволи. Коли ви створюєте новий обліковий запис (у adduserбудь-якому випадку в системах на базі Debian - інші можуть бути дещо іншими), ви отримуєте нового користувача та нову групу з тим же ім’ям. Ви також отримуєте домашній каталог для користувача. Цей новий користувач матиме користувацькі та групові дозволи на читання / запис у своєму домашньому каталозі. Вони також зможуть отримати доступ до всього, що визначено як "читане у всьому світі", та змінити все, що можна прочитати у світі.

Наскільки мені відомо, конкретно не можна виключити одного користувача або групу з дозволів читання / запису, використовуваних у світі, використовуючи традиційну систему дозволів POSIX. Однак ви можете ввімкнути більш досконалі ACL-файли (подібно до Windows NTFS, якщо ви знайомі з цим), які дозволяють встановлювати конкретні дозволи заборони.


Альтернативним методом є встановлення користувацької оболонки для входу за допомогою chshкоманди або шляхом зміни /etc/passwd. Коли вони входять, ця 'оболонка' буде виконана, коли вхід користувача буде перенаправлений як його стандартний вхід, а його стандартний вихід / помилка буде переспрямовано на термінальний вихід. Ви можете встановити цю оболонку як будь-який виконуваний в системі, включаючи (але не обмежуючись цим) власну програму C, bash / python / perl скрипт тощо.

Є кілька способів зробити це. Ви можете встановити оболонку входу як сценарій, який просто виводить будь-які дані, які ви хочете, і не вимагає введення даних. Він просто виводить дані і виходить, закриваючи сеанс SSH. Це найбезпечніший спосіб, хоча і не такий гнучкий.

Крім того, ви можете мати сценарій, щоб взяти деякий ввід, і використовувати його, щоб визначити, що друкувати. Як ви це зробите, залежить від вас - якщо ви використовуєте bashсценарій, ви можете використовувати readразом із caseзаявою або низкою ifзаяв. Потрібно бути обережними, щоб ви не запускали будь-яких несанітизованих команд безпосередньо від користувача, - але є й інші можливі проблеми із безпекою із прийняттям ненадійного вводу. Наприклад, ви можете взяти вхід processesі повернути результат ps -e.

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


1

Щоб примусити / read тільки для читання, ви можете отримати доступ до клона sshfs для читання / proc лише для читання.

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