Câu hỏi Làm thế nào để làm mới các đặc quyền trên một kịch bản?


Tôi có một kịch bản sửa đổi các tập tin và quyền của nhóm. Nhưng nó không mang lại hiệu quả cho đến khi tôi đóng phiên và mở một phiên mới.

Hướng dẫn nơi quyền được thay đổi:

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`

Chỉ dẫn nơi tôi gặp lỗi:

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

Dòng cuối cùng cho tôi lỗi sau:

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

Điều này sẽ giúp:

screenshoot

Tôi đã thử sử dụng login username sau khi thay đổi đặc quyền nhưng điều đó hoàn toàn không có gì.

Làm thế nào tôi có thể cập nhật các đặc quyền mà không cần thoát khỏi tập lệnh?


2
2018-05-19 23:50


gốc




Các câu trả lời:


Tôi nghĩ điều tốt nhất bạn có thể làm là chạy các lệnh bạn cần chạy 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.

Vì vậy, sau khi bạn đã tạo nhóm và tự thêm vào nhóm, bạn sẽ có thể chạy các lệnh với tư cách là thành viên của nhóm đó sg groupname command. Vì vậy, ví dụ, điều này sẽ làm việc:

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"

Vì đó sẽ là một nỗi đau để viết, tôi sẽ đặt nó vào một chức năng:

run_as_webapps() sg webapps "$@"

Sau đó, gọi bất kỳ lệnh nào bạn cần gọi bằng chức năng đó

run_as_webapps mkdir foobar

Và vào cuối ngày, có thể dễ dàng hơn để chạy toàn bộ tập lệnh dưới dạng root. Hoặc là có hoặc có hai kịch bản, một để thiết lập các nhóm và một để làm mọi thứ khác. Chỉ cần đăng xuất và đăng nhập lại trước khi chạy chương trình thứ hai.


Các Đặc tả POSIX nêu rõ rằng các hàm cần được xác định theo cách này:

foo () command

Vì những lý do tôi không hiểu, OP gặp rắc rối với điều này và thay vào đó phải sử dụng

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

2
2018-05-20 00:20



Nó không hoạt động. Sau đó, tôi thêm từ khóa function và thực hiện! Vì thế: function run_as_webapps(){sg webapps"$*"} đã làm công việc. - Lucio
@Lucio thỏa hiệp đạt :). Xem câu trả lời được cập nhật. - terdon♦
@Lucio damn, xin lỗi tôi đã quên mất function đó là toàn bộ lý do cho bản chỉnh sửa đó. Cần ngủ. Cảm ơn bạn đã sửa. - terdon♦