Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

ПРИМЕЧАНИЕ: я использую Ubuntu 9.10 и поэтому не могу изменить sshd_config чтобы установить umask для 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-sessions (см. Комментарии)

--------- 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)

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

ТЕСТ 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-sessions (см. Комментарии)

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 и:

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

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)

Какой?! Разрешения на РЕАЛЬНЫЕ файлы сильно отличаются от того, что мы видим в Наутилусе. Итак, эта маска 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 поддерживают ACL в программе tar, но Ubuntu не поддерживает ACL при резервном копировании. Это означает, что при создании резервной копии все ACL будут потеряны.

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

Здесь может происходить многое.

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

  • да, изменения 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 флаг)
  • Известно, что Nautilus создает файлы по-другому, не знаю почему и каковы правила
  • umask=0113 вероятно вызовет проблемы
  • Сервер и клиент работают под одной и той же операционной системой?
    например, если на клиенте включены списки управления доступом или Cygwin, поведение может быть другим.
  • лучший способ принудительно установить разумные разрешения - использовать списки управления доступом по умолчанию именно потому, что, как вы обнаружили, umask может быть изменен пользователем в .bashrc и .bash_profile.

Обновить:

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

Обходной путь:

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

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 по умолчанию не работает. В этом случае я могу только предложить запускать команды find в cron или отслеживать изменения файловой системы.

Это не связано с 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