Я работаю над устройством, которое имеет веб-GUI для установки сети на Ubuntu бездисплейная система. Первоначально система будет настроена для DHCP, но одна из первоначальных конфигураций должна будет применить статический IP-адрес к нему, с помощью GUI.
Я уверен, что это собирается произойти, что, если они заканчивают тем непреднамеренно, что отправили неправильные настройки TCP/IP через GUI, устройство или перезагрузит или перезапустит сетевые сервисы, но теперь у пользователя нет доступа к GUI через браузер.
Я думаю об установке Ubuntu "Сетевая Авария" пользователь, учетные данные которого известны конечному пользователю, который разрешил бы им входить в систему, только через терминальный сеанс (клавиатура, и монитор включил устройство).
Однако я только хочу, чтобы у них был доступ к/etc/network/interfaces, после того как они вошли в систему. Идеально они заблокированы вниз к их домашней папке (или возможно/etc/network установлен быть их домашней папкой), и не может перейти больше нигде в файловой системе. Единственный файл, к которому у них есть доступ для чтения-записи, является файлом интерфейсов.
Действительно ли это возможно? Я прочитал много сообщений об установке пользователей SSH и т.д. и т.д., но я ничего не видел об ограничении одного пользователя только к их домашней папке и вот именно...?
Вы не упоминаете, хотите ли Вы помешать им просматривать другие файлы, таким образом, это может работать на Вас.
Sudo позволяет Вам определять запись в sudoers файле, который позволит определенному непривилегированному пользователю давать определенную команду с с определенными аргументами в поднятом полномочии.
# joe may su only to operator
joe ALL = /usr/bin/su operator
кажется, что что-то вроде этого служило бы Вам;
joe ALL = /bin/vi /etc/network/interfaces
или, еще лучше
joe ALL = /bin/vi /etc/network/interfaces.d/eth0.cfg
Если Вы только хотите, чтобы пользователь смог видеть, иметь доступ к и изменить единственный файл, vi не является действительно опцией. Причина состоит в том, что любой использующий vi может сразу просто опуститься до оболочки в vi и выполнить любые команды, которые они хотят, особенно если бы они в vi как корень, который несомненно имел бы место, если бы они редактировали /etc/network/interfaces
. На самом деле разрешение им войти в систему и получить оболочку любого вида сразу приведет Вашу цель к сбою.
Вот решение с двумя частями, я предлагаю, чтобы Вы попробовали:
Сводка:
Руководство:
Настройте пользователя, который может только использовать ssh протокол для sftp приложений. Принятый ответ в следующем сообщении работал отлично для меня:
https://serverfault.com/questions/354615/allow-sftp-but-disallow-ssh
Примечания:
Используя /home/sftponly
поскольку корневой каталог пользователей совершенно приемлем. Это - то, на что мой пользователь sftponly похож в/etc/passwd:
mgodby@mg-ws1:~$ grep sftponly /etc/passwd
sftponly:x:1002:1002::/home/sftponly:/bin/false
Вручную создайте каталог /home/sftponly
как базируются и присваивают ему владение и полномочия быть похожими на это:
mgodby@mg-ws1:/etc$ ls -l /home | grep sftponly
drwxr-xr-x 2 root root 4096 Aug 27 16:07 sftponly
предварительно создайте файл интерфейсов в /home/sftponly
и измените полномочия быть похожими на это:
mgodby@mg-ws1:~$ ls -l /home/sftponly
total 4
-rw-rw-r-- 1 sftponly sftponly 95 Aug 27 16:14 interfaces
Теперь, когда мы создали пользователя, единственная возможность которого помещает файл, названный "интерфейсами" в определенный каталог через sftp, нам нужно задание крона, которое автоматически поместит Ваше новое interfaces
файл в эффект.
/root
довольно безопасно для этого), сделайте это исполняемым файлом и вставкой в него содержание найденный здесь: newnet.shСоздайте задание крона, которое запускает скрипт каждую минуту. Вот то, на что была бы похожа crontab запись, если бы я назвал свой сценарий newnet.sh
и помещенный это в /root
каталог:
* * * * * /root/newnet.sh
/home/sftponly/interfaces
каждая 1 минута для различий с /etc/network/interfaces
. Если какие-либо различия будут найдены, то это скопирует новое interfaces
файл в место и перезапуск все интерфейсы управляемой сети.Сообщите мне, приемлемо ли это решение для Вас.
Ограничьте их вход в систему TTYs использование /etc/security/access.conf
:
-:poor_user:ALL EXCEPT tty1 tty2 # Other ttys if needed.
Запись пользовательская оболочка, которая только открывает редактора (и слабого редактора того):
//file: poor_shell.c
#include <unistd.h>
int main(void)
{
execl("/usr/bin/nano", "nano", "/etc/network/interfaces", NULL);
}
Компиляция, это делает его setuid
корень (или сделайте /etc/network/interfaces
группа перезаписываемый, и установите ее группу на poor_user
'S Group):
gcc -o poor_shell poor_shell.c
chown root:root poor_shell
cp poor_shell /bin
# Either
chmod u+s /bin/poor_shell
# Or:
chown root:poor_user /etc/network/interfaces
chmod g+w /etc/network/interfaces
И набор оболочка этого пользователя к /bin/poor_shell
:
chsh poor_user /bin/poor_shell