Вопрос Как обновить права на скрипт?


У меня есть сценарий, который изменяет файлы и групповые разрешения. Но это не приносит эффекта ", пока я не закрою сессию и не открою новую.

Инструкции, в которых разрешены изменения:

sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps `whoami`

Инструкция, в которой я получаю сообщение об ошибке:

cd /home/lucio/server/webapps/
cp assets/gunicorn_start.bash.template hello_django/bin/gunicorn_start.bash

Последняя строка дает мне следующую ошибку:

cp: cannot create regular file 'hello_django/bin/gunicorn_start.bash': Permission denied

Это должно помочь:

screenshoot

Я попытался использовать login username после изменений привилегий, но это абсолютно ничего не делает.

Как я могу обновить привилегии без выхода из сценария?


2
2018-05-19 23:50


происхождения




ответы:


Я думаю, что лучшее, что вы можете сделать, это запустить команды, которые нужно запустить, используя sg,

DESCRIPTION
   The sg command works similar to newgrp but accepts a command. The
   command will be executed with the /bin/sh shell. With most shells you
   may run sg from, you need to enclose multi-word commands in quotes.
   Another difference between newgrp and sg is that some shells treat
   newgrp specially, replacing themselves with a new instance of a shell
   that newgrp creates. This doesn't happen with sg, so upon exit from a
   sg command you are returned to your previous group ID.

Итак, после того, как вы создали группу и добавили себя к ней, вы сможете запускать команды в качестве члена этой группы, sg groupname command, Так, например, это будет работать:

sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps $(whoami)

## From now on, run all commands through sg
sg webapps "mkdir foorbar"

Поскольку это будет больно писать, я бы поставил ее в функцию:

run_as_webapps() sg webapps "$@"

Затем вызовите все команды, которые вам нужно вызвать, используя эту функцию

run_as_webapps mkdir foobar

И в конце концов, возможно, было бы проще просто запустить весь скрипт вместо root. Либо это, либо два сценария, один, чтобы настроить группы, а другой сделать все остальное. Просто выйдите из системы и войдите в систему, прежде чем запускать второй.


Спецификация POSIX ясно указывает, что функции должны быть определены следующим образом:

foo () command

По причинам, которые я не понимаю, у ОП были проблемы с этим и вместо этого пришлось использовать

function run_as_webapps(){
    sg webapps "$@"
}

2
2018-05-20 00:20



Это не сработало. Затем я добавлю ключевое слово function и сделано! Так: function run_as_webapps(){sg webapps"$*"} выполнил эту работу. - Lucio
Компромисс @Lucio достиг :). См. Обновленный ответ. - terdon♦
@ Лусио, прошу прощения, я забыл function что было всей причиной этого редактирования. Нужно поспать. Спасибо за исправление. - terdon♦