Tên người dùng trước sudo


8

Tôi đã nhận được một tập lệnh yêu cầu sudo, nhưng tập lệnh phải đặt tham số theo người dùng ban đầu, chẳng hạn như:

chown "${USER}:${USER}" dir

Nếu tôi đặt nó dưới sudo, tôi sẽ kết thúc chmod root:root, điều đó không có ích.

Vậy làm thế nào tôi có thể có được tên người dùng trước khi sudo?

Câu trả lời:


11

Biến môi trường SUDO_USER sẽ hoạt động thay thế cho USER.

Vì bạn đang đặt quyền sở hữu thành NGƯỜI DÙNG: NGƯỜI DÙNG Tôi giả sử luôn có một nhóm có cùng tên với người dùng? Một giải pháp nghiêm ngặt hơn có thể là sử dụng SUDO_UID và SUDO_GID.

Hai giải pháp khả thi sau đó sẽ là:

chown "${SUDO_USER}:${SUDO_USER}" dir

hoặc là

chown "${SUDO_UID}:${SUDO_GID}" dir

Anwser đẹp, với giải pháp VÀ một số infos bổ sung.
e-satis

Sử dụng UID / GID là giải pháp tốt nhất, vì có thể có nhiều UID với cùng tên người dùng.
duffbeer703

4

Bạn có thể sử dụng SUDO_USERbiến:

sudo bash -c 'echo $SUDO_USER'

Từ trang sudo man:

sudo sử dụng các biến môi trường sau đây. Chính sách bảo mật có quyền kiểm soát nội dung thực tế của môi trường lệnh. [...]

SUDO_UID Đặt thành ID người dùng của người dùng đã gọi sudo.

SUDO_USER Đặt thành tên đăng nhập của người dùng đã gọi sudo.


Nhưng tại sao sudo echo $SUDO_USERđầu ra không có gì?
Robert

1

SUDO_USER có thể được ghi đè bởi người dùng.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

Bạn nên sử dụng 'tôi là ai' hoặc 'tên đăng nhập' để có được tên người dùng ban đầu

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Đến từ /programming/4598001/how-do-you-find-the-origen-user-ENC-multipl-sudo-and-su-commands


Sau khi chạy 'sudo su -' các biến môi trường không có sẵn, nhưng lognamewho am ihoạt động.
RickMeasham 3/03/2015

Bạn nói đúng, không thể dựa vào biến môi trường.
cladmi

Tìm thấy trên một số máy chủ lưu trữ rằng SUDO_USER không thể bị ghi đè: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER Vì vậy, nó có thể vẫn an toàn, vẫn nên xác minh điều này.
cladmi 17/2/2016

Đó là vì lệnh của tôi được đặt là "NOPASSWD", do đó, nó phụ thuộc vào cấu hình sudoers của bạn thông qua "NOSETENV".
cladmi 17/2/2016
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.