// Обновлено 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, если это решит и мои проблемы, но сначала я хочу понять, что происходит.
Здесь может происходить многое.
Первые мысли:
/etc/pam.d/common-session
лучшее место для установки значения по умолчанию umask
.bashrc
,.bashrc
читается только при определенных обстоятельствах (интерактивная оболочка без входа в систему)testfile (711)
очень странно /home
установлен, и вы используете ACL?ls -ld /home
и getfacl /home
Распечатать?)testfile
уже существовали до того, как вы сделали копию, потому что scp
не изменит разрешения для уже существующего файла (если вы не используете -p
флаг)umask=0113
вероятно вызовет проблемыumask
может быть изменен пользователем в .bashrc
и .bash_profile
.Обновить:
umask=0113
для sshfs это неправильно. umask
touch
. -rw-r--r--
, без x
биты 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 или отслеживать изменения файловой системы.
Прочтите также это решение: Как установить структуру разрешений для нескольких пользователей, редактирующих несколько сайтов в / var / www в Ubuntu 9.10?
Это не связано с 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