Я создал тюрьму с помощью ssh с помощью Finch-Freebsd на NAS4FREE и добавил локального не суперпользователя для доступа к тюрьме через ssh.
Я хочу иметь возможность предоставить этому пользователю ограниченный доступ к оболочке специально, чтобы закрыть тюрьму и, в свою очередь, начать отключение сервера, на котором находится тюрьма.
Как я могу предоставить указанному пользователю ограниченные права команды оболочки для запуска команды выключения?
Пока в попытке инициировать sh /etc/rc.shutdown
Я получаю следующий результат
eval: невозможно открыть /var/run/cron.pid: В доступе отказано Остановка sshd. kill: 12060: Операция запрещена. Остановка lighttpd. kill: 12001: операция не разрешена eval: невозможно открыть /var/db/mysql/RemandYard.pid: Permission denied pututxline: Permission denied Terminated
Как сказал Кассандри, вы не можете сделать это с помощью команды в самой тюрьме.
Однако вы могли бы создать отдельного пользователя (которого я в дальнейшем буду называть closer
в хост-системе. Этого пользователя следует заблокировать, чтобы он мог войти в систему только с помощью ключа SSH.
Ваш заключенный в тюрьму пользователь должен иметь закрытый ключ и пароль для ключа.
На стороне хоста вы предоставляете closer
разрешения sudo учетной записи:
closer localhost=NOPASSWD:/usr/sbin/shutdown
На стороне хоста поместите публичную часть ключа SSH в /home/closer/.ssh/authorized_keys
. Отредактируйте ключ так, чтобы он начинался с
command="sudo /usr/sbin/shutdown",from="1.2.3.4"
а затем следует фактический ключ, все в той же строке. (Разумеется, исправьте IP-адрес, чтобы он соответствовал тюрьме.) authorized_key
файл и каталог недоступны для записи для пользователя.
Когда пользователь в системе, находящейся в тюрьме, теперь использует этот ключ для подключения к хосту по SSH, он немедленно запускает завершение работы. Пользователь не сможет больше ничего делать с этим ключом - каждый раз, когда он использует его для входа в систему, он просто запускает команду. Ключ можно использовать только из этой тюрьмы, поэтому вы не рискуете предоставить всему миру доступ для выключения вашего сервера, если они каким-то образом получат ключ в свои руки.
Jails специально запрещают команды выключения согласно странице руководства Вот.
Обычные команды выключения машины, такие как halt (8), reboot (8) и shutdown (8), не могут быть успешно использованы в тюрьме.
Дополнительно цитируется из Дизайн и реализация операционной системы FreeBSD,
Процессам, запущенным в тюрьме, не разрешается выполнять операции, которые позволили бы им видеть или влиять на все, что работает за пределами тюрьмы. Это ограничение реализуется в значительной степени за счет маскировки набора именованных системных привилегий, доступных для корневых процессов, работающих в тюрьме. К ограниченным привилегиям относятся:
- получение информации о процессах вне тюрьмы;
- изменение переменных ядра;
- монтирование или размонтирование файловых систем;
- изменение физических сетевых интерфейсов или конфигураций; и
- перезагрузка системы.
Так что то, что вы хотите сделать, на самом деле не должно быть возможным в тюрьмах. Чтобы закрыть тюрьму и сервер, на котором она находится, вам потребуется фактический привилегированный пользователь в хост-системе.