O que é diferente entre “su - username”, em seguida, comando e “sudo -u username command”

0

Eu tenho um problema com o unixodbc. Mostra a mensagem de erro sobre Can't open lib .... Então, eu uso o comando ldd para verificar.

Se eu usar su - username , o resultado será o seguinte:

[root@ostest ~]# su - mysql  
[mysql@ostest ~]$ ldd /usr/local/oraclient112/libsqora.so.11.1  
        linux-vdso.so.1 =>  (0x00007fff6c11d000)  
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fb08a932000)  
        libm.so.6 => /lib64/libm.so.6 (0x00007fb08a6ad000)  
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb08a490000)  
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fb08a277000)  
        libclntsh.so.11.1 => /usr/local/oraclient112/libclntsh.so.11.1(0x00007fb087d46000)  
        libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007fb087b35000)  
        libc.so.6 => /lib64/libc.so.6 (0x00007fb0877a1000)  
        /lib64/ld-linux-x86-64.so.2 (0x0000003b02000000)  
        libnnz11.so => /usr/local/oraclient112/libnnz11.so (0x00007fb0873d8000)  
        libaio.so.1 => /lib64/libaio.so.1 (0x00007fb0871d7000)  
        libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fb086fce000)  


[root@ostest ~]# sudo -u mysql ldd /usr/local/oraclient112/libsqora.so.11.1  
        linux-vdso.so.1 =>  (0x00007fff3d5ff000)  
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f8eaec7a000)  
        libm.so.6 => /lib64/libm.so.6 (0x00007f8eae9f5000)  
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8eae7d8000)  
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f8eae5bf000)  
        libclntsh.so.11.1 => not found  
        libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f8eae3ad000)  
        libc.so.6 => /lib64/libc.so.6 (0x00007f8eae019000)  
        /lib64/ld-linux-x86-64.so.2 (0x0000003b02000000)  
        libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f8eade0f000)  

Se eu usar sudo -u username , não consigo encontrar a biblioteca libodbcinst.so.1 .

  • O que é diferente entre sudo e su ?
  • Como poderia funcionar com sudo -u ?
por user3655478 08.12.2015 / 09:01

1 resposta

2

O ambiente da conta mysql provavelmente está definindo a variável LD_LIBRARY_PATH ou algo semelhante.

su - está removendo seu ambiente e usa mysql como se mysql tivesse efetuado login. Por outro lado, sudo está mantendo apenas algumas variáveis do seu próprio ambiente e definitivamente não LD_LIBRARY_PATH , pois isso seria um problema de segurança.

Se for o caso, isso deve funcionar:

sudo -u mysql -i ldd /usr/local/oraclient112/libsqora.so.11.1

Você também pode definir explicitamente a variável necessária dessa maneira:

sudo -u mysql LD_LIBRARY_PATH=/usr/local/oraclient112/:$LD_LIBRARY_PATH ldd /usr/local/oraclient112/libsqora.so.11.1
    
por 08.12.2015 / 10:34