Cách lấy tên người dùng đã khởi chạy `sudo`


12

Vấn đề của tôi: Tôi có một chương trình Python và người dùng khởi chạy nó bằng cách sử dụng sudo. Đôi khi tôi phải đưa người dùng về nhà và tôi chỉ có thể làm điều này khi biết tên của nó:

import pwd

pwd.getpwnam(username)

Vì vậy: làm thế nào tôi có thể nhận được tên của người dùng đã khởi chạy chương trình?


1
Inder hậu hết cấu hình, sudolá các HOMEbiến môi trường còn nguyên vẹn (điều này có thể ghi đè tại compile- hoặc thời gian chạy). Nhưng bạn có thể hoặc không thể sử dụng biến môi trường, tùy thuộc vào điều bạn muốn xảy ra nếu người dùng chỉ định một giá trị khác cho HOME(điều gì xảy ra nếu bob chạy HOME=/home/joe sudo your_script?). Bạn có thể nên đặt euid của mình cho người dùng đang gọi (được cung cấp bởi SUDO_UID) trước khi thực hiện bất kỳ quyền truy cập hệ thống tệp nào (ngoài mọi thứ thực sự cần có quyền root trong tập lệnh của bạn).
Gilles 'SO- ngừng trở nên xấu xa'

Cám ơn bạn đã cho lời khuyên. Ok, tôi sẽ đặt mình euidvào SUDO_UID.
rubik

Câu trả lời:


22

Khi bạn khởi động một cái gì đó với sudomột vài biến môi trường được thiết lập, cụ thể tôi nghĩ bạn đang tìm kiếm SUDO_UID. Chúng nên được truy cập cho bất kỳ chương trình nào chạy qua các kênh thông thường truy cập các biến môi trường.

Bạn có thể thấy những thứ khác được thiết lập bằng cách gian lận như thế này từ vỏ: sudo env | grep SUDO


1
1 WoW! Cảm ơn rât nhiều! Đó chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng tôi sẽ sử dụng SUDO_UIDSUDO_USER. Cám ơn bạn một lần nữa.
rubik

1
SUDO_USERchính xác là những gì tôi đang tìm kiếm.
phượng hoàng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.