Điểm:0

Đầu ra khác nhau cho ldd giữa sudo và root

lá cờ cn
pfo

trên hệ thống của tôi, đầu ra cho ldd /usr/bin/openssl khác nhau giữa người dùng thông thường, root và sudo.

Đây là đầu ra cho người dùng thông thường:

$ người
tên của tôi
$ ldd /usr/bin/openssl
    linux-vdso.so.1 (0x00007fff5bdd0000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f609a783000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f609a4a8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f609a271000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f609a8db000)

Đây là đầu ra cho người dùng thông thường sudo-ing vào root:

$ sudo whoami
nguồn gốc
$ sudo ldd /usr/bin/openssl
    linux-vdso.so.1 (0x00007ffc5d75a000)
    libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f4092062000)
    libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f4091ba6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f409197e000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4091979000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4091974000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f40923bc000)

Đây là đầu ra cho root:

$ sudo su
$ người
nguồn gốc
$ ldd /usr/bin/openssl
    linux-vdso.so.1 (0x00007ffcccffe000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f4915593000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f49152b8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4915081000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f49156eb000)

Đây là đầu ra cho người dùng thông thường sudo-ing vào ràng buộc9 người dùng:

$ sudo -u ràng buộc whoami
trói buộc
$ sudo -u liên kết ldd /usr/bin/openssl
    linux-vdso.so.1 (0x00007ffdcabb2000)
    libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f53973d4000)
    libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f5396f18000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5396cf0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5396ceb000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5396ce6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f539772e000)

Tôi muốn sudo mang lại kết quả giống như người dùng thông thường và root đã có. Tôi có thể làm cái này như thế nào?

LD_LIBRARY_PATH không giống nhau giữa các môi trường, nhưng tôi không biết cách làm cho các giá trị giống hệt nhau.

$ tiếng vang $LD_LIBRARY_PATH
/usr/lib/x86_64-linux-gnu
$
$ sudo bash -c 'echo $LD_LIBRARY_PATH'

$
$ sudo su
$ tiếng vang $LD_LIBRARY_PATH
/usr/lib/x86_64-linux-gnu
$
$ sudo -u liên kết bash -c 'echo $LD_LIBRARY_PATH'

$

Tôi tin rằng câu trả lời cho điều này sẽ giải quyết câu hỏi liên quan đến ràng buộc này.

waltinator avatar
lá cờ it
Đọc `man ldconfig`. Biến môi trường `LD_LIBRARY_PATH` có thể khác nhau giữa các môi trường khác nhau.
pfo avatar
lá cờ cn
pfo
@waltinator: Cảm ơn bạn đã bình luận. `LD_LIBRARY_PATH` thực sự giống hệt nhau giữa các môi trường, tôi đã thêm đầu ra cho câu hỏi.
Tilman avatar
lá cờ cn
Lệnh `sudo echo $LD_LIBRARY_PATH` không làm những gì bạn nghĩ.Nó thực sự xuất ra giá trị của `LD_LIBRARY_PATH` *bên ngoài* `sudo` vì trình bao thực hiện thay thế biến trước khi chạy lệnh `sudo`. Hãy thử một cái gì đó như `Sudo bash -c 'echo $LD_LIBRARY_PATH'`.
waltinator avatar
lá cờ it
Bạn đã không kiểm tra `$LD_LIBRARY_PATH` trong các môi trường khác nhau. Mỗi khi bạn nhập "`$LD_LIBRARY_PATH`" (ngoại trừ trường hợp `sudo su`), nó sẽ được điền từ môi trường hiện tại của bạn, trước khi thực thi lệnh. Xem điều đó xảy ra bằng cách đặt `echo ` trước mỗi dòng 1 của bạn. `bash` sớm đánh giá các biến môi trường. Thoát khỏi `$` bằng cách đặt dấu gạch chéo ngược ("`\ `") trước nó để trì hoãn việc đánh giá, ví dụ: `sudo echo \$LD_LIBRARY_PATH`.
pfo avatar
lá cờ cn
pfo
Cảm ơn bạn để cả hai bạn! Bạn đã đúng, các giá trị thực sự khác nhau. `sudo bash -c 'echo $LD_LIBRARY_PATH'` tạo ra một dòng trống. Câu hỏi tiếp theo của tôi là làm thế nào tôi có thể khắc phục điều này. Tôi đã thử `sudo bash -c 'export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu'`, nhưng tất nhiên giá trị không được lưu trữ và `sudo bash -c 'echo $LD_LIBRARY_PATH'` lại tạo ra một dòng trống.
Tilman avatar
lá cờ cn
Bạn có thể thử đặt lệnh `export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu` vào tệp `.bashrc` của người dùng `bind` nhưng tôi nghi ngờ con đường này sẽ đưa bạn đi đúng hướng. Có vẻ như bạn đã cài đặt hai phiên bản khác nhau của `libssl.so.1.1`, một trong `/lib/x86_64-linux-gnu` và một trong `/usr/lib/x86_64-linux-gnu`. Điều đó chắc chắn sẽ gây ra vấn đề. Thay vào đó, hãy thử sửa lỗi đó. Tìm ra cái nào đúng cái nào mất cái nào thừa.
pfo avatar
lá cờ cn
pfo
@Tilman Cảm ơn bạn! Tôi có thể chạy `rm /lib/x86_64-linux-gnu/libssl.so.1.1` hay có cách nào "an toàn hơn" để thực hiện việc này không? Tôi sợ kết thúc ở một trạng thái (khác) không nhất quán.
Tilman avatar
lá cờ cn
Cách an toàn nhất là tìm xem phiên bản bổ sung đến từ đâu và tùy thuộc vào kết quả sẽ quyết định xem nó có còn cần thiết hay không. Ví dụ: nếu nó được cài đặt như một phần của gói phần mềm bên thứ ba nào đó, bạn có thể muốn giữ một bản sao dự phòng cho đến khi bạn xác minh rằng gói này cũng hoạt động với phiên bản trong `/usr/lib/x86_64-linux-gnu`.
Điểm:0
lá cờ cn
pfo

Hóa ra vấn đề là tôi đã cài đặt hai phiên bản khác nhau của một số thư viện nhất định, điều này khiến OpenSSL hoạt động khác nhau tùy thuộc vào việc người dùng có sử dụng sudo hay không.

Xóa các thư viện đó và chạy ldconfig sau đó giải quyết vấn đề cho tôi:

sudo rm /lib/x86_64-linux-gnu/libssl.so.1.1
sudo rm /lib/x86_64-linux-gnu/libcrypto.so.1.1
sudo ldconfig

Cảm ơn @waltinator và @Tilman vì những nhận xét của họ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.