сделать все новые файлы в каталоге доступным для группы

<p>предположим, у меня есть два пользователя: алиса и боб, группа groupname и папка <code>foo</code>, оба пользователя являются членами groupname (в linux и ext3).</p><p>если я сохраню в качестве пользователя алиса файл под <code>foo</code>, разрешения будут: <code>-rw-r--r-- alice alice</code>. однако возможно ли добиться того, чтобы каждый файл, сохраненный в некотором подкаталоге <code>foo</code>, имел разрешения <code>-rwxrwx--- alice groupname</code> (т.е. владелец алиса, группа groupname)?</p>

<p>вы можете управлять назначенными битами прав доступа с помощью <code>umask</code> и группы, задав для директории <em> setgid </em> значение <code>groupname</code>.</p><pre>\_<code>$ umask 002 # allow group write; everyone must do this $ chgrp groupname . # set directory group to groupname $ chmod g+s . # files created in directory will be in group groupname _обратите внимание, что вы должны сделать chgrp/chmod для каждого подкаталога; он не распространяется автоматически (то есть ни существующие, ни впоследствии созданные каталоги в каталоге  setgid  не будут  setgid , хотя последний будет в группе groupname).также обратите внимание, что umask является атрибутом процесса и применяется ко всем файлам, созданным этим процессом и его дочерними элементами (которые наследуют действующий umask в своих родительских элементах в fork() time) , пользователям может потребоваться установить это в _~/.profile_, и им может потребоваться следить за вещами, не имеющими отношения к вашему каталогу, для которых требуются разные разрешения. <a href="http://modules.sourceforge.net">modules может быть полезно, если вам нужны разные настройки при выполнении разных задач.вы можете управлять вещами немного лучше, если можете использовать posix acl; должна быть возможность указать маску разрешений и группу и обеспечить их разумное распространение. однако поддержка acl для posix несколько переменная.

если это вообще возможно, используйте <a href="http://en.wikipedia.org/wiki/access_control_list">списки контроля доступа (acl) .в linux убедитесь, что используемая вами файловая система поддерживает acl (большинство файловых систем unix поддерживают). возможно, вам придется изменить параметры монтирования, чтобы включить acl: для ext2/ext3/ext4 вам необходимо явно указать параметр монтирования acl, поэтому запись в /etc/fstab должно выглядеть как /dev/sda1 / ext4 errors=remount-ro,acl 0 1. запустить mount -o remount,acl / для активации acl без перезагрузки. также установите инструменты командной строки acl getfacl и setfacl, обычно предоставляемые в пакете с именем acl.теперь, когда однократная установка завершена, измените acl каталога, чтобы дать группе разрешение на запись и сделать эти разрешения унаследованными вновь созданными файлами. под linux:setfacl -d -m group:groupname:rwx /path/to/directory setfacl -m group:groupname:rwx /path/to/directory если acl не являются опцией, сделайте каталог, принадлежащий группе groupname, и установите для него разрешения 2775 или 2770: chmod g+rwxs /path/to/directory. здесь s означает бит setgid; для каталога это означает, что файлы, созданные в этом каталоге, будут принадлежать группе, которой принадлежит каталог.вам также нужно будет установить алису и боба <a href="http://en.wikipedia.org/wiki/umask">mask , чтобы сделать все их файлы доступными для групповой записи по умолчанию. значение umask по умолчанию в большинстве систем - 022, что означает, что файлы могут иметь все разрешения, кроме записи по группам и других. измените это на 002, что означает запретить только разрешение на запись другим. обычно вы устанавливаете эту настройку в своем ~/.profile:umask 002 # or 007 to have files not readable by others 

этот вопрос хорошо подходит для linux <a href="http://en.wikipedia.org/wiki/access_control_list">acl . поскольку вы не указали свою ос, я буду считать linux следующим. вот пример сеанса.я не знаю действительно хорошего acl учебника, но вы могли бы сделать хуже, чем <a href="http://www.vanemery.com/linux/acl/linux-acl.html">http://www.vanemery.com/linux/acl/linux-acl.html обратите внимание, что по умолчанию acl ведет себя как локальный umask. поскольку, по крайней мере, в linux, маски umask применяются глобально, это единственный известный мне способ получить эффект локального маски umask. по какой-то причине это малоизвестная особенность. в сети полно людей, спрашивающих о локальном переопределении umask, но почти никто не думает об использовании acl.также обратите внимание, что вам нужно смонтировать раздел, в котором вы работаете, с поддержкой acl, например./dev/mapper/debian-acl /mnt/acl ext3 defaults,acl 0 2 сессия следует:/mnt/acl$ mkdir foo /mnt/acl$ getfacl foo # file: foo # owner: faheem # group: faheem user::rwx group::r-x other::r-x задайте для группы foo значение staff, а для acl группы и пользователя foo - rwx./mnt/acl$ chgrp staff foo /mnt/acl$ setfacl -r -m u::rwx,g::rwx foo /mnt/acl$ getfacl foo # file: foo # owner: faheem # group: staff user::rwx group::rwx other::r-x </code></pre><p>установите для acls пользователя и группы по умолчанию также <code>rwx</code>. это определяет разрешения, которые файлы и каталоги наследуют от <code>foo</code>. таким образом, все файлы и каталоги, созданные в foo, будут иметь групповые разрешения <code>rw</code>.</p><pre><code>/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo /mnt/acl$ getfacl foo # file: foo # owner: faheem # group: staff user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::--- </code></pre><p>теперь создайте несколько файлов в <code>foo</code> как пользователи <code>faheem</code> и <code>john</code>.</p><pre><code>/mnt/acl$ cd foo /mnt/acl/foo$ touch bar # switch to user john for this next command. /mnt/acl/foo$ touch baz список файлов. обратите внимание, что как файлы, принадлежащие faheem, так и файлы, принадлежащие john, создаются с правами группы rw./mnt/acl/foo$ ls -la total 3 drwxrwxr-x+ 2 faheem staff 1024 may 9 01:22 . drwxr-xr-x 4 faheem faheem 1024 may 9 01:20 .. -rw-rw---- 1 faheem faheem 0 may 9 01:20 bar -rw-rw---- 1 john john 0 may 9 01:22 baz </code></pre>