Как получить полный контроль над umask / PAM / разрешениями?

11

// Обновлено 8 февраля - Краткие проблемы:

  • Как отличить каталоги от файлов?
  • Как сделать маскировку на Nautilus копировать / вставить?
  • Как установить umask для SSHFS?

НАША СИТУАЦИЯ

Несколько человек из нашей компании входят на сервер и загружают файлы. Все они должны иметь возможность загружать и перезаписывать одни и те же файлы. У них разные имена пользователей, но все они входят в одну группу. Однако это интернет-сервер, поэтому «другие» пользователи должны иметь (в общем) доступ только для чтения. Так что я хочу иметь эти стандартные разрешения:

файлов: 664
каталогов: 771

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

Мы загружаем файлы на сервер с помощью SFTP-входа в Nautilus, монтируя сервер с помощью sshfs и обращаясь к нему в Nautilus, как если бы это была локальная папка, и с помощью SCP-ing в командной строке. Это в основном охватывает нашу ситуацию и то, что мы стремимся сделать.

Теперь я прочитал много вещей о прекрасной функциональности Umask. Из того, что я понимаю, umask (вместе с PAM) должен позволять мне делать именно то, что я хочу: устанавливать стандартные разрешения для новых файлов и каталогов. Однако, после многих часов чтения и проб и ошибок, я все еще не понимаю, как это работает. Я получаю много неожиданных результатов. Я действительно хотел бы получить твердое понимание Umask и многие вопросы без ответа. Я опубликую эти вопросы ниже, вместе с моими выводами и объяснением моих испытаний, которые привели к этим вопросам. Учитывая, что многие вещи идут не так, я думаю, что я делаю несколько вещей неправильно. Итак, поэтому есть много вопросов.

ПРИМЕЧАНИЕ: я использую Ubuntu 9.10 и поэтому не могу изменить sshd_config, чтобы установить маску для SFTP-сервера. Установленный SSH OpenSSH_5.1p1 Debian-6ubuntu2 <требуется OpenSSH 5.4p1. Итак, пошли вопросы.

1. НУЖНО ЛИ ПЕРЕЗАПУСТИТЬ, ЧТОБЫ ИЗМЕНЕНИЯ PAM ВЗЯЛИ?

Давайте начнем с этого. Было задействовано так много файлов, и я не смог выяснить, что влияет и что не влияет на вещи, также потому, что я не знал, нужно ли мне перезапускать всю систему, чтобы изменения PAM вступили в силу. Я сделал это, не увидев ожидаемых результатов, но действительно ли это необходимо? Или я могу просто выйти с сервера и снова войти, и должны ли новые политики PAM быть эффективными? Или есть какая-нибудь программа PAM для перезагрузки?

2. Есть ли один файл для изменения, который влияет на всех пользователей для всех сессий?

В итоге я изменил МНОГИЕ файлы, так как я читал МНОГИЕ разные вещи. В итоге я установил umask в следующих файлах:

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

Я хочу, чтобы это изменение применялось ко всем пользователям, поэтому лучше всего было бы применить общесистемные изменения. Это может быть достигнуто?

3. ПОСЛЕ ВСЕГО, ЭТО ЕСТЬ UMASK, РАБОТАЕТ?

Поэтому после замены umask на 0002 во всех возможных местах я запускаю тесты.

------------ SCP -----------

ТЕСТ 1:

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

Давайте проверим разрешения:

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

ОБНОВЛЕНИЕ: исправлено ТОЛЬКО установкой umask в pam.d / common-session (см. Комментарии)

--------- SSH ------------

ТЕСТ 2:

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- SFTP -----------

Наутилус: sftp: // сервер / дом /

Скопируйте и вставьте новый файл с клиента на сервер (777 на клиенте)

ТЕСТ 3:

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

Создайте новый файл через Nautilus. Проверьте права доступа к файлам в терминале:

ТЕСТ 4:

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

Я имею в виду ... ЧТО только что здесь произошло ?! Мы должны получить 644 каждый раз. Вместо этого я получаю 711, 777, 600, а затем один раз 644. И 644 достигается только при создании нового пустого файла через SSH, что является наименее вероятным сценарием.

Поэтому я спрашиваю, работает ли umask / pam в конце концов?

ОБНОВЛЕНИЕ: исправлен тест 4 ТОЛЬКО установкой umask в pam.d / common-session (см. Комментарии)

4. ТАК ЧТО ОЗНАЧАЕТ UMASK SSHFS?

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

Вот как мы монтируем:

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

ПРИМЕЧАНИЕ: мы используем umask = 113, потому что, очевидно, sshfs начинается с 777 вместо 666, поэтому с 113 мы получаем 664, что является желаемым разрешением файла.

Но сейчас происходит то, что мы видим все файлы и каталоги, как будто они 664. Мы просматриваем в Nautilus каталог / mnt и:

  • Щелкните правой кнопкой мыши -> Новый файл (новый файл) --- ТЕСТ 5
  • Щелкните правой кнопкой мыши -> Новая папка (новая папка) --- ТЕСТ 6
  • Скопируйте и вставьте файл 777 с нашего локального клиента --- ТЕСТ 7

Итак, давайте проверим в командной строке:

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

Но давайте посмотрим на эту же папку на стороне сервера:

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

Какая?! Реальные права доступа к файлам сильно отличаются от того, что мы видим в Nautilus. Так что, этот umask на sshfs просто создает «фильтр», который показывает нереальные права доступа к файлу? И я попытался открыть файл от другого пользователя, но той же группы, которая имела реальные 600 разрешений, но 644 «поддельные» разрешения, и я все еще не мог прочитать это, так что же хорошего в этом фильтре ??

5. UMASK ВСЕ О ФАЙЛАХ. НО ЧТО О ДИРЕКТОРАХ?

Из моих тестов я вижу, что применяемый umask также как-то влияет на права доступа к каталогу. Однако я хочу, чтобы мои файлы были 664 (002), а мои каталоги - 771 (006). Так можно ли использовать разные маски для каталогов?

6. Возможно, UMASK / PAM ДЕЙСТВИТЕЛЬНО ОХЛАЖДАЮТСЯ, НО UBUNTU - ПРОСТО БАГГИ?

С одной стороны, я читал темы людей, которые имели успех с PAM / UMASK и Ubuntu. С другой стороны, я нашел много старых и новых ошибок, связанных с umask / PAM / fuse в Ubuntu:

Поэтому я не знаю, во что больше верить. Должен ли я просто сдаться? Решит ли ACL все мои проблемы? Или у меня опять проблемы с использованием Ubuntu?

Одно предостережение о резервном копировании с использованием tar. Дистрибутивы Red Hat / Centos поддерживают acls в программе tar, но Ubuntu не поддерживает acls при резервном копировании. Это означает, что при создании резервной копии все acls будут потеряны.

Я очень готов перейти на Ubuntu 10.04, если это тоже решит мои проблемы, но сначала я хочу понять, что происходит.

Сообщество
источник

Ответы:

3

Много вещей может происходить здесь.

Первые мысли:

  • да, изменения в pam.d вступают в силу немедленно
  • /etc/pam.d/common-session лучшее место для установки по умолчанию umask
  • любой pam.d umask будет переопределен любой записью в .bashrc,
    но .bashrcбудет прочитан только при определенных обстоятельствах (интерактивная оболочка, не входящая в систему)
  • testfile (711) очень странно
    • как /homeмонтируется, и вы используете ACL?
      (например, что делать ls -ld /homeи getfacl /homeпечатать?)
    • сделал testfileуже существует , прежде чем сделали копию, потому что scpне будет изменять права доступа на файл , который уже существует (если не использовать -pфлаг)
  • Наутилус, как известно, создает файлы другим способом, не зная почему, или каковы правила
  • umask=0113 вероятно вызовет проблемы
  • сервер и клиент работают под одной операционной системой?
    например, если на клиенте включены ACL или Cygwin, поведение может быть другим
  • лучший способ заставить вменяемые разрешения - использовать списки ACL по умолчанию именно потому, что, как вы обнаружили, пользователь umaskможет переопределить их в .bashrcи .bash_profile.

Обновить:

  • umask=0113 для sshfs это неправильно.
    1. Попробуйте установить без указания umask
    2. Создайте новый файл внутри точки монтирования, используя touch.
    3. Вы должны видеть, что он получает только, например -rw-r--r--, без xбитов
    4. Маскируя xбиты, вы можете сломать каталоги,
      а компиляторы не смогут правильно создавать исполняемые файлы

Временное решение:

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

Mikel
источник
Благодарность! Итак, я удалил ВСЕ настройки umask, кроме pam.d / common-session. Это решило несколько вопросов! Тест 1 (SCP) и Тест 4 (Новый файл в Nautilus) теперь работают хорошо. Препятствия теперь копируют файл с любыми разрешениями в Nautilus на сервер (тест 3 - все еще 777 вместо 664). И каталог выдает. И сервер, и клиент - Ubuntu (хотя 9.10 против 10.10), и дополнительные ACL не включены.
Похоже, копирование с помощью Nautilus сохраняет права доступа, как cp -pи scp -pбыло бы.
Микель
Есть идеи как это изменить ??
Какое поведение вы хотите? Вы можете установить разрешения по умолчанию для новых файлов, используя списки ACL по умолчанию. Наутилус будет соблюдать ACL по умолчанию. См. Vanemery.com/Linux/ACL/linux-acl.html для обзора и suse.de/~agruen/acl/linux-acls/online для всех деталей.
Микель
Обратите внимание, что списки ACL по умолчанию не обеспечивают максимальный набор разрешений, они просто делают эти разрешения по умолчанию. cp -p, scp -pИ копирование с помощью Nautilus - прежнему будет пытаться сделать разрешения на копии, так же , как файл копируется.
Микель
0

Это не связано с PAM / umask, но может быть полезно для вас.

Если вы setgid каталога, то все файлы и каталоги , созданные в нем, автоматически присваиваются своей группой.

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file
k0001
источник
Благодарность! Я не знал об этом. Это не решает проблемы с разрешениями, но действительно полезно!
0

ACL должны нормально работать для вас.

Установите ACL по умолчанию для всех папок группы, которые затем будут наследоваться всеми будущими файлами и каталогами.

Что-то вроде setfacl -m d:g:uploaders:rwxдолжно работать.

Чтобы исправить существующие разрешения:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

Похоже, что если при копировании файла установлено «preserve», ACL по умолчанию не работает. В этом случае я могу только предложить запустить команды поиска в cron или отслеживать файловую систему на предмет изменений.

Стивен
источник