Unix: Как я могу разрешить только одному человеку видеть мою папку на одном и том же fs?

9

Я хочу дать доступ к DIR для друга. У него есть доступ к файловой системе, где находится каталог. Я не хочу устанавливать разрешения для всех пользователей. Как я могу позволить только человеку видеть каталог? Никто из нас не является суперпользователем.

[BOUNTY CHALLENGE] Ни один из ответов не работает, используя Ubuntu:

1. Подход Джамураа не работает

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. Подход nik не работает: невозможно получить доступ к несуществующему файлу

3. Подход ба не работает: я не могу создавать группы, а не рут.

4. Подход ToK не работает, пользователи находятся в двух группах: «пользователи» и «поле»

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

источник
1
Было бы полезно, если бы вы дали одну строчку о том, как эти ответы создают проблему для вас, - дало бы лучшее определение проблемы для формирования других вариантов.
Nik
nik: Добавлены профили ошибок.

Ответы:

12

С обычными разрешениями UNIX (пользователь, группа, все) вы не сможете сделать это легко. Если вам больше не нужен доступ к каталогу, вы можете сменить владельца каталога на своего друга, что действует в некоторых Unices, но в большинстве случаев это не так.

Однако - если у вас включены ACL в Linux, вы можете сделать это, если вы являетесь владельцем файла. Просто запустите команду, setfacl -m user:friend:rwx filenameгде friend - это имя учетной записи вашего друга, а filename - это файл. Вы можете проверить, что оно вступило в силу, запустив getfacl filename, вы должны увидеть триаду user:friend:rwxв списке. Я не видел слишком много систем Linux, в которых включены ACL.

jamuraa
источник
ACL - это стандартное решение этой проблемы, при условии, что они включены в вашей файловой системе.
Райан Томпсон
Кажется, он говорит, что это не сработает. Я думаю, что будет, если по какой-то странной причине ACL не включены. ХХХ, что дает?
pboin
pboin: этот метод не работает, так что, очевидно, причина может заключаться в том, что ACL не включены или что-то еще, не уверен.
11

Это то, что мы обсуждали еще в школе.
Идет примерно так,

  1. Создать каталог (названный data, для справки здесь)
    • изменить разрешения как " chmod 711 data"
    • группа и другие имеют только x- доступ для входа в каталог
    • они не могут перечислить каталог
    • Теперь создайте каталог difficult-name-here(это может быть хеш-строка)
    • изменить разрешения как " chmod a+rx difficult-name-here"
    • содержимое этого каталога является безопасным, в то время как внешний каталог не может быть указан
    • люди, которые знают «трудное имя», могут перейти в этот второй каталог
      • " cd path/to/data/difficult-name-here"
      • другие не видят имя и не могут получить доступ к содержимому каталога
      • Тем не менее, rootвсегда можно получить доступ ко всему (что не является проблемой здесь)
    • поделиться difficult-name-hereс людьми, которых вы хотите, чтобы эти данные
    • Храните общие файлы в этом втором каталоге

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


Обновление на комментарий от dmckee,
Это именно то заключение, к которому мы пришли!
«безопасность по неизвестности» имеет ограниченную безопасность .

Сказав это, при разработке защиты данных
важно определить их ценность.

Вы должны стремиться к,

  • Стоимость взлома безопасности выше, чем,
  • Стоимость защищенного контента,
  • Фактором, пропорциональным вашей паранойе

В этом случае, если rootрешит перечислить дерево каталогов где-нибудь в открытом доступе,
ваш секрет исчезнет! Но вы защищаете от корней или их потенциальной безответственности?
Если это так, у вас есть гораздо больше поводов для беспокойства, чем общие файлы.


Обновление о неработающей заметке в вопросе .
Я использовал это в первые дни Linux, чтобы знать, что это работает.
Если вы получите « cannot access non-existant fileвместо 'permissions denied», вы, скорее всего, допустили ошибку в последовательности. То, что вы хотите, должно выглядеть так,

 755 711 755 независимо - === Права доступа

 BasePath / CoverDir / Obscure / protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^ Нельзя увидеть без
          | ^^^^^^^ Имя каталога, доступ для чтения к
          ^^^^^ Публично поделился с другом. Неясный каталог.
                доступной 
                каталог.
  1. Если вы установите « CoverDirдоступ как 'rwx--x--x»,
    группа и другие пользователи могут только войти в каталог, но не смогут прочитать его содержимое.
  2. Теперь, если вы используете скрытое имя каталога,
    ' Obscure', внутри него и предоставляете полный доступ для чтения с помощью ' rwxr-xr-x',
    любой , кто знает это имя, может перечислить его содержимое.
  3. Этот доступ должен будет осуществляться извне с « ls BasePath/CoverDir/Obscure»
    Потому что люди в вашей группе и других не будут в состоянии « ls BasePath/CoverDir».
Nik
источник
7
«если это можно сломать [...], то хотелось бы знать». Ну, это самый пример безопасности по неизвестности, и, следовательно, хрупкий. Не рассчитывайте на это в долгосрочной перспективе. Опрятный, хотя.
dmckee --- котенок экс-модератора
Если ваш unix-контроль доступа реализован безопасно, он почти так же безопасен, как база данных теневых паролей (или sshзакрытый ключ).
Ник
5

Райан был на самом деле на 100% прав, просто отсталый. Поскольку у вашего друга (вероятно) есть уникальная группа, связанная с его / ее именем пользователя, измените принадлежность группы к рассматриваемому каталогу на эту группу, скорее всего, имя пользователя друга. Чтобы иметь возможность делиться контентом между вами, вы должны сохранить право собственности как пользователь:

chown -R youruser:friendgroup ~/foo/bar

Затем назначьте соответствующие разрешения для каталога, в зависимости от того, какой доступ вы хотите, чтобы другой пользователь имел:

chmod -R 770 ~/foo/bar

предоставит вам полный доступ к каталогу и всему его содержимому.

Пожалуйста, обратите внимание, что это предполагает, что ни один другой пользователь не был добавлен в группу вашего друга. Система вряд ли могла бы выполнить это назначение, однако, как упоминалось ранее, пользователь root может делать то, что он выбирает. Вы можете использовать команду groups, чтобы увидеть каждую группу, к которой принадлежит ваш друг или произвольный пользователь. Кроме того, если разрешения по какой-либо причине не были изменены, вы сможете просматривать файл / etc / group, который содержит назначения групп для каждой группы в системе.

Tok
источник
4

Я бы создал новую группу для вас и вашего друга и установил бы полные права доступа к папке для владельца и группы вместе с битом setgid для каталога.

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

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN
gaqzi
источник
3
Это может потребовать привилегий суперпользователя, которых у него нет.
Keck
1
О, я полностью пропустил эту строку: x Тогда я в растерянности. Думаю, я бы просто отправил его по почте локально - не лучшее решение, но, по крайней мере, файл передается другому парню.
gaqzi
2

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

Однако (если я правильно помню), файловую систему необходимо инициализировать с помощью ACL (например, «/ dev / sda6 / home ext3 default, acl »), через / etc / fstab, и это может сделать только суперпользователь. ..


источник
2

RBACS как grsec / selinux требуется ..

kagali-Сан -
источник
не уверен, что это проблема, вы можете добавить цитату?
2

По умолчанию каждый пользователь в системе Ubuntu также имеет связанную группу с тем же именем. Так что, если вы можете добавить своего друга в свою группу, а затем пометить папку как g+rwx, вы будете настроены. Я смутно помню, как этот вариант использования приводился в качестве причины для создания группы для каждого пользователя.

Райан К. Томпсон
источник
Для добавления пользователей в группы требуется доступ с правами суперпользователя, который, по словам ОП, отсутствует.
Дейв Шерохман
2

Я не пробовал этого, но как насчет общедоступного читаемого каталога с зашифрованной FS пользовательского пространства внутри (например, encfs). Затем вы можете поделиться этим паролем с вашим другом, и никто другой не сможет использовать эти данные (ну, я думаю, они могли бы получить данные и запустить взломщик паролей в автономном режиме?).

Arun
источник
2

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

/ foo - это папка, которой вы хотите поделиться. Создайте группу FooGroup, которая имеет желаемый доступ к папке. Добавьте в эту группу группы и пользователей, которым вы хотите предоставить доступ к этой папке.

Огромная боль иметь группу для каждой папки или файла, но это лучший способ ограничить доступ на том же уровне, что и Windows.

Ge3ng
источник
1

Вы можете зашифровать каталог с помощью gpg. А затем попытайтесь запутать место, как, как предложил Ник.

КЖ
источник