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中国 荣誉推出

Ubuntu 有基于不同桌面环境的几个官方版本。默认的 Ubuntu 自带 Unity 桌面,Kubuntu 则是KDE,Lubuntu 用LXDE,Xubuntu 自带Xfce。除此之外,还有一些其它的版本,但这些是最流行的官方桌面版本。

你该如何选择最适合你的 Ubuntu?一种方法是下载 Ubuntu 不同版本的 ISO 镜像并且通过Live CD或者USB实时运行。但是,这将意味着你将会下载多个 ISO 文件,一个个地写入 USB 盘或者 Live CD。有点麻烦,是吧?

这就是Ubuntu AIO(ALL IN ONE)出现的原因。该项目是由Start Ubuntu小组部分成员发起的,Ubuntu 的 AIO DVD 可以让你在一张光盘或者一个U盘中尝试 Ubuntu Unity,Lubuntu,Xubuntu,Kubuntu 和 Ubuntu Gnome 等不同版本。

当然 Ubuntu AIO 也有一些缺点。首先它体积太大了,有将近4.7GB。所以,它不适合于标准的4GB U盘(你得刻录到光盘,或者虚拟光盘)。而且它只有两个版本,第一个是64位版本,包括有 Ubuntu,Kubuntu 和 Ubuntu Gnome,另外一个,则包含有32位版本的 Xubuntu 和 Lubuntu。尽管有缺点,这是一个不错的项目,可以帮助我们选择恰当的 Ubuntu 版本。

下载 Ubuntu AIO DVD

点此了解更多。

享受 Ubuntu 吧!


via: http://itsfoss.com/ubuntu-aio-dvd-puts-ubuntu-1404-flavors-disk/

译者:MikeCoder 校对:Caroline

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

经过似乎漫无止境的等待之后,Google近日正式发布采用Aura(它是这个 搜索巨头开发的内部图形层————译注:硬件加速窗口管理器)的Chrome浏览器 for Linux的第一个稳定版本。

用于取代GTK+的Aura, 是用来在屏幕上绘制包括菜单和窗口框架在内的Chrome UI的主体部分(是的,它在局部窗口集成菜单和全局菜单中都能完美工作)。

这个外观框架已经在Windows和Chrome OS builds中使用,因其绝大部分是跨平台的,使得Google能够更快地开发新特性以及保证特性在不同的操作系统中的一致性。

在Linux上,相比GTK+版本的Chrome/Chromium,Aura加速界面能够更加有效地利用GPU的特性。尤其是Aura能够以每个窗口一个OpenGL的方式使用openGL而不是每个标签一个OpenGL。

新版的到来带来了一些额外的特性,包括Chrome通知中心、一个可选的应用启动器以及对显示选定的Google Now卡片的支持。

其它变化

Chrome 35 稳定版同样带来大量的跨平台变动, 包括为开发者提供若干可用的新扩展API;新的触摸输入管理;以及未说明的‘新JavaScript特性’。

如同每个新版本,Chrome 35 同样包含大量稳定性,性能和安全更新。

点击以下链接下载Google Chrome 35 for Linux:


via: http://www.omgubuntu.co.uk/2014/05/google-chrome-35-linux-arrives-aura

译者:alim0x 校对:wxy

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

这篇教程教将指导 Linux 用户如何永久性地更改其系统的 Umask 值。特别建议全新安装的用户学习(想知道为什么的话,请移步下文)

Umask 是什么?解释下,UMASK 代表用户掩码或用户文件创建掩码,它用于新创建的文件和文件夹,是其默认权限的基础。

上面的意思可以解释成任何基于 Linux 的操作系统为新建文件(包括文件夹)添加默认权限的规则。出于教育目的,下面列出了一些可以用来设置文件权限的八进制值掩码

0 – 读, 写, 可执行 (rwx)
1 – 读和写 (rw-)
2 – 读和可执行 (r-x)
3 – 只读 (r--)
4 – 写和可执行 (-wx)
5 – 只写 (-w-)
6 – 仅可执行 (--x)
7 – 没有权限 (---)

在几乎所有的 Linux 发行版本中默认 Umask 值是 0022(或022),可以在终端模拟程序中输入 umask 命令来查看。也可以运行 “umask 八进制值掩码” 命令(例如 umask 027)来临时改变这个值。

你也许知道,新创建的文件的默认权限设置原本应该是 0666,文件夹的是 0777。应用上面所说的 umask 值后就得到 644 和 755 权限。

许多意见认为 022 掩码会带来隐私问题,也就是说您所创建的文件对其他用户来说是可随意查看的,一想到这就感到不太爽!

言归正传,用户可以按他们所愿来修改默认的 Umask 值,当然首先要保证修改的值合法。要修改默认值,请在您的 shell 配置文件中或者 /etc/profile 文件中写入一个新的 Umask 值

好了,这就大功告成了!从现在开始,在你的 Linux 系统上新创建的文件或文件夹都会有准确设置的权限。但请注意已经存在的文件或文件夹的权限并不会因为上面的操作而改变。

如果您使用的是命令行,可以在任意目录下运行 ls -lah 命令,就可以看到当前的文件权限。另外,新手也可以很容易地查看到文件权限,在基于 GNOME 桌面的环境中,通过右击文件,选择属性 -> 权限选项卡。

如果你在阅读这篇教程时遇到任何问题,不要犹豫,请留下您的评论。


via: http://news.softpedia.com/news/How-to-Change-Umask-Value-Permanently-in-Linux-435026.shtml

译者:runningwater 校对:Caroline

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

linux下的命令行可能是对于新手而言最恐怖的经历了。我记得花费若干小时来尝试搞明白终端爆出的错误信息。当然,这是完全值得的!如果现在让我只能挑一个让新手学习学习命令行的原因,那可能就是用命令行来整个管理音乐库。在这个事情上,我喜欢用的软件叫做cmus,是"C* MUsic Player"(C音乐播放器)的简写,它完全由C写成。

cmus是一个内置了音频播放器的强大的音乐文件管理器。用它的基于ncurses的命令行界面,你可以浏览你的音乐库,并从播放列表或队列中播放音乐,这一切都是在命令行下。

Linux上安装cmus

首先,你需要按照如下建议设置并安装cmus。

在Ubuntu, Debian 或者Linux Mint中:

$ sudo apt-get install cmus 

在Fedora上,首先启用RPM Fusion仓库,接着运行:

$ sudo yum install cmus 

在CentOS上,首先启用Repoforge仓库,接着运行:

$ sudo yum install cmus 

在Archlinux上:

$ sudo pacman -S cmus 

安装完之后,在命令行下如下输入就可运行cums:

$ cmus 

导入音乐文件到 cmus

第一件要做的事情是导入你的音乐文件到你的库中。这个过程可以看出两个事情:快捷方式受到了vim的命令模式的启发;还有cmus运行的很快。我已经在20秒之内成功地导入了超过1000首歌!而在iTunes或者其他任何图形音乐库软件下试一下导入,我想你会有足够的时间来做一份花生酱三明治 :>。

要在cmus下面导入音乐,输入下面的像vim一样的命令。

:a /path/to/your/music/folder

在我的Xubuntu上,我这么做:

:a /home/adrien/Music/

接下来这个目录下所有的音乐文件会立马按照艺术家或者专辑的方式排列显示。

快速入门

在开始前,你可能希望记住一些基本快捷方式来开始播放你的音乐。这是cmus的唯一缺点。除非你改变它们,否则默认的快捷方式并不直观,并且你不得不学习它们。简而言之:

  • x 播放或重播音乐
  • c 暂停
  • b 播放下一首音乐
  • z 播放前一首音乐
  • s 激活随机播放

记住之后,我们就准备开始了!

基本使用

cmus的界面由7个界面组成,你可以按下适当的数字键来访问。比如,启动页面是一个树形界面,你随时可以通过按下“1”来访问。这个界面可以很直观地来使用:通过上下键来导航位于左侧面板的艺术家,按下空格就可以看到特定艺术家的专辑,使用tab键来切换到右侧面板来选择某个歌曲,最后按下回车键来播放音乐。

如你所见,底部显示了艺术家的名字,专辑,和正在播放歌曲的标题,还有时间和音量。

第二个界面与第一个刚才显示的类似,显示了按照艺术家排列的歌曲列表。

然而,第三个界面更有用些,它显示了目前的播放列表。要在树形视图或者列表视图下增加一首歌曲,只要在选中的歌曲上输入'y'。当你创建了一个完美的歌单之后,用如下的命令行保存下来。

:save /path/to/playlist

用下面命令加载:

:load /path/to/playlist

第四个界面显示的是队列。队列与播放列表的一点不同是,一旦歌曲是按队列播放的,播放结束后就会被移出队列。要把一首歌加入队列,就像把它加到播放列表一样,但是使用快捷方式:"e"

第五个界面也同样很有用,它是一个轻量级的文件浏览器。当你在你的电脑中查找一首歌曲而不必加入到库中的时候很有用。导航方式也非常标准:用向上或者向下键,回车键用来进入文件夹或者选中一个文件。

第六界面是一个库过滤器,用来动态创建播放列表。如它听上去的那样,过滤器会遍历你的库,并且只显示符合相关规则定义的音乐。之后我会描述如何定义你自己的过滤器,但是cmus已经自带了一些。要试一下,只要使用:

:filter [name of the filter]

比如:

:filter classical

除了带有"Classical"标签的音乐,它会隐藏你库中所有的其它音乐。

最后但同样重要的,第七个界面是设置。在这里,你可以定义你的快捷方式和命令。我会在下一部分给你一些例子。

高级用法

正如承诺那样,你现在已经更加熟悉界面了,我会给你一些小技巧来增强你的体验。

要在界面中搜索任何东西,只要如vim那样使用相同的快捷方式

/[keyword]

还有:

n

来搜索下一处关键字。

要创建一个你的过滤器,使用语法:

:fset [name of the new filter]=[expression]

比如,你可以找到所有的旧式摇滚音乐:

:fset oldies=genre="Rock"&date<1970

要了解更多关于你可以使用的表达式,我建议你仔细阅读文档和已有的过滤器。

要重新播放所有的音乐(不过滤),使用如下命令:

:set replaygain=1

要改变快捷键到不同的键上,进入设置界面并找出现有的绑定表达式。举个例子来说,我想要将播放快捷方式从"x"改到"w",我会翻到下面的行:

common  x       player-play

接着按下回车,并改成下面的表达式

:bind -f common w player-play

总的来说,我真的喜欢cmus。它还有许多本篇中没有提到的技巧,因此在你准备好后,应该认真要读一下man帮助手册。简而言之,cmus是一款快速的,易于学习,不会乱动你的文件的好软件。如果你喜欢从命令行下管理音乐库的想法,但是还没有成为cmus的忠实粉丝,我建议你可以先试一下一些替代品,如MOC和PyTone,它们同样也很棒。

你认为cmus怎么样?你喜欢它么,或者作为图形界面的替代品?让我在评论区知道你们的想法。


via: http://xmodulo.com/2014/04/manage-music-library-command-line-linux.html

译者:geekpi 校对:wxy

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

Git 1.9.3,是一种自由和开放源码的分布式控制版本系统,该设计用于快速有效地处理从小到非常大的项目,现在已经可以提供下载了。

新的Git 1.9.x系列继续保持着大量发布的传统,包含了大量的变动和修复。最新版本系列比我们预期稍微小了一点,但的确做了一些有趣的变化。如果你在使用Git,你也许该考虑升级到最新版本的。

根据开发者所说,“git p4”在处理二进制文件时受损是由于1.9版本的一些改变,但是这已经被修复了。在shell提示符脚本(在contrib目录/下),使用PROMPT\_COMMAND界面时,显示分支名称$PS时不再使用不安全的构造,“git rebase”也不再使用POSIX shell中的结构。

此外,一些在Unicode6.3中定义的代码点的零宽度问题的已经得到修复,在一些不能在FreeBSD中运行的shell结构的测试,也都已经得到修复了。

关于更改的完整列表,请查看更新日志

下载Git 1.9.3地址


via: http://news.softpedia.com/news/Git-1-9-3-Version-Control-System-Officially-Released-441600.shtml

译者:disylee 校对:wxy

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