Tôi có một tập lệnh bash dài và dài, trong đó một số lệnh cần được chạy dưới quyền root trong khi phần lớn các lệnh cần được chạy như người dùng thông thường trước sudo, vì nó sẽ gây rối quyền sở hữu tệp và như vậy.
Tôi đã đưa ra một số phương pháp, nhưng mỗi phương pháp đều có một số vấn đề
Phương pháp 1: Sử dụng sudo bên trong tệp
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Điều này sẽ nhìn tốt, từ cách viết mã. sudo
được viết trước một vài câu lệnh thực sự cần được chạy bằng root, nhưng nếu thời gian giữa mỗi sudo
cuộc gọi quá dài sudo
lại yêu cầu nhập mật khẩu. Ngoài ra, nếu lần thực hiện đầu tiên sudo
không thành công, ví dụ do mật khẩu không hợp lệ, phần còn lại của tập lệnh vẫn được thực thi.
Phương pháp 2: sử dụng sudo để gọi tệp và sau đó đổi lại người dùng ban đầu khi cần
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Điều này cũng hút, bởi vì tôi cần phải thêm su username -c
vào trước hầu hết các dòng. Cũng có thể tìm tên người dùng ban đầu sau khi sudo
có thể, nhưng cồng kềnh.
Có cách nào tốt hơn?
Chỉnh sửa: Tôi chỉ đăng các kịch bản nhỏ, vô nghĩa ở đây để hiển thị những gì tôi đang nói về. Trong kịch bản thực tế tôi có một số dòng cần sudo (bắt đầu và dừng dịch vụ), một số dòng không quan trọng nếu có sudo và khá nhiều dòng thực sự cần phải chạy mà không có sudo.
man sudo
? -v, --validate
'Cập nhật thông tin đăng nhập được lưu trong bộ nhớ cache của người dùng, xác thực người dùng nếu cần. Đối với plugin sudoers, điều này kéo dài thời gian chờ sudo thêm 15 phút theo mặc định, nhưng không chạy lệnh. Không phải tất cả các chính sách bảo mật đều hỗ trợ thông tin lưu trữ. ' (Nếu bạn chạy nó đủ thường xuyên, việc xác thực sudo không nên hết thời gian.)
sudo
nếu nó cần phải có quyền nâng cao. Nhưng không có điểm nào để chuyểnsu username -c
sang chạyecho
. Nói cách khác, âm thanh này giống như một [XY]. Bạn có thể chỉnh sửa và giải thích kịch bản của bạn sẽ thực sự làm gì và tại sao bạn cảm thấy cần phải chuyển đổi người dùng thường xuyên không?