tôi cần giúp đỡ với một sudo -A
lệnh trong tập lệnh shell. Tùy chọn -A dành cho AskPass. Theo trang người đàn ông sudo:
Thông thường, nếu sudo yêu cầu mật khẩu, nó sẽ đọc mật khẩu từ người dùng
phần cuối. Nếu tùy chọn -A (askpass) được chỉ định, một (có thể
đồ họa) chương trình trợ giúp được thực thi để đọc mật khẩu của người dùng và
xuất mật khẩu ra đầu ra tiêu chuẩn. Nếu SUDO_ASKPASS
biến môi trường được đặt, nó chỉ định đường dẫn đến trình trợ giúp
chương trình.
Tôi quan tâm đến AskPass vì tôi đang chạy apache2 (v 2.4.41) trên máy chủ Ubuntu 16.04. Trang web Apache cần thực thi tập lệnh shell. Trang web thực thi tập lệnh với tư cách là người dùng dữ liệu www
. Nhưng tập lệnh cần chạy một chương trình khác chỉ có thể chạy với tư cách người dùng người dùng1
. Vì vậy, tôi cần sudo --AskPass
để người dùng đó dữ liệu www
có thể chạy người dùng người dùng1
mã của.
Thiết lập của tôi: Theo các ví dụ như đây và đây, tôi đã viết hai tập lệnh này trong /var/www/html/
danh mục:
user1@myUbuntu:/var/www/html$ ls -l
-rwxr-xr-x 1 www-data Người dùng thử 29 ngày 28 tháng 2 11:34 passwdScript.sh
-rwxrwxr-x 1 www-data TestUsers 2009 ngày 28 tháng 2 11:32 webpageScript.sh
user1@myUbuntu:/var/www/html$
(Tập đoàn người dùng thử nghiệm
bao gồm người dùng dữ liệu www
và người dùng1
.) Một chút passwdScript.sh
tập lệnh có nghĩa là gửi mật khẩu của user1 tới STD OUT:
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ thêm passwdScript.sh
#!/bin/sh
tiếng vang 'mật khẩu của tôi'
user1@myUbuntu:/var/www/html$
user1@myUbfox:/var/www/html$ ./passwdScript.sh
mật khẩu của tôi
user1@myUbuntu:/var/www/html$
(Vâng, tôi biết điều này rất không an toàn, nhưng tôi sẽ là người duy nhất sử dụng máy chủ này. Tôi chỉ lo lắng về chức năng.)
Được rồi: Bây giờ phần trên đã được thiết lập, đây là của tôi trangwebScript.sh
kịch bản, có nghĩa là để gọi sudo --AskPass
:
echo "Tập lệnh đang chạy."
xuất SUDO_ASKPASS="/var/www/html/passwdScript.sh"
tiếng vang "Kiểm tra :: $SUDO_ASKPASS"
cd /home/user1/path/to/other/thư mục
pwd
sudo -u user1 --askpass $SUDO_ASKPASS 'runUser1Script.exe'
echo "Chạy xong script."
Đây là đầu ra kém ấn tượng:
user1@myUbuntu:/var/www/html$
user1@myUbfox:/var/www/html$ sudo -u www-data ./webpageScript.sh
Tập lệnh đang chạy.
Kiểm tra :: /var/www/html/passwdScript.sh
/home/user1/path/to/other/thư mục
Xin lỗi, hãy thử lại.
Xin lỗi, hãy thử lại.
sudo: 3 lần nhập sai mật khẩu
Chạy script xong.
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$
Vì vậy, rõ ràng là sudo --askpass
lệnh không được chấp nhận người dùng1
mật khẩu của. Tôi đã thử các biến thể của lệnh đó cả ngày. Có ai nhìn thấy những gì tôi đang làm sai?