У пользователя только есть доступ к одному файлу

Я работаю над устройством, которое имеет веб-GUI для установки сети на Ubuntu бездисплейная система. Первоначально система будет настроена для DHCP, но одна из первоначальных конфигураций должна будет применить статический IP-адрес к нему, с помощью GUI.

Я уверен, что это собирается произойти, что, если они заканчивают тем непреднамеренно, что отправили неправильные настройки TCP/IP через GUI, устройство или перезагрузит или перезапустит сетевые сервисы, но теперь у пользователя нет доступа к GUI через браузер.

Я думаю об установке Ubuntu "Сетевая Авария" пользователь, учетные данные которого известны конечному пользователю, который разрешил бы им входить в систему, только через терминальный сеанс (клавиатура, и монитор включил устройство).

Однако я только хочу, чтобы у них был доступ к/etc/network/interfaces, после того как они вошли в систему. Идеально они заблокированы вниз к их домашней папке (или возможно/etc/network установлен быть их домашней папкой), и не может перейти больше нигде в файловой системе. Единственный файл, к которому у них есть доступ для чтения-записи, является файлом интерфейсов.

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

0
задан 27 August 2014 в 20:41

3 ответа

Вы не упоминаете, хотите ли Вы помешать им просматривать другие файлы, таким образом, это может работать на Вас.

Sudo позволяет Вам определять запись в sudoers файле, который позволит определенному непривилегированному пользователю давать определенную команду с с определенными аргументами в поднятом полномочии.

От демонстрационный suoders

# 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
0
ответ дан 7 October 2019 в 04:55

Если Вы только хотите, чтобы пользователь смог видеть, иметь доступ к и изменить единственный файл, vi не является действительно опцией. Причина состоит в том, что любой использующий vi может сразу просто опуститься до оболочки в vi и выполнить любые команды, которые они хотят, особенно если бы они в vi как корень, который несомненно имел бы место, если бы они редактировали /etc/network/interfaces. На самом деле разрешение им войти в систему и получить оболочку любого вида сразу приведет Вашу цель к сбою.

Вот решение с двумя частями, я предлагаю, чтобы Вы попробовали:

Сводка:

  1. Позвольте пользователю sftp только определенный файл только к определенному местоположению не имея возможности для получения любого другого вида оболочки.
  2. Создайте и задание крона, которое автоматически проверяет на изменения и условно копирует "новый" файл интерфейсов в сети перезапусков и место.

Руководство:

  1. Настройте пользователя, который может только использовать ssh протокол для sftp приложений. Принятый ответ в следующем сообщении работал отлично для меня:

    https://serverfault.com/questions/354615/allow-sftp-but-disallow-ssh

    Примечания:

    • Ради удобства Вы можете, просто использовал имя sftponly Вашего пользователя также, поскольку sftponly группа будет автоматически сгенерирована
    • Используя /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
      


  2. Теперь, когда мы создали пользователя, единственная возможность которого помещает файл, названный "интерфейсами" в определенный каталог через sftp, нам нужно задание крона, которое автоматически поместит Ваше новое interfaces файл в эффект.

    • Создайте сценарий где-нибудь (/root довольно безопасно для этого), сделайте это исполняемым файлом и вставкой в него содержание найденный здесь: newnet.sh
    • Создайте задание крона, которое запускает скрипт каждую минуту. Вот то, на что была бы похожа crontab запись, если бы я назвал свой сценарий newnet.sh и помещенный это в /root каталог:

      * * * * * /root/newnet.sh
      
    • Это будет вращать задание крона, которое автоматически проверяет /home/sftponly/interfaces каждая 1 минута для различий с /etc/network/interfaces . Если какие-либо различия будут найдены, то это скопирует новое interfaces файл в место и перезапуск все интерфейсы управляемой сети.

Сообщите мне, приемлемо ли это решение для Вас.

0
ответ дан 7 October 2019 в 04:55

Ограничьте их вход в систему 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
0
ответ дан 7 October 2019 в 04:55

Другие вопросы по тегам:

Похожие вопросы: