1

У меня были некоторые проблемы с разрешениями, программисты моего сайта хотели, чтобы я добавил администратора в группу apache, а затем установил некоторые разрешения. Мои знания Linux весьма ограничены, поэтому я нашел в Интернете следующее:

chown -R apache:apache /path/to/webserver/www 
chmod -R g+rw /path/to/webserver/www

Это работало отлично, и все было хорошо в течение нескольких дней (кстати, я использовал "apache" вместо www-data, поскольку я нахожусь на CentOS). Теперь они говорят, что не могут загружать файлы в эту папку, так как она принадлежит пользователю apache, хотя они хотят, чтобы она принадлежала пользователю apache AND.

Как добавить «admin» к владельцу в дополнение к «apache»?

Спасибо

Редактировать:

Я использовал команду mount и получил следующее:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=16377400k,nr_inodes=4094350,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda3 on / type ext4 (rw,relatime,quota,usrquota,grpquota,data=ordered)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=35,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
/dev/sda5 on /tmp type ext4 (rw,nosuid,nodev,noexec,relatime,data=ordered)
/dev/sda2 on /boot type ext2 (rw,relatime)

Далее я использовал tune2fs -l | grep acl и получил следующее:

Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g group]

        [-i interval[d|m|w]] [-j] [-J journal_options] [-l]

        [-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]

        [-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]

        [-M last_mounted_dir] [-O [^]feature[,...]]

        [-E extended-option[,...]] [-T last_check_time] [-U UUID]

        [ -I new_inode_size ] device

Я не уверен, нормально это или нет - как мне поступить?

2 ответа2

1

Согласно традиционному разрешению на файл, это невозможно: файл имеет только одного владельца.

Ваш подход, включая администратора к группе Apache, должен работать.

Однако большинство современных файловых систем поддерживают ACL. Если вы хотите использовать ACL для предоставления другому пользователю прав на чтение (r) и запись (w), вы можете использовать команду setfacl:

setfacl -m user:admin:rw /path/to/webserver/www 

Даже если используемая файловая система поддерживает ACL, убедитесь, что она смонтирована с поддержкой ACL. В этом случае вам нужно выполнить команду mount и получить dev, связанный с файловой системой, например:

[root@centos]#mount

/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

Девайс для корневой файловой системы - /dev/sda3 .

Теперь с помощью команды tune2fs вы должны выполнить команду:

[root@centos]tune2fs -l /dev/sda3 | grep acl

Default mount options:    user_xattr acl

В этом случае у него включен acl . Если это не так, то вы должны изменить /etc/fstab, чтобы включить acl в опции, как описано здесь .

0

JCbermu дал ответ с правилом ACL:

setfacl -m user:admin:rw /path/to/webserver/www

Но так администратору не разрешат войти в каталог www

Правильный ACL это:

setfacl -m user:admin:rwx /path/to/webserver/www

С помощью этой команды программистам будут предоставлены только права на создание собственных файлов в этой самой директории. Они не могут ни изменять другие вновь созданные файлы внутри www, ни создавать файлы в подкаталогах www. Поэтому вам нужно добавить следующее правило ACL по умолчанию:

 setfacl -dm user:admin:rwx /path/to/webserver/www

Наилучшим способом является изменение существующих файлов / подпапок в www для соответствия новым ACL и добавление правил по умолчанию для вновь создаваемых файлов / подпапок. В этом случае используйте команду ниже вместо двух выше:

setfacl -Rm d:u:admin:rwX,u:admin:rwX /path/to/webserver/www

Здесь правила для существующих и вновь создаваемых файлов и папок объединяются в одну строку.

-Rm R ecursively м odify списки управления доступом

u:admin:rwX Установить ACL для пользователя admin для существующих файлов и (вложенных) папок начальной папки www

d:u:admin:rwX Установить ACL для пользователя admin для вновь создаваемых файлов и (вложенных) папок

Вы можете удалить все дополнительные ACL в любое время, используя

setfacl -Rb /path/to/webserver/www

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .