分类 技术 下的文章

对于那些想要一个易于使用的界面的用户,Ubuntu是一个很好的Linux发行版,并且对于一个Linux新手也可以说是最好的Linux发行版。不过这产生了一些副作用,那就是,对于界面和外观,Canonical公司已经为用户做了很多设定,尤其是Unity桌面环境。

然而这些不是一成不变的。下面是一些关于怎样让你更加舒心地使用Ubuntu的技巧。看过上面的截图中我对Ubuntu的设定,你可以看到我的的Unity桌面,相比于默认设定的桌面有何不同。

下面让我们分步来实现定制Ubuntu桌面。

1. 安装Unity Tweak Tool

在你能对Ubuntu外观做任何有效地修改之前,你不得不安装Unity Tweak Tool。这是一个Unity桌面环境下特殊设置管理软件,并且通过它你可以实现替换系统图标和主题。你可以从Ubuntu软件中心下载该软件,如果你更加偏爱terminal终端的话,你也可以使用下面的命令:

sudo apt-get install unity-tweak-tool

如果你正在使用Gnome桌面环境,那么你可能需要尝试Gnome Tweak Tool这款软件。你也可以从Ubuntu软件中心和使用以下命令来安装该软件:

sudo apt-get install gnome-tweak-tool

2. 安装GTK主题

对于Ubuntu有很多定制的主题,这些主题可以影响应用和窗口的外观。我正在使用的主题是Numix GTK+。你可以在http://numixproject.org/找到关于Numix主题和图标的更多信息。你可以通过打开终端并输入以下命令来安装Numix主题:

sudo add-apt-repository ppa:numix/ppa
sudo apt-get update && sudo apt-get install numix-gtk-theme

为了使该主题生效,我们需要打开Unity Tweak Tool,选择“外观标题”下的“主题”选项,然后在“已有主题”一栏中选择该主题。只要相应的软件仓库名字一致,对于其他主题,你可以重复该过程来应用。你可以访问Gnome-Look.org获得更多的主题。另一个和Numix主题很相似的主题是Moka,你可以在http://mokaproject.com/获得更多关于Moka主题的信息。

3. 安装图标

以上截图中使用的图标是来自Numix主题的Numix圆形图标。你可以通过在终端输入以下命令来安装该图标集:

sudo apt-add-repository ppa:numix/ppa
sudo apt-get update
sudo apt-get install numix-icon-theme-circle

为了使该图标集生效,我们需要在Unity Tweak Tool中选择“图标”选项,然后选择该图标集。再一次声明,这个方法对于任何图标集是可行的。Moka也提供给你的桌面带来多彩的、一致性设计的图标集。

4. 安装conky系统监视软件

Conky是一个轻量级桌面系统监视软件。该软件本身是非常简单的,不过它是可定制的,这样一来它就可以显示很多的有用的信息。你可以通过在终端输入以下命令来安装Conky:

sudo apt-get install conky conky-all

你将会需要curl这个软件,你可以通过以下这个命令来安装该软件:

sudo apt-get install curl

上面截图中使用的conky主题是Harmattan,它可以以15种不同的样式来显示时间、天气、以及系统进程。要安装该主题,你可以从deviantART下载zip文件,然后解压。将.conky-weather文件夹和位于主题文件夹的.conkyrc文件(你可能需要按Ctrl+H来显示这些隐藏文件)移动到你的home文件夹。Conky有很多的主题。尝试这些主题,你所需要做的就是用所要使用主题的.conkyrc文件替换在home文件夹的.conkyrc文件。

5. 安装一些指示器程序

有很多第三方的指示器程序,通过这些程序你可以监视你的桌面信息,例如天气、系统性能等。我所使用的指示器程序相当简单。因为天气和系统性能已经在conky中显示,所以我没有安装这些指示器。不过你可以在终端输入以下命令来安装他们:

sudo apt-get install indicator-weather
sudo apt-get install indicator-multiload

我所使用的两个指示器程序是大小写指示程序以及触摸板控制器,这是因为我的笔记本没有大小写指示灯和控制触摸板开关的热键。你可以通过以下命令来安装这两个软件:

sudo add-apt-repository ppa:tsbarnes/indicator-keylock
sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install indicator-keylock
sudo apt-get install touchpad-indicator

你可能需要注销并重新登录来使用这些应用。

6. 通过Compiz设置管理器深度定制你的桌面

如果对于你来说Unity Tweak Tool不够强大,那么你可以尝试Compiz设置管理器.

警告:

如果错误的设置被应用的话,Compiz设置管理器可能会损害到你的系统。所以使用时要格外小心。你可以看到Ubuntu系统中隐藏的各种设置。你可以在Ubuntu软件中心获取该软件或者终端输入以下命令来安装:

sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins

现在你的Ubuntu桌面变得具有超棒了!所有的这些步骤都有成千上万种选择,所以折腾是无极限的。还在等什么?还不赶紧去享受你的新Ubuntu桌面!


via: http://www.muktware.com/2014/05/customize-ubuntu-desktop-6-steps/26750

译者:JonathanKang 校对:wxy

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

你好!准备好阅读下一篇文章了么?在本篇中,我们将会讨论辅助显示。辅助显示是一些小的LCD屏幕;大多数小于或等于128x64。接着,我们会讨论用户空间IO驱动,一些虚拟驱动,Hyper-V,开发中驱动,IOMMU,和其他一些内核特性。

第一个配置辅助显示的驱动是"KS0108 LCD Controller"。KS0108 LCD Controller是由三星制造的图形控制器。

下面可以设置LCD并口地址(Parallel port where the LCD is connected)。第一个并口地址是0x378,下一个是0x278,第三个是0x3BC。这些不是地址唯一的选择。大多数人不需要改变这个。shell命令"cat /proc/ioports"会列出可用的并口和地址。

内核可以设置KS0108 LCD 控制器的写入延时到并口(Delay between each control writing (microseconds))。默认的值大部分是正确的,因此一般不需要更改。

"CFAG12864B LCD"屏幕是一块128x64,双色LCD屏幕。这块屏幕依赖于KS0108 LCD控制器。

可以改变这些LCD屏幕的刷新率(Refresh rate (hertz))。通常上,更高的刷新率会导致更多的CPU活动。这意味着一个缓慢的系统需要一个更低的刷新率。

设置完辅助显示后,接着设置"Userspace I/O drivers"。用户空间系统允许用户的应用和进程访问内核中断和内存地址。启用了它,一些驱动可以放在用户空间。

"generic Hilscher CIF Card driver"用于Profibus卡和Hilscher CIF卡。

"Userspace I/O platform driver"在用户空间创建通用驱动系统。

下一个驱动和上面的相同,但是增加IRQ处理(Userspace I/O platform driver with generic IRQ handling)。

下面的驱动又像前面的一个,但是增加了动态内存支持(Userspace platform driver with generic irq and dynamic memory)。

下面,是一些供应商/设备特性的驱动。

接着是一些通用PCI/PCIe卡驱动(Generic driver for PCI 2.3 and PCI Express cards)。

下面的驱动用于"VFIO support for PCI devices"。VFIO代表Virtual Function Input/Output(虚拟功能输入/输出)。VFIO允许设备直接以安全方式访问用户空间。

"VFIO PCI support for VGA devices"允许VGA通过VFIO被PCI支持。

接下来是virtio驱动。virtio是一个IO虚拟化平台。这个虚拟软件用于操作系统虚拟化。这在Linux系统上的虚拟机上运行一个操作系统时需要。

我们第一个可以配置的virtio驱动是"PCI driver for virtio devices"。这允许虚拟访问PCI

"Virtio balloon driver"允许虚拟系统的内存根据需要扩展或减少。通常上,没有人希望在需要内存的时候,虚拟系统保留它可能不会使用的内存。

下面的驱动允许内存映射到virtio设备(Platform bus driver for memory mapped virtio devices)。

如果Linux内核需要运行在微软的Hyper-V系统上,那么启用这个驱动(Microsoft Hyper-V client drivers)。这允许Linux能够成为Hyper的访客/客户端系统。

下面,我们会配置处于开发阶段的驱动。这些驱动正在开发当中,可能会变化很快,或者还没到Linux内核的质量标准。这个分类中的驱动只有Android驱动(在内核3.9.4中)。是的,Andorid使用Linux内核,这使得Andorid变成了一个Linux系统。然而,这仍然有争议。如果内核是用于Android,那么最好启用所有的驱动。

"Android Binder IPC Driver"提供了对于Binder的支持,它允许Andorid系统进程间相互通信。

下面可以启用ashmen驱动(Enable the Anonymous Shared Memory Subsystem)。Ashmem代表"Anonymous SHared MEMory"(虚拟内存共享)或者"Android SHared MEMory"(Andorid共享内存)。

"Android log driver"提供了完整的Andorid日志系统。

"Timed output class driver" 和 "Android timed gpio driver"允许Andorid系统操作GIP引脚并在超时后取消操作。

"Android Low Memory Killer"会在需要更多内存关闭进程。这个特性会杀死不再使用或活跃的任务。

"Android alarm driver"使内核在设定的间隔后唤醒。

在配置完开发阶段的驱动后,下面的驱动用于X86平台。这些驱动是 X86 (32-bit)的供应商/设备特定硬件。

下一个驱动是"Mailbox Hardware Support"。这个框架控制邮箱队列和硬件邮箱系统的中断信号。

"IOMMU Hardware Support"链接内存到能够使用DMA的设备上。IOMMU增强了DMA。IOMMU映射地址并阻止故障设备访问内存。IOMMU同样允许硬件访问比没有IOMMU更多内存。

"AMD IOMMU support"提供了对AMD设备更好的IOMMU支持。

对于AMD IOMMU支持存在调试特性(Export AMD IOMMU statistics to debugfs)。

存在一个对于AMD硬件的更新版本的IOMMU驱动(AMD IOMMU Version 2 driver)。

Linux内核同样支持对Intel设备的IOMMU驱动支持(Support for Intel IOMMU using DMA Remapping Devices)。

一些设备可能会接受不同的电压和时钟频率。这个驱动允许操作系统控制设备的电压输出和时钟频率(Generic Dynamic Voltage and Frequency Scaling (DVFS) support)。启用了这个驱动,可以启用下面的那些对于电源/性能管理特性。

"Simple Ondemand"就像上面的,但是只会基于设备活动改变时钟频率。通常上,更多的活动意味着设备需要更快的时钟速率来使用更多的资源需求。

"Performance"允许系统设置最高支持的时钟速度以满足最好的性能。这会增加电源消耗。

"Powersave"会设置时钟频率到最低以节约电源。

"Userspace"允许用户空间设置时钟频率。

"External Connector Class (extcon) support"使得用户空间可以监视外部连接器如USB和AC口。这允许应用了解是否插入了线缆。用户几乎都希望启用这个。如果任何人由于某个合理的理由禁用了它,请告诉我们为什么这么做。

"GPIO extcon support"驱动就像上面的驱动,但是它只对于GPIO管脚。

接下来是不同的供货商/设备特定的内存控制器(Memory Controller drivers)。内存芯片控制器可能是独立的设备或者内置在内存芯片上。这些控制器管理这输入和输出的数据流。

"Industrial I/O support"驱动提供了标准的传感器接口而不管总线的类型(像PCIe、spi、GPIO等等)。IIO是"Industrial I/O support"(工业IO)的通用缩写。

Linux内核提供了大量不同的加速器、放大器模数转换器、惯性测量单元、光敏传感器、磁场传感器和其他许多传感器和转换器的支持。

"Intel Non-Transparent Bridge support"驱动支持连接到系统的PCIe硬件桥。所有到映射内存的写入会镜像到两个系统中。

"VME bridge support"和上面的相同除了桥使用的是VME,这是一个不同的总线标准。

"Pulse-Width Modulation (PWM) Support"通过调节从这些设备收到的平均功率调节背光灯和风扇速度。

"IndustryPack bus support"提供了对IndustryPack总线标准的支持。

下一篇文章,我们会继续配置固件驱动。谢谢!


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-18.4896/

译者:geekpi 校对:wxy

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

NoSQL Databases, Java, Terrastore, Neo4j, Voldemort, HBase, InfoGrid, HyperGraphDB, Perst, NeoDatis ODB

NoSQL正在崛起。许多企业和用户已经将MySQL数据库替换成了NoSQL数据库。NoSQL使分析非结构化的数据变得更容易,因此开发者必须意识到存在于NoSQL世界中的趋势和工具。

1.Terrastore

新的文档存储技术可以提供先进的伸缩性和弹性而不必牺牲一致性。Terrastore基于Trrracotta,它依赖于一个业界公认的,快速的(而且又酷)集群技术。

2.Neo4j

开源的图形数据库,用Java实现。开发者将Neo4j描述为“嵌入式,基于磁盘,完全事务的Java持久引擎,将数据结构化存储在图中而不是在二维表格中”

3.Voldemort

分布式键值存储系统。本质上说是一个大型,分布式,持久的,容错哈希表。对于应用,它可以使用类似active-record或者hibernate的O/R映射工具,这些可以提供水平扩展和更高的可用性,但是会损失巨大的便利性。

4.HBase

Apache HBase是Google的Chang et al开发的,是继其开发的分布式存储系统Bigtable之后的另一个开源的、分布式、版本化的、非关系型数据库。

5.InfoGrid

带有很多额外的软件组件的Web图形数据库,使在图形数据库基础上开发Rest-ful的web应用变得很容易。

6.HyperGraphDB

通用的、可扩展、便携、嵌入式、开源数据存储机制。它是一个特别为人工智能和web语义项目设计的图形数据库,同样可以用于不同大小项目的嵌入式面向对象数据库。

7.Perst

Perst是McObject的开源实现,双许可证,面向对象的嵌入式数据库系统(ODBMS)。它的一个版本是用Java开发的嵌入式数据库,另外一个用C#实现(对于Microsoft .NET Framework的应用而言)。

8.NeoDatis ODB

一个简单的运行在Java、.Net、 Google Android、 Groovy 和 Scala上的对象数据库。


via: http://www.efytimes.com/e1/fullnews.asp?edid=138992

译者:geekpi 校对:wxy

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

如果你把Ubuntu从13.10更新到14.04,你也许会遇到用Unity桌面环境登录时冻结的现象。引导进入Ubuntu14.04,输入验证信息,系统会挂起,冻结在那里。如果你稍微幸运些,你还能看到鼠标光标、桌面背景,仅此而已。没有Unity触发器,也没有顶部面板等等。你的ubuntu基本上不可用了。

缺少Unity触发器和面板以及系统冻结的问题,可以通过重新安装Unity来解决。让我们看看怎么做:

重新安装14.04的Unity 以解决系统冻结的问题

好吧,如果你正被困在一个冻结的系统上,按下Ctrl+Alt+F2。这会让你进入一个命令行界面而不是默认的用户桌面界面。切换到命令行界面后,输入用户名和密码登录之后,使用下面的命令重装Unity桌面环境:

sudo apt-get update
sudo apt-get install --reinstall ubuntu-desktop
sudo apt-get install unity
sudo shutdown -r now

最后一个命令是重启系统,重启之后,你的Unity应该就变好了。

解决Nvidia显卡的Unity冻结问题

我没有使用过Nvidia的显卡,但是我找到了别人解决这个问题的方法。尽管上面的技巧对我来说有效,但是我没有过验证下面的命令。使用Nvidia的用户,请告诉我下面的步骤是否工作:

和上面一样使用Ctrl+Alt+F2登录到命令行界面,输入下面的命令:

sudo apt-get update
sudo apt-get install --reinstall ubuntu-desktop
sudo apt-get install unity
sudo apt-get remove --purge nvidia*
sudo shutdown -r now

如果重启之后Unity恢复了,记得重新安装你的Nvidia显卡的驱动,因为你已经卸载了它。

我希望这些技巧能够帮助你从冻结的unbuntu 14.04中恢复。最后,任何的问题和建议都欢迎来提。


via: http://itsfoss.com/fix-unity-freezes-after-login-ubuntu-14-04/

译者:ggaaooppeenngg 校对:wxy

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

无论何时,你开始在 Unity Dash 搜索计算机中的应用程序或文件时,你的检索词将被自动发送给第三方,如亚马逊,并且第三方将依据您的搜索词显示相关结果(主要是广告)。如果你不喜欢这个功能,感觉真的打扰到你,你可以禁用它。

例如,当我在 Unity Dash 中输入 “Terminal” 时,将显示 “Terminal” 应用和 web 上其他第三方的东东(我要发狂了!我不想要这些!)。

正如上面的截图所见,Unity显示内置的 Terminal 应用、引用链接、天气链接和其他第三方的推荐,如电影等。这是非常恼人的并且在 Unity Dash 上看起来很糟。同时,它显示了太多的搜索结果,并使我迷惑。

如果你像我一样不需要这个功能,在你的终端输入以下命令:

wget -q -O - https://fixubuntu.com/fixubuntu.sh | bash

上述脚本的内容如下:

#!/bin/bash

GS="/usr/bin/gsettings"
CCUL="com.canonical.Unity.lenses"

# Figure out the version of Ubuntu that you're running
V=`/usr/bin/lsb_release -rs`
# The privacy problems started with 12.10, so earlier versions should do nothing
if awk "BEGIN {exit !($V < 12.10 || $V >= 14.10)}"; then
  echo "Good news! This version of Ubuntu is not known to invade your privacy."
else

  # Check Canonical schema is present. Take first match, ignoring case.
  SCHEMA="`$GS list-schemas | grep -i $CCUL | head -1`"
  if [ -z "$SCHEMA" ]
    then
    printf "Error: could not find Canonical schema %s.\n" "$CCUL" 1>&2
    exit 1
  else
    CCUL="$SCHEMA"
  fi

  # Turn off "Remote Search", so search terms in Dash don't get sent to the internet
  $GS set $CCUL remote-content-search none

  # If you're using earlier than 13.10, uninstall unity-lens-shopping
  if [ $V \< 13.10 ]; then
    sudo apt-get remove -y unity-lens-shopping

  # If you're using a later version, disable remote scopes
  else
    $GS set $CCUL disabled-scopes \
      "['more_suggestions-amazon.scope', 'more_suggestions-u1ms.scope',
      'more_suggestions-populartracks.scope', 'music-musicstore.scope',
      'more_suggestions-ebay.scope', 'more_suggestions-ubuntushop.scope',
      'more_suggestions-skimlinks.scope']"
  fi;

  # Block connections to Ubuntu's ad server, just in case
  if ! grep -q "127.0.0.1 productsearch.ubuntu.com" /etc/hosts; then
    echo -e "\n127.0.0.1 productsearch.ubuntu.com" | sudo tee -a /etc/hosts >/dev/null
  fi

  echo "All done. Enjoy your privacy."
fi

再次,我进入到 Unity dash 的终端。现在 Unity 只显示终端应用,而不是无用的垃圾,现在 Unity Dash 看起来还不错。

全部搞定,让那些杂乱的东西再也不要回来了。

欢呼~!

更新:这一招只适用Unity desktop。如果你使用其他的比如GNOME,LXDE或Xfce,你不用这么做。同时,这个在线搜索功能将不会包含在Ubuntu 14.10和即将推出的版本中。

Source & Reference: Fixubuntu


via: http://www.unixmen.com/disable-unity-online-search-feature-ubuntu-14-04-lts-older-versions/

译者:tenght 校对:Caroline

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

我是一个刚接触 Linux 和 Unix 的新手。我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密码或修复基于 Linux/Unix的受损坏的环境?

在 Linux和类 Unix 系统下每一个进程/命令的当前工作目录称之为进程/命令的根目录(译注:译者以为此处有误,实际上没有进行过chroot的进程,其根目录是系统的根目录,而不是其工作目录)。你可以使用 chroot 命令改变一个命令的根目录,这最终将会改变当前运行的进程及其子进程的根目录。

如果一个进程/命令运行在一个不能访问外部根目录文件的已修改环境中。这种修改环境通常被称为"监禁目录"(jail)或是"chroot 监禁"。只有特权进程和根用户才能使用 chroot 命令。然而这通常是很有用的:

  1. 将特权分配给无特权的进程,例如 Web 服务或 DNS 服务。
  2. 建立测试环境。
  3. 不使程序或系统崩溃下,运行旧程序或 ABI 兼容的程序。
  4. 系统恢复。
  5. 重新安装引导装载程序,例如 Grub 或 Lilo。
  6. 密码找回,重置一个已丢失的密码等。

用途

chroot 命令 改变其当前目录,并将根目录变为指定目录,然后如果提供了命令则运行命令,也可以运行一个用户的交互式shell的副本(译注:即bash等。)。请注意并不是每一个程序都可以使用 chroot 命令。

语法

基本语法如下:

chroot /path/to/new/root command

或者

chroot /path/to/new/root /path/to/server

或者

chroot [options] /path/to/new/root /path/to/server

chroot 命令实例

在这个例子中,建立了一个"迷你监狱"用来测试一个只有 ls 命令的 Bash shell。首先用 mkdir 命令设定好 jail "监狱" 路径。

$ J=$HOME/jail

在 $J 内创建目录:

$ mkdir -p $J
$ mkdir -p $J/{bin,lib64,lib}
$ cd $J

cp 命令将/bin/bash 和 /bin/ls 复制到 $J/bin/ 路径下:

$ cp -v /bin/{bash,ls} $J/bin

将所需库文件拷贝到$J。可以用 ldd 命令找到 bash 所依赖的共享库。

$ ldd /bin/bash

输出样例:

linux-vdso.so.1 =>  (0x00007fff8d987000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000032f7a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000)
libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000)
/lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000)

直接拷贝上面输出中的库文件到 $J 目录:

$ cp -v /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 $J/lib64/

输出样例:

`/lib64/libtinfo.so.5' -> `/home/vivek/jail/lib64/libtinfo.so.5'
`/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2'
`/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6'
`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'

复制 ls 命令所需的库文件到 $J 目录下。用 ldd 命令打印出 ls 命令依赖的共享库:

$ ldd /bin/ls

输出样例:

linux-vdso.so.1 =>  (0x00007fff68dff000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00000032f8a00000)
librt.so.1 => /lib64/librt.so.1 (0x00000032f7a00000)
libcap.so.2 => /lib64/libcap.so.2 (0x00000032fda00000)
libacl.so.1 => /lib64/libacl.so.1 (0x00000032fbe00000)
libc.so.6 => /lib64/libc.so.6 (0x00000032f7200000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000032f6e00000)
/lib64/ld-linux-x86-64.so.2 (0x00000032f6a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032f7600000)
libattr.so.1 => /lib64/libattr.so.1 (0x00000032f9600000)

你可以一个个的复制库文件,为了更高效的作业,我们也可以使用bash shell 的循环指令实现:

list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
for i in $list; do cp  -v "$i" "${J}${i}"; done

输出样例:

`/lib64/libselinux.so.1' -> `/home/vivek/jail/lib64/libselinux.so.1'
`/lib64/librt.so.1' -> `/home/vivek/jail/lib64/librt.so.1'
`/lib64/libcap.so.2' -> `/home/vivek/jail/lib64/libcap.so.2'
`/lib64/libacl.so.1' -> `/home/vivek/jail/lib64/libacl.so.1'
`/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6'
`/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2'
`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'
`/lib64/libpthread.so.0' -> `/home/vivek/jail/lib64/libpthread.so.0'
`/lib64/libattr.so.1' -> `/home/vivek/jail/lib64/libattr.so.1'

最后,chroot 到你的新jail:

$ sudo chroot $J /bin/bash

尝试浏览一下 /etc 或 /var:

# ls /
# ls /etc/
# ls /var/

改变了根目录的 bash 和 ls 程序现在被监禁在$HOME/$J这个特殊目录中,而且不能再访问外部的目录树,这个目录可以看做是它们的"/"(root)目录。如果配置正确的话,这会极大增强安全性。我通常用这种技术锁定以下的应用程序。

  1. Apache - Red Hat / CentOS: Chroot Apache 2 Web Server
  2. Nginx - Linux nginx: Chroot (Jail) Setup
  3. Chroot Lighttpd web server on a Linux based system
  4. Chroot mail server.
  5. Chroot Bind DNS server 等等

如何退出 chroot 监禁呢?

键入 exit 即可

$ exit

上述会话样例如下:

Animated gif 01: Linux / Unix: Bash Chroot ls Command Demo

Gif 动画01: Linux / Unix: Bash Chroot ls 命令演示

查找服务是否存在于 chrooted 监禁内

你可以用下面两个命令[轻松的找出 Postfix 邮件服务是否已经 chrooted]:

pid=$(pidof -s master)
ls -ld /proc/$pid/root

从基本Linux服务中输出样例:

lrwxrwxrwx. 1 root root 0 Mar  9 11:16 /proc/8613/root -> /

PID 8613 指向了 / (root) 也就是说这个程序的根目录并没有被改变或是被 chroot。这个方法非常的快速而又直接,不需要打开配置文件。下面是从已经 chroot 的 ngnix 服务中得到的另一个例子:

pid=$(pidof -s master)
ls -ld /proc/$pid/root

输出样例:

lrwxrwxrwx 1 nginx nginx 0 Mar  9 11:17 /proc/4233/root -> /nginxjail

程序的根目录已经改为 /nginxjail。

用 chroot 救援和修复软件RAID(磁盘阵列)系统

我先假设基于软RAID的 Linux 系统无法正常启动。所以你需要用Live CD或用基于网络的内核应急模式来修复系统。在这个例子中,我用了 Live Linux DVD/CD 启动一个基于 RHEL 的系统,然后再 chroot 到 /dev/sda1 和 /或 /dev/md0 修复问题:

## 在 Live CD 的提示符下,键入以下命令来恢复数据。##
## /dev/sda1 系统主分区##
# 建立 jail 目录
d=/chroot
mkdir $d

# 挂载 sda1 和其他所需目录
mount /dev/sda1 $d
mount -o bind /dev $d/dev
mount -o bind /sys $d/sys
mount -o bind /dev/shm $d/dev/shm
mount -o bind /proc $d/proc

# 挂载软件RAID /dev/md0
mount /dev/md0 $d/data

# Chroot 到我们新建的 jail 中。这将允许我们修复引导装载系统(bootloader),或者在所有文件被/dev/null吞噬之前抓取数据。
chroot $d

#你能看见吗?
ls
df

# 将文件置入安全路径
rsync -avr /path/to/my_precious_data_dir [email protected]:/path/to/dest

# 退出 jail ,然后重启或者根据个人所需格式化服务 ;)
exit
umount {dev,sys,[...],}
reboot

别急,还有更精彩的内容!

查看nixCraft下所有其他有关 chroot 命令的文章:

  1. Ubuntu: Mount Encrypted Home Directory (~/.private) From an Ubuntu Live CD
  2. Linux Configure rssh Chroot Jail To Lock Users To Their Home Directories Only
  3. Fix a dual boot MS-Windows XP/Vista/7/Server and Linux problem
  4. Restore Debian Linux Grub boot loader

在 Linux 和 类Unix 系统下 chroot 应用程序的注意事项

你应该在各种情况下都用 chroot 特性吗?从上面的例子看出,这个程序是相当简单的,但是最终可能出现几种不同的问题而结束,例如:

1.在 jail 中缺失库文件可能直接导致 jail 崩溃。 1.一些复杂的程序不好被 chroot。所以我建议你要么尝试真正的jail,例如FreeBSD提供的,要么用虚拟化解决,比如Linux 下的 KVM。 1.正在运行某一程序的 jail 不能再运行其他程序,不能更改任何文件,也不能"假设"另一个用户的身份。放宽这些限制,会降低你的安全性,请根据具体情况 chroot。

还要注意:

  1. 当你升级本地程序时,不要忘记升级已 chroot 的程序。
  2. 并非所有程序能够或者应该被 chroot。
  3. 任何需要 root 权限操作的程序,对其 chroot 是没意义的。因为通常 root 用户都能脱离 chroot。
  4. Chroot 并不一个高招。更多的可以学习如何保护和加强系统的各个部分

choort 部分命令选项

取自 man 帮助页面chroot(8):

  --userspec=USER:GROUP  使用指定的 用户 和 组 (ID 或 名称)
  --groups=G_LIST        指定补充组 g1,g2,..,gN 
      --help     显示帮助并退出
      --version  显示版本信息并退出

参见


via: http://www.cyberciti.biz/faq/unix-linux-chroot-command-examples-usage-syntax/

译者:Luoxcat 校对:wxy

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