LINUX.ORG.RU
ФорумAdmin

Нетривиальное ограничение пользовательского доступа

 , ,


0

1

Здравствуйте.

Хочу странноватого:

1. В неком каталоге я хочу дать пользователю возможность менять уже существующие в этом каталоге файлы и ходить по всем уже существующим подкаталогам.

2. При этом я хочу запретить пользователю создавать конкретно в этом каталоге подкаталоги и файлы.

3. И ещё я хочу, чтоб эти ограничения не касались уже существующих подкаталогов этого каталога.

4. И в качестве вишенки надо, чтоб в этом каталоге два конкретных файла с конкретными именами пользователю всё-таки было позволено создать - их, и только их.

Резюмируя: находишься в таком-то каталоге - редактируй на здоровье, но ничего не создавай - за исключением файлов c из «белого списка». Зашёл в подкаталог - делай в нём всё, что хочешь, ограничения на родительский каталог подкаталога не касаются.

Слабо представляю себе, как это сделать. Буду рад рекомендациям. Спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 3)
  1. Собрать usi образ системы (root)
  • При старте системы, скрипт ищет определенный диск, если диск найден монтирует его.
  • Далее на диске ищется путь с пользователями (systemd-nspawn контейнер для каждого юзера кроме root)
  • Логин менеджер запускает графическую сессию используя systemd-nspawn
  1. Скомпилировать терминал таким образом, что при старте терминала, он получает имя текущего пользователя что запустил его, если пользователь не root то вместо открытия терминальной сессии он запускает microvm (crosvm, muvm, cloud-hypervisor) и прыгает в него

Остальные варианты ограничения это шляпа шляпна

zxflux
()

Подозреваю, в 99% будет достаточно:

  1. Написать Readme.md с описанием правил чего можно, чего нельзя. Положить в папку с нетривиальным доступом.
  2. Написать скрипт, который будет удалять чего нельзя.
  3. Запускаешь скрипт через inotifywait. Если пользователь потратил час на создание файла, который скрипт снесёт за пол секунды, киваешь на пункт №1.
ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Белый список — уж слишком жёсткое условие

Да. Портит мне весь феншуй. Но такова, увы, суровая реальность - есть два файла, по отношению к которым юзер чувствовать себя полностью по дефолту.

Вскроюсь: я умучиваю мозиллу файрфокс. Пользователь, которого я курощаю - это я, который этот броузер запустил. Папка - мой пользовательский профайл файрфокса.

Эти папки:

bookmarkbackups
browser-extension-data
crashes
chrome_debugger_profile
datareporting
extension-store*
gmp-gmpopenh264
mediacapabilities
minidumps
saved-telemetry-pings
security_state
sessionstore-*
settings
storage/permanent
storage/temporary

и

эти файлы:

storage/ls-archive-tmp.sqlite-wal
storage/ls-archive.sqlite
activity-stream.weather_feed.json
bounce-tracking-protection.sqlite
cert_override.txt
containers.json
cookies.sqlite.*
credentialstate.sqlite
domain_to_categories.sqlite
enumerate_devices.txt
ExperimentStoreData.json
logins-backup.json
pkcs11.txt
serviceworker.txt
sessionCheckpoints.json
sessionstore.jsonlz4
shield-preference-experiments.json
SiteSecurityServiceState.bin
Telemetry.ShutdownTime.txt

мне в моём пользовательском профайле глубоко не нужны. Я их, конечно, полуавтоматом прибиваю, но хочу, чтоб они вообще не появлялись. Их много. Каждую в /dev/null линковать - это не то, что б я хотел - мало того, что это просто некрасиво, но ещё я не могу предугадать, что взбредёт в голову улучшаторам в очередной раз.

Трудность в том, что коварный браузер, когда чует какой-то подвох в файлах .parentcontrol и lock верещит и отказывается запускаться. Отсюда и задача - «полностью запретить что-либо создавать, но конкретные два файла полностью разрешить».

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 4)
Ответ на: комментарий от gagarin0

для решения подобных задач мне потребовалось накостылить ужасную связку между execfuse + оторванные куски jinja template из ansible + yaml

ниже пример при запуске команды ls в точке монтирования fuse сервер запустит текстовый браузер, который получит таблицу Менделеева с википедии и отразит ее в виде файлового дерева.

# /mnt/periodic_table/Ca
# ├── density
# ├── image
# ├── melt
# ├── name
# ├── number
# ├── period
# └── phase
# $ cat /mnt/periodic_table/Ca/period
# 4
fs:
  "/":                                                    
    readdir: 
      sh: |
        lynx -nonumbers -dump -width 256 https://en.wikipedia.org/wiki/List_of_chemical_elements | grep -E '^   [0-9]+ [A-Z]' | awk '{print $2}'
    getattr: 
      sh: *dir
      "/[A-Za-z]+": #                                           # /<element_name>
      cache: 3600000 #in second
      name: element_name
      getattr: 
        sh: *dir
      readdir: 
        list:
          - name
          - density
          - melt
          - number
          - period
          - phase
          - image
        
      "/image":
        cache: 9600 # in seconds
        read_file: 
          sh: |
            curl https://www.inorganicventures.com/pub/media/inorganicperiodictable/elements/${element_name}.gif | convert gif:- png:-
        getattr: 
          sh: *file
           
gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 2)
Ответ на: комментарий от piyavking

Праздновать победу было рано - вылез нюанс с «белым списком»(.

Создавать файлы кастомным скриптом, проверяющим белый список, а потом уже редактировать как угодно

annulen ★★★★★
()