Linux, почему я не могу писать, хотя у меня есть разрешения группы?

108

Я хочу создать файл в каталоге, принадлежащем группе сотрудников, членом которой я являюсь. Почему я не могу этого сделать?

bmccann@bmccann-htpc:~$ ls -l /usr/local/lib/R/
total 4
drwxrwsr-x 2 root staff 4096 2010-07-31 16:21 site-library
bmccann@bmccann-htpc:~$ id -nG bmccann
bmccann adm dialout cdrom plugdev staff lpadmin admin sambashare
bmccann@bmccann-htpc:~$ touch /usr/local/lib/R/site-library/tmp
touch: cannot touch `/usr/local/lib/R/site-library/tmp': Permission denied
Бен Макканн
источник
1
У вас есть разрешение на запись в каталог библиотеки сайта в / usr / local / lib / R?
Тед Хопп,
1
Разве первая опубликованная мной команда не показывает, что у группы есть права на запись?
Бен Макканн,
3
Есть ли уже site-library/tmpфайл / каталог присутствует?
Джеремайя Уиллкок

Ответы:

200

Вы вышли из системы и снова вошли в систему после внесения изменений в группу? См .:
Ответ суперпользователя, связанный с ошибкой разрешений на касание

AdamJonR
источник
1
Если я открою новое окно терминала, разве это не будет считаться новым процессом? Я почти уверен, что пробовал это, и это не сработало, заставив меня выйти из системы.
Бен Макканн,
7
@Ben: запуск нового процесса наследует uid / gids от своего родителя. Вам нужно привилегированная программа (например login, suи т.д.) на самом деле установить UID / GID.
ephemient
4
Если это неудобно выход из системы / Войти обратно, как следует из вышесказанного, вы можете сделать это в терминале: su your-user-name. Полученная оболочка будет иметь ваши обновленные разрешения для группы.
TJ Crowder
2
Спасибо за это! Я потратил около 15 минут, выдергивая волосы, пытаясь понять, почему у меня нет групповых разрешений в папке.
Джереми Спенсер
2
Мне потребовался перезапуск на Ubuntu 16.04 x64, а не просто выход из системы и повторный вход в систему,
Kartikey Tanna
15

Почему пользователь Linux не может редактировать файлы в группе, частью которой он является?

Я использую Ubuntu 12.04, и у меня была такая же проблема, когда пользователь не мог писать в файл, к которому ему разрешен групповой доступ. Например:

whoami                                        //I am user el
  el                                            

touch /foobar/test_file                       //make a new file

sudo chown root:www-data /foobar/test_file    //User=root  group=www-data

sudo chmod 474 /foobar/test_file              //owner and others get only read, 
                                              //group gets rwx


sudo groupadd www-data                        //create group called www-data    

groups                                        //take a look at the groups and see
 www-data                                     //www-data exists.

groups el                                     //see that el is part of www-data
  el : www-data                               

Перезагрузите терминал сейчас, чтобы убедиться, что пользователи и группы вступили в силу. Войти как эл.

vi /foobar/test_file                          //try to edit the file.

Выдает предупреждение:

Warning: W10: Warning: Changing a readonly file"

Какой? Я все сделал правильно, почему не работает?

Ответ:

Сделайте полную перезагрузку компьютера. Для решения этих проблем остановки терминала недостаточно.

Я думаю, что происходит то, что apache2 также использует группу www-data, поэтому задача каким-то образом препятствовала правильному применению пользователей и групп. Вам нужно не только выйти из системы, но и остановить и перезапустить все службы, которые используют вашу группу. Если при перезагрузке этого не происходит, у вас проблемы посерьезнее.

Эрик Лещинский
источник
1
Что такое «большие проблемы»?
Ejaz
13

У меня была такая же проблема, проверьте, есть ли в папке еще правила ACL или нет!

Если вы видите + (плюс) при отображении папки, это означает, что для нее действуют особые правила доступа. Например:

[user_in_apache_group@web02 html]$ ls -l
total 16
drwxrwxr-x  16 apache apache 4096 Sep  4 13:46 ilias
drwxrwxr-x+ 15 apache apache 4096 Sep  4 13:46 ilias5

Посмотреть разрешение:

[user_in_apache_group@web02 html] getfacl ilias5
# file: ilias5
# owner: apache
# group: apache
user::rwx
user:user_in_apache_group:r-x
group::rwx
mask::rwx
other::r-x

Это означает, что у моего пользователя (user_in_apache_group) нет прав на запись в эту папку.

Решение заключается в том, что сказал @techtonik, добавьте разрешение на запись для пользователя:

[user_in_apache_group@web02 html]$ sudo setfacl -m u:user_in_apache_group:rwx ./ilias5

Еще раз проверьте разрешение:

[user_in_apache_group@web02 html] getfacl ilias5
...
user:user_in_apache_group:rwx
...

Надеюсь, поможет. ;)

Ласло Лугоши
источник
8

Используйте Linux ACL (списки контроля доступа) - это более детализированная версия системы разрешений,

setfacl -R -m 'group:staff:rwx' -m 'd:group:staff:rwx' /usr/local/lib/R/

Это устанавливает как активные права для каталога, так и права по умолчанию для всего, что создано в нем.

Это не сработает без повторного входа в систему, если вы только что добавили себя в staffгруппу, но вы можете установить разрешение только для себя для текущего сеанса.

анатолий техтоник
источник
5

У меня возникла проблема, когда пользователь не мог получить доступ к /foo/bar/bazкаталогу, даже если у него были разрешения, потому что у него не было доступа к barкаталогу.

Колюня
источник
-2

Перед добавлением содержимого в этот файл проверьте, есть ли у родительского каталога разрешение.

sudo chmod -R 777 /yourDir/file.log
Mani P
источник