
В качестве метода настройки мониторинга некоторых базовых систем я настроил скрипт на SSH и запускаю несколько базовых команд оболочки, считывая некоторые файлы в /proc
. Я хотел бы создать специальную учетную запись пользователя для этой задачи, и она должна иметь следующий доступ:
- SSH
- Баш
- Только для чтения в
/proc
В других постах упоминались rssh или Chroot, но являются ли они лучшими методами? Мне кажется, что должен быть способ создать пользователя без прав и добавлять только то, что нужно, обеспечивая соблюдение моих ограничений на уровне файловой системы, а не на уровне SSH. Возможно ли это?
Все системы, которые я хочу отслеживать прямо сейчас, работают под управлением Ubuntu, но я не хотел бы ограничивать себя каким-то одним конкретным дистрибутивом.
решение1
Во-первых, разрешения. Когда вы создаете новую учетную запись ( adduser
по крайней мере, в системах на базе Debian — в других может быть немного по-другому), вы получаете нового пользователя и новую группу с тем же именем. Вы также получаете домашний каталог для пользователя. Этот новый пользователь будет иметь права пользователя и группы на чтение/запись в своем домашнем каталоге. Он также сможет получить доступ ко всему, что обозначено как доступное для чтения всем, и изменять все, что доступно для записи всем.
Насколько мне известно, это невозможно конкретноисключатьодин пользователь или группа из мира с правами на чтение/запись, используя традиционную систему разрешений POSIX. ВыможетОднако включите более продвинутые списки контроля доступа (ACL) (похожие на NTFS в Windows, если вы с ними знакомы), которые позволяют вам устанавливать определенные запрещающие разрешения.
Альтернативный метод — создатьпользовательская оболочка входа, используя chsh
команду или изменив /etc/passwd
. Когда они входят в систему, эта 'оболочка' будет запущена с перенаправлением ввода пользователя в качестве стандартного ввода, а ее стандартный вывод/ошибка будут перенаправлены в вывод терминала. Вы можете установить эту 'оболочку' каклюбойисполняемый файл в системе, включая (но не ограничиваясь) вашу собственную программу на языке C, скрипт bash/python/perl и т. д.
Есть несколько способов сделать это. Вы можете настроить оболочку входа в качестве скрипта, который просто выводит любые нужные вам данные и не принимает никаких входных данных. Он просто выводит данные и завершает работу, закрывая сеанс SSH. Это самый безопасный способ, хотя и не такой гибкий.
В качестве альтернативы вы можете заставить скрипт принимать некоторые входные данные и использовать эти входные данные для определения того, что печатать. Как вы это сделаете, решать вам — если вы используете скрипт bash
, вы можете использовать его read
вместе с case
оператором или серией if
операторов. Однако вам нужно быть осторожным, чтобы не запускать какие-либо несанкционированные команды от пользователя напрямую — и есть другие возможные проблемы безопасности с приемом ненадежных входных данных. Например, вы можете взять входные данные processes
и вернуть выходные данные ps -e
.
Если вы хотите и хорошо владеете C, вы можете даже изменить bash
его так, чтобы он не мог получить доступ ни к каким другим каталогам, но гораздо безопаснее либо не принимать входные данные, либо фильтровать только определенные команды из белого списка, чем пытаться ограничить каталоги, к которым вы можете получить доступ. Также проще написать быстрый скрипт оболочки, чем изменять сложную программу на C.
решение2
Чтобы принудительно включить режим «только для чтения» для /proc, вы можете получить доступ к клону /proc sshfs, доступному только для чтения.