Дайте разрешения на запись нескольким пользователям в папке в Ubuntu

80

Есть папка, которая принадлежит пользователю 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ошибку. Пожалуйста, помогите мне.

TheVillageIdiot
источник

Ответы:

144

Есть два способа сделать это: установить каталог для записи "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если вы хотите, чтобы другие читали и выполняли файлы и т. Д. Изменения в назначениях групп не вступят в силу, пока пользователи не выйдут из системы и не вернутся назад. в.

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

Эндрю Ламберт
источник
2
Возможно, вы также захотите установить флаг set-group-ID для каталогов, чтобы новые файлы и подкаталоги автоматически принадлежали нужной группе:sudo find /path/to/the/directory -type d -exec chmod 2770 '{}' \;
Marcello Nuccio
8
Я бы не использовал chmod 770, 775 или что-то еще. Это портит права всех файлов. Вместо этого используйте что-то вроде chmod -R g+wдобавления разрешений на запись, не портя все остальное.
Кристиан Варга
2
Если пользователь создает там новый файл (скажем, mysql by SELECT INTO OUTFILE), он устанавливает разрешения для своей основной группы ( mysqlв данном случае), и файл в любом случае недоступен для другого пользователя. Как обойти это?
Олекса
2
Что если вы хотите предоставить пользователям доступ на запись к папке без изменения владельца папки, например, если вы не хотите связываться с разрешениями apache для папки public_html?
codecowboy
2
Примечание: «Изменения в назначениях групп не вступят в силу, пока пользователи не выйдут из системы и не войдут обратно» Я пропустил это :)
Владимир Вуканац
3

Пример сценария показывает пример, чтобы дать 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 
Alper
источник