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

11 ответов11

12

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

Однако - если у вас включены списки ACL в Linux, вы можете сделать это, если вы являетесь владельцем файла. Просто запустите команду setfacl -m user:friend:rwx filename где friend - это имя учетной записи вашего друга, а filename - это файл. Вы можете проверить, что он вступил в силу, запустив getfacl filename , вы должны увидеть в списке триаду user:friend:rwx . Я не видел слишком много систем Linux с включенными 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     whatever     --=== Access permissions

 BasePath/CoverDir/Obscure/protectedFile.txt
          |        |       ^^^^^^^^^^^^^^^^^ Can't be seen without 
          |        ^^^^^^^ Directory Name         read access to 
          ^^^^^ Public     shared with friend.    Obscure directory.
                accessible 
                directory.
  1. Если вы установите доступ к « CoverDir » как 'rwx--x--x »,
    Группа и другие могут только войти в каталог, но не могут прочитать его содержимое.
  2. Теперь, если вы используете неясное имя каталога,
    « Obscure », внутри него и полный доступ для чтения с помощью « rwxr-xr-x »,
    любой, кто знает это имя, может перечислить его содержимое.
  3. Этот доступ должен быть сделан снаружи с помощью « ls BasePath/CoverDir/Obscure »
    Потому что люди в вашей группе и другие не смогут « ls BasePath/CoverDir ».
5

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

chown -R youruser:friendgroup ~/foo/bar

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

chmod -R 770 ~/foo/bar

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

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

4

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

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

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN
2

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

2

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

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

2

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

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

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

2

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

2

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

2

Как насчет Dropbox? Вы можете установить его без прав администратора и обе ссылки на одну и ту же учетную запись.

Узнайте, как установить Dropbox в полностью текстовой среде Linux

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .