Tôi đang viết một tập lệnh (thực ra là sự kết hợp giữa tập lệnh và tập tin thực hiện) để cài đặt các phụ thuộc bên ngoài: một số apt-get
lệnh, một số git
nhân bản, xây dựng, cài đặt, thêm người dùng vào nhóm, ...
Một số thao tác trong các tập lệnh này yêu cầu quyền siêu người dùng, một số thì không.
Cho đến bây giờ tôi đã chạy toàn bộ quá trình tạo với sudo, nhưng nó có một số nhược điểm:
git
repos tôi nhân bảnroot
là chủ sở hữu, có nghĩa là tôi không thể sửa đổi chúng sau đó mà không cósudo
hoặcchown
- các tập lệnh thêm người dùng vào các nhóm không biết nên thêm người dùng nào kể từ khi
whoami
trả vềroot
Cách tốt nhất để chạy như siêu người dùng chỉ các lệnh yêu cầu nó là gì? Lý tưởng nhất là quá trình vẫn sẽ yêu cầu tôi nhập sudo
mật khẩu của mình , nhưng chỉ một lần khi bắt đầu quá trình cài đặt. Sau đó, nó sẽ quên nó vào cuối, nhưng giữ nó mọi lúc cho đến khi đó (có thể mất vài giờ).
Các giải pháp tôi đã tìm thấy trực tuyến bao gồm:
sudo -v
tại nhận thức của kịch bản, nhưng nếu tôi hiểu chính xác thì lần này ra. Kịch bản của tôi có thể chạy trong một vài giờ- chạy tập lệnh với
sudo
, nhưng các lệnh không cần siêu người dùngsudo -u $(logname) <command>
. Đây là những gì tôi làm bây giờ, nhưng cảm giác như nó phải là cách khác.
Lý tưởng nhất, tôi muốn kịch bản của tôi:
- yêu cầu thông tin đăng nhập
- chạy các lệnh bình thường khi người dùng đăng nhập
- chạy các lệnh sudo với thông tin đăng nhập ở bước 1
sudo -k
để đóng phiên siêu người dùng
su $SUDO_USER -c command
cho các lệnh chạy như người dùng bình thường.
SUDO_USER
biến môi trường. Nếu có, nó sẽ chứa tên người dùng của người dùng gọi sudo. Vì vậy, bạn có thể (với quyền root) chown $ SUDO_USER: $ SUDO_GID $ your_files. Tương tự, bạn có thể kiểm tra các biến này để các lệnh adduser của bạn biết người dùng nào cần thêm.