Редактировать файлы в docroot от имени другого пользователя

Редактировать файлы в docroot от имени другого пользователя

13.06.2017 06:46:57 Просмотров 6 Источник

Имеется сайт по категории /var/www/public_html содержимому выставлены права apache owner/group www-data, вопрос как задать так-же полные права на другого пользователя, я как понимаю что не достаточно просто этого пользователя тоже поместить в группу www-data? (Вариант с chmod 777 - не предлагать).

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/678846/%d0%a0%d0%b5%d0%b4%d0%b0%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c-%d1%84%d0%b0%d0%b9%d0%bb%d1%8b-%d0%b2-docroot-%d0%be%d1%82-%d0%b8%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d0%b5%d0%bb%d1%8f#comment993855_678846
то есть сделать так чтоб Owner был я, а Group была www-data? ) мне бы саму логику понять, и главное чтоб для работы апача всего хватало

Ответы - Редактировать файлы в docroot от имени другого пользователя / Редактировать файлы в docroot от имени другого пользователя

Является ответом!
aleksandr barakin

16.06.2017 07:28:39

  1. наиболее простой и логичный вариант: обслуживать данный сайт не от имени пользователя www-data/apache/т.п., а от имени того пользователя, который вам требуется (с соответствующим изменением принадлежности файлов/каталогов).
  2. более сложный (в некоторых отношениях) и не всегда удобный вариант: воспользоваться программой bindfs (входит в одноимённый пакет в популярных дистрибутивах), которая с помощью интерфейса fuse умеет монтировать каталог в другое место, подменяя при этом принадлежность и права на входящие в него файлы/каталоги.

    пример (для его работы необходимо раскомментировать строку, содержащую user_allow_other в файле /etc/fuse.conf):

    1. создадим от имени пользователя www-data каталог 1 и внутри него файл1:

      $ sudo -u www-data mkdir 1
      $ sudo -u www-data touch 1/файл1
      

      это будет наш «исходный» каталог. вот так выглядят права и принадлежность:

      $ tree -up
      .
      └── [drwxr-xr-x www-data]  1
          └── [-rw-r--r-- www-data]  файл1
      
    2. создадим от имени того же пользователя каталог 2, который будет «рабочим»:

      $ sudo -u www-data mkdir 2
      
    3. и примонтируем от имени того же пользователя каталог 1 в каталог 2, указав, что владельцем файлов/каталогов внутри 2 будет user:

      $ sudo -u www-data bindfs -u user 1 2
      
    4. видим, что каталог 2 и его содержимое принадлежит пользователю user:

      $ tree -up
      .
      ├── [drwxr-xr-x www-data]  1
      │   └── [-rw-r--r-- www-data]  файл1
      └── [drwxr-xr-x user    ]  2
          └── [-rw-r--r-- user    ]  файл1
      
    5. теперь от имени пользователя user удалим 2/файл1 и создадим 2/файл2:

      $ sudo -u user rm 2/файл1
      $ sudo -u user touch 2/файл2
      
    6. видим, что эти изменения «синхронно» коснулись и содержимого «исходного» каталога 1:

      $ tree -up
      .
      ├── [drwxr-xr-x www-data]  1
      │   └── [-rw-r--r-- www-data]  файл2
      └── [drwxr-xr-x user    ]  2
          └── [-rw-r--r-- user    ]  файл2
      

      причём обратите внимание, что новый 1/файл2 принадлежит пользователю www-data. это произошло потому, что именно от его имени мы выполняли программу bindfs. если бы выполняли от имени пользователя root, то он и стал бы владельцем файла.

    7. не забываем отмонтировать каталог 2 (от имени того же пользователя, который монтировал):

      $ sudo -u www-data fusermount -u 2
      
  3. если файловая система поддерживает posix acl, то можно воспользоваться программой setfacl:

    1. смотрим текущий список прав (каталог 1, внутри него файл1):

      $ getfacl 1/ 1/файл1
      # file: 1/
      # owner: www-data
      # group: www-data
      user::rwx
      group::r-x
      other::r-x
      
      # file: 1/файл1
      # owner: www-data
      # group: www-data
      user::rw-
      group::r--
      other::r--
      
    2. добавим для каталога 1 рекурсивно (-R) и с наследованием (d: в начале параметра с правами) набор битов rwx и для someuser, и для www-data (чтобы и тот и другой могли создавать файлы/каталоги, и сразу получать на них права rwx):

      $ sudo setfacl -Rm d:u:someuser:rwx,u:someuser:rwx,d:u:www-data:rwx,u:www-data:rwx 1
      

      смотрим, что получилось:

      $ getfacl 1/ 1/файл1
      # file: 1/
      # owner: www-data
      # group: www-data
      user::rwx
      user:www-data:rwx
      user:someuser:rwx
      group::r-x
      mask::rwx
      other::r-x
      default:user::rwx
      default:user:www-data:rwx
      default:user:someuser:rwx
      default:group::r-x
      default:mask::rwx
      default:other::r-x
      
      # file: 1/файл1
      # owner: www-data
      # group: www-data
      user::rw-
      user:www-data:rwx
      user:someuser:rwx
      group::r--
      mask::rwx
      other::r--
      
    3. проверяем, создавая от имени someuser каталог 1/2 и файл 1/2/файл2:

      $ sudo -u someuser mkdir 1/2
      $ sudo -u someuser touch 1/2/файл2
      

      и видим, что, хотя владельцем и является someuser, но и у www-data имеется (унаследованный) набор прав rwx:

      $ getfacl 1/2 1/2/файл2 
      # file: 1/2
      # owner: someuser
      # group: someuser
      user::rwx
      user:www-data:rwx
      user:someuser:rwx
      group::r-x
      mask::rwx
      other::r-x
      default:user::rwx
      default:user:www-data:rwx
      default:user:someuser:rwx
      default:group::r-x
      default:mask::rwx
      default:other::r-x
      
      # file: 1/2/файл2
      # owner: someuser
      # group: someuser
      user::rw-
      user:www-data:rwx       #effective:rw-
      user:someuser:rwx       #effective:rw-
      group::r-x              #effective:r--
      mask::rw-
      other::r--
      
Закрыть X