доступ только для чтения ко всем файлам в определенной подпапке

Вот решение в чистом bash, так как Ваш вопрос ясно указывает, что у Вас есть удар 3 доступных:

#!/bin/bash

if [[ -t 0 ]]; then
    printf '%s\n' 'No input!'
    exit 1
fi

while read -ra _file; do
    _file="${foo[*]:8}"

    for _file_name_already_known in "${_files[@]}"; do
        if [[ ${_file_name_already_known} == "${_file}" ]]; then
            for _file_name_already_printed in "${_already_printed[@]}"; do
                [[ ${_file_name_already_printed} == "${_file}" ]] && continue 3
            done
            printf '%s\n' "${_file}"
            _already_printed+=( "${_file}" )
        fi
    done

    _files+=( "${_file}" )
done

Вывод:

$ ./lsdups < f.txt
f3.txt

Выполненный как ./lsdups < file.

Примите во внимание это ls вывод не является лучшей вещью использовать, как бы то ни было. http://mywiki.wooledge.org/ParsingLs пробегается через некоторые причины, почему Вы не должны делать этого.

3
03.10.2012, 22:57
3 ответа

Для записи, альтернатив bindfs aufs, unionfs-fuse и rofs. Из тех aufs единственный, который не является fuse основанный.

Все, (включая aufs и bindfs) имейте ограничения как не поддержка ACLs (можно перечислить их, но они не в действительности). Другая альтернатива при необходимости в ACLs, должна использовать NFS.

3
27.01.2020, 21:24

Создайте представление только для чтения того каталога в другом месте. Можно сделать это с bindfs.

Скажем, то, что рассматриваемый каталог /home/confidential/reboot и это Вы хотите дать доступ только для чтения пользователям в группе mygroup. Создайте каталог /views/mygroup/reboot который доступен для той группы.

mkdir -p /views/mygroup/reboot
chown root:mygroup /views/mygroup
chmod 750 /views/mygroup

Создайте представление только для чтения с bindfs. Процесс bindfs должен иметь разрешение считать файлы и получить доступ к точке монтирования; здесь Вы, по-видимому, выполнили бы его как корень.

bindfs -p a-w /home/confidential/reboot /views/mygroup/reboot

Если файлы под /home/confidential/reboot не читаемы пользователями в mygroup и Вы хотите сделать их так, изменить спецификацию полномочий на -p a=rX.

Для создания представления только для чтения во время начальной загрузки добавьте его к /etc/fstab:

bindfs#/home/confidential/reboot /views/mygroup/reboot fuse perms=a=rX
3
27.01.2020, 21:24
  • 1
    на самом деле просто mount --bind может переключить ограниченное содержание на RO, IIRC. –  poige 17.10.2012, 23:31
  • 2
    @poige Там был патчем для этого в течение очень долгого времени, но в последний раз я смотрел, он не был принят в основном ядре. Это имеет теперь? С тех пор, когда? –  Gilles 'SO- stop being evil' 17.10.2012, 23:34
  • 3
    не знает точно. См.: mkdir /tmp/ro && mount -r --bind /etc /tmp/ro && touch /tmp/ro/TOUCH; umount /tmp/ro; uname -r → касание: не может коснуться '/tmp/ro/TOUCH': файловая система только для чтения, 2.6.32-042stab057.1' (Это - версия RHEL + патчи OpenVZ) –  poige 17.10.2012, 23:54
  • 4
    @poige, Работающий над Debian, сжимает также. Но я не уверен, является ли это, потому что наши дистрибутивы применили патч. Bindfs также имеет преимущество разоблачения как отдельная файловая система, таким образом, можно исключить его из резервных копий и т.п.. Оборотная сторона является немного уменьшенной производительностью. –  Gilles 'SO- stop being evil' 18.10.2012, 00:02
  • 5
    @poige я просто проверил Ubuntu 12.04, mount --bind -r от чтения-записи файловая система производит точку доступа для чтения-записи. Mount предупреждает меня mount: warning: /tmp/ro seems to be mounted read-write., и это действительно имеет место. Не полагайтесь на него, если Вы не знаете, что ядро Вашего (распределения) имеет патч. любовь –  Gilles 'SO- stop being evil' 18.10.2012, 12:32
  1. Если каталог не имеет Разрешения Чтения, соответствующих пользователей wont'be способным получить список файлов в нем, и, поэтому, получает доступ к нему.
  2. Можно использовать ACLs (man setfacl)
-3
27.01.2020, 21:24
  • 1
    ACLs не поможет: неважно, как это сделано, если пользователь не может получить доступ к каталогу, они не могут получить доступ к каталогам под также. Кроме того, относительно Вашей первой точки: если пользователи имеют, выполняют разрешение на каталоге, они могут получить доступ к файлам в каталоге: они не могут перечислить файлы, но они могут получить доступ к файлу, если они знают или предполагают его имя. –  Gilles 'SO- stop being evil' 18.10.2012, 12:34
  • 2
    @Gilles, Относительно № 1 — это зависит от требований и среды — где-нибудь, который был бы достаточен, где-нибудь необходимо будет установить режим на доступ к файлу или -x на dir в пути. И к № 2 — мы говорим доступ каталога поединка или доступ к файлу? Изменение –  poige 18.10.2012, 14:48
  • 3
    Нет, № 1 работает то же над каждым Unix. Если пользователям не разрешают получить доступ к каталогу, то им не позволяют получить доступ к файлам под ним, каковы полномочия на файлах. ACLs мог бы помочь дать этим пользователям, выполняют полномочия на каталоге, не давая им больше полномочий, чем они должны иметь, но он находится на далеком расстоянии от понятия к реализации; это, вероятно, приведет к твердо обслуживаемым полномочиям. –  Gilles 'SO- stop being evil' 18.10.2012, 15:10
  • 4
    Под чем Вы подразумеваете "не позволенный получить доступ к каталогу"? И какое отношение к № 1 это имеет? Я сказал где-нибудь, что это могло быть хорошо только для сокрытия списка файлов. –  poige 18.10.2012, 15:52

Теги

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