Дайте разрешения на запись нескольким пользователям в папке в Ubuntu
Есть папка, которая принадлежит пользователю tomcat6:
drwxr-xr-x 2 tomcat6 tomcat6 69632 2011-05-06 03:43 document
Я хочу разрешить другому пользователю (русеру) права на запись в папку документов. Два пользователя (tomcat6 и ruser) не принадлежат к одной группе. Я пытался использовать setfacl
:
sudo setfacl -m u:ruser:rwx document
но это дает мне setfacl: document: Operation not supported
ошибка. Пожалуйста, помогите мне.
3 ответа
Есть два способа сделать это: установить каталог для записи "world" или создать новую группу для двух пользователей и сделать каталог доступным для записи в эту группу.
Очевидно, что сделать его доступным для записи во всем мире - это плохо, поэтому второй вариант предпочтительнее.
Пользователи в Linux могут принадлежать более чем одной группе. В этом случае вы хотите создать новую группу, давайте назовем это tomandruser
:
sudo groupadd tomandruser
Теперь, когда группа существует, добавьте в нее двух пользователей:
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
Теперь осталось только установить разрешения для каталога:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
Теперь только члены группы tomandruser могут читать, записывать или выполнять что-либо в каталоге. Обратите внимание на аргумент -R для команд chmod и chgrp: он указывает им входить в каждый подкаталог целевого каталога и изменять каждый найденный файл и каталог.
Вы также можете изменить 770 на что-то вроде 774
если вы хотите, чтобы другие могли читать файлы, 775
если вы хотите, чтобы другие читали и выполняли файлы и т. д. Изменения в назначениях групп не вступят в силу до тех пор, пока пользователи не выйдут из системы и не войдут обратно.
Если вы также хотите (вы, вероятно, хотите), чтобы новые файлы, созданные внутри каталога одним из пользователей, автоматически записывались другими участниками группы, см. Здесь.
Пример сценария показывает пример, чтобы дать w (write)/ r (read) / x (execute)
разрешение на заданный путь к папке /path/to/the/directory
за USER1
а также USER2
, Если вы хотите дать только право на запись, пожалуйста, замените rwx
с w
,
#!/bin/bash
# Block others and people in the same group to do read/write/execute on give folder:
sudo chmod 700 /path/to/the/directory
#Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx /path/to/the/directory
#Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx /path/to/the/directory
Мненный ответ:
- Мне нравится размещать общую папку в центральном месте. Не в чужой домашней папке, а
/srv/common
или даже (для безжалостно коротких путей...)/repo
или похожие. - определите новую группу (обычно для всех локальных пользователей, к которым вы хотите присоединиться. Однако не некоторые технические пользователи любят
wwwuser
, если нет веской причины) -
root
хорошо иметь в качестве участника, а также иметь нейтрального владельца этой общей папки - setGid очень важен, так как новые файлы становятся общими членами группы, таким образом
frank:common
, нетfrank:frank
sudo groupadd -f common
usermod -aG common root
usermod -aG common frank
usermod -aG common mike
# sort of hack for instant group refresh w/o logout
# superuser.com/a/345051
su - frank
# sanity test1:
cat etc/group | grep common
common:x:1008:root,frank,mike
# sanity test2:
groups
frank adm cdrom ... common
sudo chown root:common /repo
# (if you have shareable stuff setting somewhere else,
# copy it to here now)
# no right to the world, the right rights to user and group
chmod -R ug+rwXs,o-rwx $dest
# why uppercase X ? → unix.stackexchange.com/a/416885
# why s ? → superuser.com/a/277785
# as there is no such thing as an uppercase S (directories only)
# settings the s attribute on preexisting content would have to happen
# like so:
# find /repo -type d -exec chmod g+s {} \\\;