Как разрешить пользователю создать каталог, но не создавать подкаталог

Как разрешить пользователю создать каталог, но не создавать подкаталог

Я пытаюсь создать скрипт оболочки Bash, который позволяет переносить файлы с флэш-накопителя в архив, который укажет пользователь. Хотя я хотел бы ограничить этого пользователя, запретив ему создавать подкаталоги в этом архивном каталоге.

ПРИМЕЧАНИЕ:По сути, я хочу, чтобы каталог архива, который создает/указывает пользователь, имел плоскую одноуровневую структуру.

Я не имею ни малейшего представления, как этого добиться, и буду признателен за любую помощь.

решение1

Нет никакого собственного механизма, чтобы легко этого добиться. Система разрешений Linux не может указать отдельные разрешения для создания файлов и каталогов, поскольку каталоги по сути являются файлами. Но попробуйте такой способ:

  1. Сделать все архивные каталоги собственностью одного (или нескольких) пользователя, созданного специально для этой цели. Предположим, что его имя archiveuser.
  2. Сделайте так, чтобы все архивные каталоги (я думаю, у вас их много) принадлежали этому пользователю, например:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. Ограничить доступ к архивным каталогам, чтобы доступ к ним имел только владелец:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. Используйте sudoмеханизм для предоставления cpкомандного доступа к архивным каталогам:

    добавить в /etc/sudoers:

    someuser1 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    someuser2 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    

    Конечно, удобно создать соответствующую группу для всех пользователей, которым будет разрешено использовать эту команду. Читайте sudoруководство :-).

  5. Вот и все. Пользователям необходимо использовать:

    $ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/ 
    

Вы можете создать некоторый псевдоним, чтобы сделать его более удобным в использовании (например, alias cpt='sudo -u archiveuser cp'). Обратите внимание также, что cp -rнеобходимость копирования каталога не допускается sudoв этом случае. Также mkdirкоманда запрещена разрешениями. Таким образом, ваша цель достигнута.

Связанный контент