标签 Linux有问必答 下的文章

问题:我试着在Linux上构建一个程序,该程序的开发版本是使用“autogen.sh”脚本进行的。当我运行它来创建配置脚本时,却发生了下面的错误:

Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
autoreconf: failed to run aclocal: No such file or directory

我怎样才能修复这个程序?

开发版本常常是通过autogen.sh使用程序源代码生成的,构建过程包括验证程序功能和生成配置脚本。autogen.sh脚本依赖于autoreconf来调用autoconf,automake,aclocal和其它相关工具。

丢失的aclocal是automake包的一部分,因此,要修复该错误,请安装以下包。

在Debian,Ubuntu或Linux Mint上:

$ sudo apt-get install automake

在CentOS,Fedora或RHEL上:

$ sudo yum install automake 

via: http://ask.xmodulo.com/fix-failed-to-run-aclocal.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我安装了一个程序到/usr/local/bin目录下,这个程序需要root权限才能执行,当我用sudo去执行它时,收到"sudo: XXXXX: command not found"的错误提示,不知道为什么/usr/local/bin没有被包含到PATH环境变量下面来,我该如何解决这个问题?

当你使用sudo去执行一个程序时,处于安全的考虑,这个程序将在一个新的、最小化的环境中执行,也就是说,诸如PATH这样的环境变量,在sudo命令下已经被重置成默认状态了。所以当一个刚初始化的PATH变量中不包含你所要运行的程序所在的目录,用sudo去执行,你就会得到"command not found"的错误提示。

要想改变PATH在sudo会话中的初始值,用文本编辑器打开/etc/sudoers文件,找到"secure\_path"一行,当你执行sudo 命令时,"secure\_path"中包含的路径将被当做默认PATH变量使用。

添加所需要的路径(如 /usr/local/bin)到"secure\_path"下,在开篇所遇见的问题就将迎刃而解。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

这个修改会即刻生效。


via: http://ask.xmodulo.com/define-path-environment-variable-sudo-commands.html

译者:nd0104 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:每当Apache2网站服务器返回错误页时(如,404 页面无法找到,403 禁止访问页面),它会在页面底部显示网站服务器签名(如,Apache版本号和操作系统信息)。同时,当Apache2网站服务器为PHP页面服务时,它也会显示PHP的版本信息。我如何在Apache2网站服务器上关闭这些网站服务器签名呢?

透露网站服务器带有服务器/PHP版本信息的签名会带来安全隐患,因为你基本上将你系统上的已知漏洞告诉给了攻击者。因此,作为服务器加固的一个部分,强烈推荐你禁用所有网站服务器签名。

禁用Apache网站服务器签名

禁用Apache网站服务器签名可以通过编辑Apache配置文件来实现。

在Debian,Ubunt或者Linux Mint上:

$ sudo vi /etc/apache2/apache2.conf

在CentOS,Fedora,RHEL或者Arch Linux上:

$ sudo vi /etc/httpd/conf/httpd.conf

将下面两行添加到Apache配置文件底部。

ServerSignature Off

ServerTokens Prod

然后重启网站服务器以使修改生效:

$ sudo service apache2 restart (Debian, Ubuntu or Linux Mint)
$ sudo service httpd restart (CentOS/RHEL 6)
$ sudo systemctl restart httpd.service (Fedora, CentOS/RHEL 7, Arch Linux)

第一行‘ServerSignature Off’使得Apache2网站服务器在所有错误页面上隐藏Apache版本信息。

然而,若没有第二行的‘ServerTokens Prod’,Apache服务器将仍然在HTTP回应头部包含详细的服务器标记,这会泄漏Apache的版本号。

第二行‘ServerTokens Prod’所要做的是在HTTP响应头中将服务器标记压缩到最小。

因此,同时放置两行时,Apache将不会在页面中或者HTTP响应头中泄漏版本信息。

隐藏PHP版本

另外一个潜在的安全威胁是HTTP响应头中的PHP版本信息泄漏。默认情况下,Apache网站服务器通过HTTP响应头中的“X-Powered-By”字段包含有PHP版本信息。如果你想要在HTTP头部中隐藏PHP版本,请使用文本编辑器打开php.ini文件,找到“expose\_php = On”这一行,将它改为“expose\_php = Off”即可。

在Debian,Ubunt或者Linux Mint上:

$ sudo vi /etc/php5/apache2/php.ini

在CentOS,Fedora,RHEL或者Arch Linux上:

$ sudo vi /etc/php.ini
expose\_php = Off

最后,重启Apache2网站服务器来重新加载已更新的PHP配置文件。

现在,你不会再看到带有“X-Powered-By”字段的HTTP响应头了。


via: http://ask.xmodulo.com/turn-off-server-signature-apache-web-server.html

译者:GOLinux 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我试着在Linux Mint 17 Cinnamon桌面上通过Vino VNC服务器(vino-server)启用桌面共享。但是,我发现用来配置vino-server(如,共享选项,安全,通知开/关)的vino首选项工具已经不复存在了。同时,我也的Cinnamon桌面上也找不到共享菜单。我怎样才能在最新的Linux Mint 17 Cinnamon桌面上通过vino-server配置桌面共享?

最新的Linux Mint 17 Cinnamon桌面附带了预安装用于VNC桌面共享的vino-server,但是它报告说桌面共享菜单丢失了。

一个配置vino-server并启用桌面共享的可选方式,是使用dconf-editor的图形界面。

首先安装dconf-editor:

$ sudo apt-get install dconf-editor

启动dconf-editor。

$ dconf-editor

在dconf-editor的左边面板中导航到“org->gnome->desktop->remote-access”,然后你将会看到各种各样的桌面共享选项。

最重要的是,点击“enabled”来激活桌面远程访问。除此之外,你还可以自定义其它选项。

例如,你可以通过修改以下字段来启用VNC密码验证:

  • authentication-methods: 设置为 ['vnc']
  • vnc-password: 将你喜欢的密码修改为Base64编码的字符串。

在本例中,我们选择“password”为VNC密码,它的Base64编码字符串为“cGFzc3dvcmQ=”。

你也可以选择启用其它选项:

  • notify-on-connect: 当vino-server接收到连接请求时显示桌面通知。
  • prompt-enabled: 远程用户不允许通过VNC工具访问桌面,除非VNC请求被该桌面的拥有者许可。

排障

  1. 当启动vino-server时,我碰到了下面的错误。

** (vino-server:4280): WARNING **: The desktop sharing service is not enabled, so it should not be run.

要启用桌面共享服务,请使用上面讲过的dconf-editor。 也可以选择运行以下命令:

 # gsettings set org.gnome.Vino enabled true 

via: http://ask.xmodulo.com/enable-configure-desktop-sharing-linux-mint-cinnamon-desktop.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我想知道当我调用一个特定的可执行文件在运行时载入了哪些共享库。是否有方法可以明确Linux上可执行程序或运行进程的共享库依赖关系?

查看可执行程序的共享库依赖关系

要找出某个特定可执行依赖的库,可以使用ldd命令。这个命令调用动态链接器去找到程序的库文件依赖关系。

$ ldd /path/to/program

注意!并不推荐为任何不可信的第三方可执行程序运行ldd,因为某些版本的ldd可能会直接调用可执行程序来明确其库文件依赖关系,这样可能不安全。

取而代之的是用一个更安全的方式来显示一个未知应用程序二进制文件的库文件依赖,使用如下命令:

$ objdump -p /path/to/program | grep NEEDED 

查看运行进程的共享库依赖关系

如果你想要找出被一个运行中的进程载入的共享库,你可以使用pldd命令,它会显示出在运行时被载入一个进程里的所有共享对象。

$ sudo pldd <PID>

注意你需要root权限去执行pldd命令。

或者,也可以选择一个叫做pmap的命令行工具。它报告一个进程的内存映射,也能显示出运行进程的库文件依赖。

$ sudo pmap <PID>


via: http://ask.xmodulo.com/check-library-dependency-program-process-linux.html

译者:KayGuoWhu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我经常使用screen命令来运行多个伪终端会话。好多次,我发现都记不得自己是否在一个screen会话中,还是在一个常规终端中。是否有一种简便的方法来检查我是否在一个运行着的screen会话中?

一个快捷而又简单的方法来检查你是否处于一个screen伪终端中,还是在一个常规终端中,就是检查STY环境变量。当调用了screen,就会把STY变量值设置为会话名。因此,如果STY环境变量被设置为任何非空字符串,就意味着你正处于一个screen会话中。

 $ echo $STY 
2858.pts-3.my\_host

然而,请注意,上面的方法只有当你是在本地计算机上运行screen命令的时候。如果你从本地计算机的screen会话中SSH到任何远程计算机上,远程计算机上的STY变量不会被设置,尽管在技术上看,你仍然处于一个screen会话中。

事实上,一个更为可靠的检查你是否处于一个screen会话中的方法,是按“Ctrl-a”+“Ctrl-t”。如果你处于screen会话中,终端会在底部显示时间信息。


via: http://ask.xmodulo.com/check-running-screen-session.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出