linux环境问题
linux操作系统sudo执行程序问题
问题描述
今天在linux上编译了一个应用程序,操作系统是ubuntu,运行程序时采用的采用的是sudo方式执行,如sudo MedieServer,通过ldd命令查看MediaServer的依赖项,其依赖于libssl.so,3,于是我通过export LD_LIBRARY_PATH命令将libssl.so.3的路径(/usr/local/openssl/lib)添加到环境变量中,然后通过ldd MediaServer查看依赖关系,发现动态库已经能够找到,但是通过sudo ./MediaServer 执行程序还是提示无法找到libssl.so.3
问题分析
针对上面的问题,百思不得其解,使用ldd MediaServer查看及查看LD_LIBRARY_PATH始终都是正常的,但是一旦运行程序则无法找到libssl.so.3,非常偶然的执行了sudo ldd MediaServer,发现在sudo下确实无法找到libssl.so.3动态库,这种情况下意识到是权限问题导致的应用程序执行异常,这就有了切入点,通过查询资料,得到在linux系统中(不一定是所有的linux操作系统)sudo执行程序,一般不会将当前用户的环境变量拷贝到root用户,因为我添加该环境变量是在普通用户下添加的环境变量,当通过sudo MediaServer执行程序时,无法复制普通用户的环境变量,所以才造成动态库找不到。
问题总结
- sudo方式执行程序不会复制当前用户设置的环境变量
- 切换到root用户的方法有好几种,最开始尝试su命令,无法切换过去,最后执行了sudo su才切换到root用户