Intereting Posts
Удаление файла * .run Замените строку в столбце файла CSV другой строкой с одной цитатой Как установить subversion 1.6.x на SLE11? Получите строку и поместите ее в начале строки, пока не будет найдена следующая строка На ошибке страницы, как Unix определяет, находится ли адрес сбоя в области подкачки? Свежая установка Windows 7 с USB на машине с Ubuntu и Windows 7 Почему dig -6 google.com не работает для меня? Любые советы для выживания Terminal.app? Как отображать дескрипторы открытых файлов, но не используя команду lsof Почему я не могу убить оболочку с помощью PID, полученного из специальной переменной $$? высокая температура жесткого диска и частый доступ во время простоя Как загрузить 2-й Gen Zenbook с помощью USB и установить Debian? Как узнать, сколько бит файла имеет одна команда? Почему / etc / lvm / archive или / etc / lvm / backup недоступны для чтения всем Проблема с использованием postgres sql в ubuntu 16.04

Создайте файл в качестве другого пользователя и группы

У меня есть сценарий bash, который должен записывать много файлов локально, а затем нужно установить владельца в apache, а группу – в определенную группу пользователей (это не член apache).

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

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

Другими словами: существует ли способ, которым root может создать файл как пользователь X и группу Y, если X не является членом Y?

Я пробовал использовать runuser, но я не могу установить группу (предположительно потому, что apache не принадлежит группе).

Я знаю, что вы можете использовать chmod для изменения разрешений и добавления комбинации пользователей / групп. Я спрашиваю, есть ли способ открыть файл для записи и использовать любую комманду user / group при ее создании.

Попытка использования sudo:

[root@centos7 tmp]# groups angelo angelo : angelo wheel [root@centos7 tmp]# groups apache apache : apache [root@centos7 tmp]# sudo -u angelo -g apache touch angelo-file Sorry, user root is not allowed to execute '/bin/touch angelo-file' as angelo:apache on centos7.gravite.local. [root@centos7 tmp]# ls -ld angelo-file ls: cannot access angelo-file: No such file or directory [root@centos7 tmp]# sudo -u angelo -g angelo touch angelo-file [root@centos7 tmp]# ls -ld angelo-file -rw-r--r-- 1 angelo angelo 0 Nov 12 03:13 angelo-file 

Если вы хотите создать файл как отдельный пользователь и группу без использования chown , вы можете использовать sudo и указать пользователя и группу:

 sudo -u \#49 -g \#58 touch /tmp/something 

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


Или вы можете запустить оболочку в качестве текущего пользователя, а группа настроена на что-то еще:

 sudo runuser "$USER" -g somegroup 

Я с успехом пробовал это на боксерской коробке:

 [vagrant@localhost ~]$ sudo runuser "$USER" -g floppy [vagrant@localhost ~]$ touch testfile [vagrant@localhost ~]$ ls -l testfile -rw-r--r--. 1 vagrant floppy 0 Nov 9 15:57 testfile [vagrant@localhost ~]$ 

Это несмотря на то, что «бродячий» пользователь не входит в группу «флоппи».

Пока вы запускаете скрипт с повышенными привилегиями, проблем не должно быть. Например:

 #!/usr/bin/env bash touch foobar chown www-data:sudo foobar 

Если вы работаете как обычный пользователь, это не сработает:

 $ ./foo.sh chown: changing ownership of `foobar': Operation not permitted 

Но если вы запустите его как root, он отлично работает:

 $ sudo foo.sh $ ls -l foobar -rw-r--r-- 1 www-data sudo 26M Sep 17 17:34 foobar 

Если у вас есть сценарий bash, запустите его как root и исправьте право собственности внутри самого скрипта.

Вы можете использовать 'setuid' на ac wrapper для chmod, но это НЕ рекомендуется, поскольку это очень ОГРОМНОЕ отверстие безопасности, если оно не ограничено в программировании.