Quantcast
Channel: Linux 中国◆开源社区
Viewing all 13806 articles
Browse latest View live

Linux有问必答:如何在CentOS上安装Shutter

$
0
0

问题:我想要在我的CentOS桌面上试试Shutter屏幕截图程序,但是,当我试着用yum来安装Shutter时,它总是告诉我“没有shutter包可用”。我怎样才能在CentOS上安装Shutter啊?

Shutter是一个用于Linux桌面的开源(GPLv3)屏幕截图工具。它打包有大量用户友好的功能,这让它成为Linux中功能最强大的屏幕截图程序之一。你可以用Shutter来捕捉一个规则区域、一个窗口、整个桌面屏幕、或者甚至是来自任意专用地址的一个网页的截图。除此之外,你也可以用它内建的图像编辑器来对捕获的截图进行编辑,应用不同的效果,将图像导出为不同的图像格式(svg,pdf,ps),或者上传图片到公共图像主机或者FTP站点。

Shutter 在 CentOS (截止至版本 7)上没有预先构建好的软件包。幸运的是,有一个第三方提供的叫做 Nux Dextop 的 RPM 中提供了 Shutter 软件包。 所以在 CentOS 上启用 Nux Dextop 软件库,然后使用下列命令来安装它:

 $ sudo yum --enablerepo=nux-dextop install shutter 


via: http://ask.xmodulo.com/install-shutter-centos.html

译者:GOLinux 校对:wxy

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


LFS与BLFS 7.6版本发布,从头构建自己的Linux系统

$
0
0

Linux From Scratch(LFS),是由Gerard Beekmans编写的一本指南,指导大家如何从源代码编译Linux系统。 BLFS,Beyond Linux From Scratch,则提供了在LFS的基础之上,解释如何进一步定制Linux基本系统。

相对上一个版本来说,LFS 7.6版本对工作链进行了升级(glibc-2.20、gcc-4.9.1版本)。除此之外,本版本共升级了26个软件包,增加了8个软件包。同时,本次更新也推出了针对Systemd的版本。 

LFS&BFLS 在线阅读

[0] http://www.linuxfromscratch.org/lfs/view/7.6/
[1] http://www.linuxfromscratch.org/lfs/view/7.6-systemd/
[2] http://www.linuxfromscratch.org/blfs/view/7.6/
[3] http://www.linuxfromscratch.org/blfs/view/7.6-systemd/

LFS&BFLS 指南下载

[4] http://www.linuxfromscratch.org/lfs/downloads/7.6/
[5] http://www.linuxfromscratch.org/lfs/downloads/7.6-systemd/
[6] http://www.linuxfromscratch.org/blfs/downloads/7.6/
[7] http://www.linuxfromscratch.org/blfs/downloads/7.6-systemd/

关于编程里的那些ABC

$
0
0

本文主要是一篇基础类整理文章,按照26个字母的排序,整理出一些在编程上比较重要的工具、框架、语言等等。

A - Angular.JS 如果被设计用来构建 Web 应用程序的话,那就和 HTML 没什么区别了。它是一款开源 JavaScript 函式库,由 Google 和它的社区来维护,用来协助单一页面应用程式运行的。它的目标是透过 MVC模式(Model-View-Controller)功能增强基于浏览器的应用,使开发和测试变得更容易。函式库读取包含附加自定义(标签属性)的 HTML,遵从这些自定义属性中的指令,并将页面中的输入或输出与由 JavaScript 变量表示的模型绑定起来。这些 JavaScript 变量的值可以手工设置,或者从静态或动态 JSON 资源中获取。

Angular.JS 是建立在这样的信念上的:即声明式编程应该用于构建用户界面以及编写软件构建,而指令式编程非常适合来表示业务逻辑。Angular.JS 最引人注目的特征就是它的双向数据绑定功能,这样可以大大减少你在必要代码上的编写数量,Coder Factory 最先向澳大利亚提供 Angular.JS课程。

B - Booststrap 是一个用于响应式前端开发的框架,最主要是应用在移动 Web App 上面。它由Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS/HTML 框架。Bootstrap 提供了优雅的 HTML 和 CSS 规范,它即是由动态 CSS 语言 Less 写成。Bootstrap 一经推出后颇受欢迎,一直是 GitHub 上的热门开源项目,包括 NASA 的 MSNBC(微软全国广播公司)的 Breaking News 都使用了该项目。

Bootstrap 是基于 jQuery 框架开发的,它在 jQuery 框架的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大部分 jQuery 插件。

C - CSS 是 Cascading Style Sheet 的缩写,中文名称是层叠样式表,又称串样式列表、层次结构式样式表文件,一种用来为结构化文档(如 HTML 文档或XML 应用)添加样式(字体、间距和颜色等)的计算机语言,由 W3C 定义和维护。目前最新版本是CSS2.1,为 W3C 的推荐标准。CSS3 现在已被大部分现代浏览器支持,而下一版的 CSS4 仍在开发过程中。

CSS 最重要的目标是将文件的内容与它的显示分隔开来。在 CSS 出现前,几乎所有的 HTML 文件内都包含文件显示的信息,比如字体的颜色、背景应该是怎样的、如何排列、边缘、连线等等都必须一一在 HTML 文件内列出,有时重复列出。CSS 使作者可以将这些信息中的大部分隔离出来,简化HTML 文件,这些信息被放在一个辅助的,用 CSS 语言写的文件中。HTML 文件中只包含结构和内容的信息,CSS 文件中只包含样式的信息。

D - DRY 是 Don't repeat yourself 的简称,一个规则,实现一次(one rule, one place)是面向对象编程中的基本原则,程序员的行事准则。旨在软件开发中,减少重复的信息。

DRY 的原则是──系统中的每一部分,都必须有一个单一的、明确的、权威的代表──指的是(由人编写而非机器生成的)代码和测试所构成的系统,必须能够表达所应表达的内容,但是不能含有任何重复代码。当 DRY 原则被成功应用时,一个系统中任何单个元素的修改都不需要与其逻辑无关的其他元素发生改变。此外,与之逻辑上相关的其他元素的变化均为可预见的、均匀的,并如此保持同步。违反 DRY 原则的解决方案通常被称为 WET,指代“Write everything twice”。

E - Elegant 每一个代码都应该是优雅、简洁的。其实编写程序的过程就像是一种艺术,也许有些人会问你:“如果可以编写有效代码的话,为什么还要编写优雅代码呢?”然而,我们认为提供优雅代码的标准首先这个目的就是比较好的,因为它会带领程序员编写出更加简明的、可维护的代码。

你应该永远记住:读代码比写代码更重要。我猜你不想让你的同事花整个周末的时间来搞懂你的代码到底是什么意思吧!所以多花一点时间让代码更漂亮!

F - Flash 是由 Adobe 开发出来的用于创建动画视频、图形和互联网应用程序的。就像你刚从一个粗略的网站上看到的一部电影一样,都是通过 Adobe Flash 播放器播放的。尽管有很指责说 Flash 很耗资源且不安全,但是绝大多数网站上一直在使用它。

或许你已经听说了 Steve Jobs 拒绝将 Flash 用在苹果设备上,如果真的有所说的那样的缺点,或许只是 Steve Jobs 和 Flash 之间的个人恩怨,那样我们可能永远不会发现 Flash 的伟大之处。即使 HTML5 被预测为 Flash 的即将继承者,但是 Flash 仍然值得我们多看它几眼。

G - GitHub 是每一位编码人员的最好的朋友。拥有超过 1150万 个仓库的 GitHub 是这个世界上最大的代码托管网站。GitHub 包含社交网络功能允许开发人员将他们的项目整合到一起,这样一来的话就能在对开源软件以及私人项目的维护产生重大意义。

GitHub 提供免费和付费计划,只需选择你所需要的东西。有趣的是:GitHub 是建立在 Ruby on Rails 基础上的,Coder Factory 可以教你框架。

H - Hydra code 是一段不能修复的代码,就像古希腊怪物每个脖子上都生出两个头,最后都被 Hercules 砍掉了。代码有的时候就像这个一样,即使你修复了一个bug之后,又会出现很多个bug,所以,除了重写整个代码以外,你别无选择。

I - Graphic User Interface 图形用户界面,这是一种自我解释。图形用户界面估计是你看到最多的也是互动最多的一部分。第一个 GUI 是在 Stanford Research Institute 发明的,后继开发是由 Xerox PARC 施行的。在参观完 Xerox 之后,Steve Jobs 首次将GUI技术用在了 Apple Lisa 和 Macintosh 上面,在当时来说这是一次革命创举。

Bill Gates 发布 Windows GUI 之后,看看下面这段有趣的对话,Steve:“你偷了我们的技术!”Bill 回应:“我想我们两个都有一个叫做 Xerox 的非常富有的邻居,但是当我跑到他的房间里想要偷走电视机的时候,我发现你已经把电视机偷走了。”哈哈哈

到底应该选择那种Linux.NET的部署方式?

$
0
0

当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式、又有各式各样的一键安装脚本、还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式。那对于一名Linux.NET的初学者来说,我们又该如何选择?下面,本文将对这几种的安装方式进行优缺点的比较,从而协助各位读者选择出最佳的部署方式。

本文中,我们将对下列的部署方式展开讨论:

1、源码编译

2、一键安装脚本

3、RPM包

4、绿色包 

一、源码编译

通过源代码编译安装部署Linux.NET可谓是最传统并且最原始可靠的方式,通过获取源代码,并在物理机(虚拟机)中进行编译,编译器能够有针对性的给机器编译出最适合改机器运行的二进制执行文件。同时,通过源代码编译的方式也是所有部署方式中最稳定靠谱的方式。同时,采用源码编译的方式部署也是最灵活的。要想深入学习的读者必须要掌握此方式部署。

想要通过源码编译的方式安装部署Linux.NET,我们需要事先Get到一份源代码,目前获得Mono源代码的方式主要分为两种,一种是通过GitHub将Mono的托管代码Pull下来执行autogen再执行make install的方式进行编译安装部署,另外一种则是通过Mono/Source所发行的源码包(tar.gz或者tar.bz2包)进行./Configuration再执行make install的方式编译。

事实上,如果读者们采用前者(也就是Git Pull的方式)来编译部署环境,所获取到的版本一般都会比从Mono/Source中发行的版本高(当然在能够编译的情况下),对希望能够尽快使用最高版本或者想尝鲜的读者,使用这种方式不失为一个好选择。但选择这个方式也有一定的缺点,那就是我们在编译之前需要先进行Git Clone或者Git Pull代码,这将使我们可能面临上G的Git代码仓库需要下载,同时由于Mono中的external目录下又包含了其他.NET项目的GIT仓库,执行autogen时,系统会检查包括external目录的代码是否完整,因此编译时系统也有可能再次的执行Git Pull拉去相关代码。另外还有一点,在我们进行Git Pull Master之后,我们也未必可以编译通过。所幸的是,文章发布之后,LexLi给予了一些提醒,通过他的思路,我们发现了其实GitHub/Mono的Readmd中是有一盏当前代码是否能够编译的“提示灯”,通过观察此“灯”所显示的颜色我们就可以知道当前的代码是否可以编译,另外在这里也有一个版本编译测试历史记录,我们也可以根据它的编译测试记录获知那一个提交版本的的源码是可以编译,然后只需把代码ReSet到此版本即可再次进行编译。

而采用Mono/Source所发行的源码包编译的读者,可靠性则大幅度提高,毕竟这个是Release版本。虽然当中有个别的发行包因为文件缺失无法编译,但是总得来说还是最可靠的,并且源码包发行版大小一般都在百兆以内,相比于Git仓库的上G代码可谓是小巧得多。

最后,各位读者无论是采用以上两种方式中的那种,都需要花费一段或漫长或短暂的编译等待时间,并且编译时可能会遇到一些Make Error的现象,这都需要各位读者自己进行克服处理。但无论怎么样,这还是对想深入学习Linux.NET的读者要求必须掌握的部署方式。(有需要的读者可以参详《Linux.NET学习手记》

二、一键安装脚本

由于采用源码编译方式都是直接采用Shell命令来操作,因此有不少的人士将这些Shell命令提取出来重新组装成一个Shell脚本,只要执行该脚本即可完成环境的部署,其中更有爱好者别出心裁,在命令行的基础上加以改进,提供类似“界面”之流的方式,给予了较好的与用户的交互。采用脚本式部署环境是解放生产力的标志。

但即便如此,采用脚本安装的方式仍然存在着相当的不足,那便是采用脚本安装其实只是一个“礼盒”,“礼盒”里面的内容依然是源代码编译方式,因此,采用脚本安装所遇到的问题不会比采用源码安装的少。同时,采用脚本安装仍然存在这“兼容性”的问题,这里值得注意,所谓的“兼容性”并不是指脚本的命令行不通用,而是由源码编译所“继承”下来的“不兼容”,也就是环境的复杂性造成不同的Make Error所带来的“不兼容”。此外,由于每个人都有自己的安装风格,有的人可能喜欢将东西安装在“/usr”中(像宇内、善友的教程等),有人喜欢安装到“/usr/local/”中(我的风格,《Linux.NET学习手记》的教程路径),也有人喜欢安装到“/opt”中……总而言之,脚本中所编写的安装路径纯属由撰写者决定,安装目录可能并不是各位读者所希望的路径,这点也有一定的不足。

三、RPM包

伴随着Mono新版官网的上线,依赖于Yum的RPM安装方式也悄悄的出现在各位读者的视野,一段时间以来,不少朋友开始或是为了尝鲜(没办法,体验到Yum的甜头之后恐怕很难回头了)或是收到“官方”的指引纷纷采用了此种办法部署Linux.NET环境。

我没有尝试过这种方式(懒得自己添加镜像源),不过从不少朋友反(bao)馈(yuan)回(ma)来(niang)的信息来看,这种方式似乎是几种方法中最残(zi)念(sha)的了。由于RPM包隶属于二进制包的一种,安装路径已经在包中预配置,无法更改,我们也无法获知它到底安装到哪里(只能find了),从一些通过此方式安装的朋友所提供的资料来看,基本上会安装到“/opt”目录中(不过没有具体目录,有“/opt/”、“/opt/mono”甚至“/opt/201408xx/”目录)。此外,采用RPM包方式安装还有一项非常严重的问题,那就是采用此种方式安装竟然没有向环境变量注册Mono/bin路径,导致系统无法找到mono。

因此,我个人尤其不推荐此中安装方式。

四、绿色包(jws.mono)

以上三种方式都有一个共同的特点,那就是都需要在有网络条件的情况下进行。而绿色包与前者不同,绿色包是从使用源码编译好的机器中进行抽取重组并进行适当的修改变成新的解压即可运行的绿色版的Linux.NET运行环境。

使用绿色包具有以下的几项优点:

(1)、快速部署,由于采用此方式部署仅仅需要执行一条解压命令(有需要的可自行注册环境变量),没有编译过程,大大节省了因为环境部署所需要消耗的宝贵时间。

(2)、针对性强:由于每一款的绿色包都是针对其标注的Linux发行版进行编译,因此绿色包具有比较强的发行版针对性。

(3)、精致而不失功能:使用过绿色包的读者可能会发现,它的打包文件大小甚至会比Mono/Source所发行的源码包还会小,但功能却又没有减少。这个秘密就在于Mono与MS.NET不同,Mono的库是向下兼容的,因此,在每款的绿色包中,我们都会对“重复”的库进行剔除,让包变得足够精致。

但金无足赤,绿色包同样也面临一些问题,第一就是它无法升级(这项即将得到改善,在下个发行包中提供可用于升级的脚本),第二就是制作发行包是一项工作量大且耗时的活。我们需要对应编译并制作相应发行版的包。

不过对于初学者和需要快速部署、大规模部署的读者来说,绿色包还是最佳选择,因为它足够容易,因为它足够快。 

当然了,仁者见仁智者见智,以上观点乃我利用Linux.NET编译的时间写出的(已经失败了差不多十次)的主观观点和建议,不喜勿弹哈,谢谢。

DevOps热门发展趋势中的十大误区

$
0
0

如今的IT企业全部是自动化。新一代的代码和应用将我们带进一个融合了基础设施和云计算的时代,企业原有系统正在遭到这些新赶上的庞大的新环境的挑战。

因此,DevOps(Development和Operations的组合)作为一项新的业务脱颖而出,它的出现旨在解决复杂的系统管理员和开发者每天要面对的信息技术问题。尽管有一些组织也在实施DevOps 的方法,但还是有很多人不能完全理解DevOps 具体是什么,他们要么是抗拒,要么是意识不到这种部署的优点。

DevOps是一组方法、过程与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。这种协作可以提高应用的开发速度,减少开发和运营之间的摩擦,从而快速部署软件或应用程序,并且可以快速检测。

根据eWEEK的报告以及StackStormCEO和Nexenta联合创始人Evan Powell的行业信息,我们总结出对于DevOps方法理解的10大误区。

1、采用DevOps的企业比你想象的要多的多

根据Puppet实验室的2013年DevOps 状况报告,在被调查的企业中,有66%的企业已经在使用或计划采用DevOps的方法。而最先采取DevOps方法的电信行业,有88%的公司正在使用或者计划使用。

2、DevOps代码部署比常规方法快30倍

高性能的DevOps组织部署代码经常要比传统组织快30倍(来源:Puppet实验室的2013年DevOps状况报告)

3、DevOps 提供快速运营

DevOps在快速开发实例扩展中可以快速响应。快速开发需要较少的代码,但需要代码频繁发布;这就需要运营人员必须与开发人员密切合作,以防止中断。

4、连续操作等于自寻死路

为了确保你能够连续集成和交付,必须关闭循环操作。

5、自动化操作流程中,工具是至关重要的组件

大多数早期的监控和管理工具不适合DevOps环境,然而,合适的工具却是最关键的。对DevOps来说,自动化是最基本的。

6、DevOps需要商业和技术技能

DevOps成功采用的三个顶级技能:

1)业务优先级(重点)和策略知识

2)当前业务流程知识

3)沟通技巧

DevOps将运维团队的负担实现自动化。“运营人员必须会编程”这句话像咒语一样频繁重复,即使它往往是不切实际的。

7、DevOps,云架构与以往的完全不同

DevOps和云架构是松散耦合的,不断变化的,是水平缩放和无状态的。早期系统无法满足延迟,性能和可扩展性要求,而这些正是新型部署模式所需要的。

8、基础设施和代码一样至关重要

如果你不是像看待代码一样看待你的基础设施,那么你不是在实施DevOps。如果要连续集成(CI)/连续交付(CD)或者持续运营(CO),你必须存储配置代码。

9、不断变化的DevOps环境相对来说更稳定

你可以通过释放Chaos Monkey(一个灾难事件测试)来使你的环境更稳定。灾难恢复计划就和你最后一次成功使用它们一样,末日场景需要不断得测试。

10、DevOps对信息主管们来说是保持关联性的最好机会

由于全部是自动化协助,DevOps的顶级运营人员已经证明其要比传统IT更富有成效。这也是为什么信息技术的工作量迁移到SaaS以及其他地方的原因,远离CIO们的控制和经费预算。然而,企业能够采用DevOps,正是因为他们能够从根本上修复信息技术,即回到CIO中心讨论如何提高企业业务。

写在最后

一款产品的诞生不仅不能缺少开发人员,也离不开运营人员,开发和运维是不可分割的。而DevOps提供的方法恰好是把这两项工作密切结合在一起,很值得大家借鉴。

Linux有问必答:Ubuntu如何使用命令行移除PPA仓库

$
0
0

问题: 前段时间,我的Ubuntu增加了一个第三方的PPA仓库,如何才能移除这个PPA仓库呢?

个人软件包档案(PPA)是Ubuntu独有的解决方案,允许独立开发者和贡献者构建、贡献任何定制的软件包来作为通过启动面板的第三方APT仓库。如果你是Ubuntu用户,有可能你已经增加一些流行的第三方PPA仓库到你的Ubuntu系统。如果你需要删除掉已经预先配置好的PPA仓库,下面将教你怎么做。

假如你想增加一个叫“ppa:webapps/preview”第三方PPA仓库到你的系统中,如下:

$ sudo add-apt-repository ppa:webapps/preview

如果你想要 单独地删除某个PPA仓库,运行下面的命令:

 $ sudo add-apt-repository --remove ppa:someppa/ppa 

注意,上述命令不会同时删除任何已经安装或更新的软件包。

如果你想要 完整的删除一个PPA仓库并包括来自这个PPA安装或更新过的软件包,你需要ppa-purge命令。

首先要安装ppa-purge软件包:

$ sudo apt-get install ppa-purge 

然后使用如下命令删除PPA仓库和与之相关的软件包:

$ sudo ppa-purge ppa:webapps/preview 

特别滴,在发行版更新后,当你分辨和清除已损坏的PPA仓库时这个方法特别有用!


via: http://ask.xmodulo.com/how-to-remove-ppa-repository-from-command-line-on-ubuntu.html

译者:Vic___ 校对:wxy

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

在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端

$
0
0

当手中有相当多的机器需要管理的时候,自动化处理冗余又无聊的任务对系统管理员来说就很重要了。很多管理员习惯了自己写脚本模拟复杂软件之间的调度。不幸的是,脚本会过时,脚本的作者会离职,如果不花费巨大精力来维护这些脚本的话,它们早晚会一点儿用也没有。如果能有一个系统,任何人都可以使用、安装工具,不论其受雇于何人,那真是太期待了。目前已有几种系统可以解决这类需求,这篇教程将介绍其中之一—&mdashuppet——的使用方法。

Puppet 是什么?

Puppet 是一款为 IT 系统管理员和顾问们设计的自动化软件,你可以用它自动化地完成诸如安装应用程序和服务、补丁管理和部署等工作。所有资源的相关配置都以“manifests”的方式保存,单台机器或者多台机器都可以使用。如果你想了解更多内容,Puppet 实验室的网站上有关于 Puppet 及其工作原理的更详细的介绍。

本教程要做些什么?

在这篇教程里,我们将一起安装配置一个 Puppet 服务器,然后在我们的客户端服务器(译注:这里的“客户端服务器”指需要部署业务逻辑的服务器)上完成一些基本配置。

准备工作

由于 Puppet 不是 CentOS 或 RHEL 发行版的基本仓库,所以我们得手动添加 Puppet 实验室提供的自定义仓库。在所有你想使用 Puppet 的地方执行以下命令安装这个仓库(版本不同,对应的 RPM 文件名可能略有不同)。

对于 CentOS/RHEL 6.5:

# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm

对于 CentOS/RHEL 7:

 # rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm

安装服务器端

在你打算用作 master 的服务器上安装 "puppet-server" 包。

# yum install puppet-server

安装完成后,设置 Puppet 服务器开机自动启动,然后启动它。

# chkconfig puppetmaster on
# service puppetmaster start

现在服务器已经运行起来了,我们试试看我们的网络能不能访问到它。

对于使用 iptables 当做防火墙的 CentOS/RHEL 6,在 /etc/sysconfig/iptables 文件的 OUTPUT ACCEPT 小节里添加下面这一行。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT

重新启动 iptables 服务让刚才的修改生效。

# service iptables restart

在安装了防火墙的 CentOS/RHEL 7 上,我们这么做:

# firewall-cmd --permanent --zone=public --add-port=8140/tcp
# firewall-cmd --reload

安装客户端

执行下面的命令,在客户端节点安装 Puppet 客户端。

# yum install puppet

安装完成后,确保 Puppet 会随开机自动启动。

# chkconfig puppet on

Puppet 客户端需要知道 Puppet master 服务器的地址。最佳方案是使用 DNS 服务器解析 Puppet master 服务器地址。如果你没有 DNS 服务器,在 /etc/hosts 里添加类似下面这几行也可以:

1.2.3.4 server.your.domain

2.3.4.5 client-node.your.domain

1.2.3.4 对应你的 Puppet master 服务器 IP 地址,“server.your.domain”是你的 master 服务器域名(默认通常是服务器的 hostname),“client-node.your.domain”是你的客户端节点。包括 Puppet master 和客户端,所有相关的服务器都要在 hosts 文件里配置。

完成这些设置之后,我们要让 Puppet 客户端知道它的 master 是谁。默认情况下,Puppet 会查找名为“puppet”的服务器,但通常这并不符合你网络环境的真实情况,所以我们要改成 Pupper master 服务器的完整域名。打开文件 /etc/sysconfig/puppet,把 PUPPET_SERVER 变量的值改成你在 /etc/hosts 文件里指定的 Puppet master 服务器的域名。

PUPPET_SERVER=server.your.domain

master 服务器名也要在 /etc/puppet/puppet.conf 文件的“[agent]”小节里事先定义好。

server=server.your.domain

现在可以启动 Puppet 客户端了:

# service puppet start

强制我们的客户端在 Puppet master 服务器上登记:

# puppet agent --test

你会看到类似于下面的输出。别怕,这是正常现象,因为服务器还没有在 Puppet master 服务器上验证过。

Exiting; no certificate found and waitforcert is disabled

返回 Puppet master 服务器,检查证书验证请求:

# puppet cert list

你应该能看到一个列出了所有向 Puppet master 服务器发起证书签名请求的服务器。找到你客户端服务器的 hostname 然后使用下面的命令签名(client-node 是你客户端节点的域名):

# puppet cert sign client-node

到此为止 Puppet 客户端和服务器都正常工作了。恭喜你!但是,现在 Puppet master 没有任何要客户端做的事儿。好吧,我们来创建一些基本的 manifest 文件然后让我们的客户端节点安装一些基本工具。

回到你的 Puppet 服务器,确保目录 /etc/puppet/manifests 存在。

# mkdir -p /etc/puppet/manifests

创建 manifest 文件 /etc/puppet/manifests/site.pp,内容如下

node 'client-node' {
        include custom_utils
}

class custom_utils {
        package { ["nmap","telnet","vim-enhanced","traceroute"]:
                ensure => latest,
                allow_virtual => false,
        }
}

然后重新启动 puppetmaster 服务。

# service puppetmaster restart

客户端默认每 30 分钟更新一次配置,如果你希望你的修改能强制生效,就在客户端执行如下命令:

# puppet agent -t

如果你需要修改客户端的默认刷新时间,编辑客户端节点的 /etc/puppet/puppet.conf 文件中“[agent]”小节,增加下面这一行:

runinterval =

这个选项的值可以是秒(格式比如 30 或者 30s),分钟(30m),小时(6h),天(2d)以及年(5y)。值得注意的是,0 意味着“立即执行”而不是“从不执行”

提示和技巧

1. 调试

你免不了会提交错误的配置,然后不得不通过调试判断问题出现在哪儿。一般来说,你要么通过查看日志文件 /var/log/puppet 着手解决问题,要么手动执行查看输出:

# puppet agent -t

使用“-t”选项,你可以看到 Puppet 的详细输出。这条命令还有额外的选项可以帮你定位问题。首先要介绍的选项是:

# puppet agent -t --debug

debug 选项会显示 Puppet 本次运行时的差不多每一个步骤,这在调试非常复杂的问题时很有用。另一个很有用的选项是:

# puppet agent -t --noop

这个选项让 puppet 工作在 dry-run(译注:空转模式,不会对真实环境产生影响)模式下,不会应用任何修改。Puppet 只会把其工作内容输出到屏幕上,不会写到磁盘里去。

2. 模块

有时候你需要更复杂的 manifest 文件,在你着手编写它们之前,你有必要花点儿时间浏览一下 https://forge.puppetlabs.com。Forge 是一个集合了 Puppet 模块的社区,你的问题很可能已经有人解答过了,你能在那儿找到解决问题的模块。如果找不到,那就自己写一个然后提交上去,其他人也能从中获益。

现在,假设你已经找到了一个模块能解决你的问题。怎么把它安装到你的系统中去呢?非常简单,因为 Puppet 已经有了可以直接下载模块的用户界面,只需要执行下面的命令:

# puppet module install <module_name> --version 0.0.0

<module_name> 是你选择的模块的名字,版本号可选(如果没有指定版本号,默认使用最新的版本)。如果你不记得想安装的模块的名字了,试试下面的命令搜索模块:

# puppet module search <search_string>

你会得到一个包含 search_string 的列表。

# puppet module search apache

Notice: Searching https://forgeapi.puppetlabs.com ...
NAME                   DESCRIPTION                        AUTHOR          KEYWORDS
example42-apache       Puppet module for apache           @example42      example42, apache
puppetlabs-apache      Puppet module for Apache           @puppetlabs     apache web httpd centos rhel ssl wsgi proxy
theforeman-apache      Apache HTTP server configuration   @theforeman     foreman apache httpd DEPRECATED

如果你想查看已经安装了哪些模块,键入:

# puppet module list

总结

到目前为止,你应该有了功能完整的可以向一个或多个客户端服务器推送基本配置的 Puppet master 服务器。你可以自己随便加点儿配置适配你自己的网络环境。不必为试用 Puppet 担心,你会发现,它会拯救你的生活。

Puppet 实验室正在试着维护一个质量上乘的项目文档,所以如果你想学点儿关于 Puppet 相关的配置,我强烈推荐你访问 Puppet 项目的主页 http://docs.puppetlabs.com

如果你有任何问题,敬请在文章下方评论,我会尽我所能回答你并给你建议。


via: http://xmodulo.com/2014/08/install-puppet-server-client-centos-rhel.html

作者:Jaroslav Štěpánek 译者:sailing 校对:wxy

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

检查你的系统系统是否有“Shellshock”漏洞并修复它

$
0
0

快速地向你展示如何检查你的系统是否受到Shellshock的影响,如果有,怎样修复你的系统免于被Bash漏洞利用

如果你正跟踪新闻,你可能已经听说过在Bash中发现了一个漏洞,这被称为Bash Bug或者** Shellshock**。 红帽是第一个发现这个漏洞的机构。Shellshock错误允许攻击者注入自己的代码,从而使系统开放各给种恶意软件和远程攻击。事实上,黑客已经利用它来启动DDoS攻击

由于Bash在所有的类Unix系统中都有,如果这些都运行bash的特定版本,它会让所有的Linux系统都容易受到这种Shellshock错误的影响。

想知道如果你的Linux系统是否已经受到Shellshock影响?有一个简单的方法来检查它,这就是我们要看到的。

检查Linux系统的Shellshock漏洞

打开一个终端,在它运行以下命令:

env x='() { :;}; echo vulnerable' bash -c 'echo hello'

如果你的系统没有漏洞,你会看到这样的输出:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x’
hello

如果你的系统有Shellshock漏洞,你会看到一个像这样的输出:

vulnerable
hello

我尝试在我的Ubuntu14.10上运行,我得到了这个:

您还可以通过使用下面的命令查看bash的版本:

bash --version

如果bash的版本是3.2.51(1),你就应该更新了。

为有Shellshock漏洞的Linux系统打补丁

如果你运行的是基于Debian的Linux操作系统,如Ubuntu、Linux Mint的等,请使用以下命令升级Bash:

sudo apt-get update && sudo apt-get install --only-upgrade bash

对于如Fedora,Red Hat,Cent OS等操作系统,请使用以下命令

yum -y update bash

我希望这个小技巧可以帮助你,看看你是否受到Shellshock漏洞的影响并解决它。有任何问题和建议,欢迎来提。


via: http://itsfoss.com/linux-shellshock-check-fix/

作者:Abhishek 译者:geekpi 校对:wxy

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


Linux有问必答:如何用Perl检测Linux的发行版本

$
0
0

提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码。为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu、CentOS、Debian、Fedora等等),以及它是什么版本号。如何用Perl检测Linux的发行版本?

如果要用Perl脚本检测Linux的发行版,你可以使用一个名为istribution">Linux:istribution的Perl模块。该模块通过检查/etc/lsb-release以及其他在/etc下的发行版特定的目录来猜测底层Linux操作系统。它支持检测所有主要的Linux发行版,包括Fedora、CentOS、Arch Linux、Debian、Ubuntu、SUSE、Red Hat、Gentoo、Slackware、Knoppix和Mandrake。

要在Perl中使用这个模块,你首先需要安装它。

在Debian或者Ubuntu上安装 Linux:istribution

基于Debian的系统直接用apt-get安装

$ sudo apt-get install liblinux-distribution-packages-perl 

在Fedora、CentOS 或者RHEL上安装 Linux:istribution

如果你的Linux没有Linux:istribution模块的安装包(如基于红帽的系统),你可以使用CPAN来构建。

首先确保你的Linux系统安装了CPAN

$ sudo yum -y install perl-CPAN 

然后,使用这条命令来构建并安装模块:

$ sudo perl -MCPAN -e 'install Linux:istribution' 

用Perl确定Linux发行版

Linux:istribution模块安装完成之后,你可以使用下面的代码片段来确定你运行的Linux发行版本。

use Linux:istribution qw(distribution_name distribution_version);

my $linux = Linux:istribution->new;

if ($linux) {
  my $distro = $linux->distribution_name();
  my $version = $linux->distribution_version();
  print "Distro: $distro $version\n";
}
else {
  print "Distro: unknown\n";
}

via: http://ask.xmodulo.com/detect-linux-distribution-in-perl.html

译者:geekpi 校对:wxy

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

你不一定知道,如何重置CentOS 7的Root密码

$
0
0

重置Centos 7 Root密码的方式和Centos 6完全不同。让我来展示一下到底如何操作。

1 - 在启动grub菜单,选择编辑选项启动

2 - 按键盘e键,来进入编辑界面

3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/

4 - 现在按下 Control+x ,使用单用户模式启动

5 - 现在,可以使用下面的命令访问系统

chroot /sysroot

6 - 重置密码

passwd root

7 - 更新系统信息

touch /.autorelabel

8 - 退出chroot

exit

9 - 重启你的系统

reboot

就是这样!


via: http://www.unixmen.com/reset-root-password-centos-7/

作者:M.el Khamlichi 译者:su-kaiyao 校对:wxy

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

CentOS 7下搭建高可用集群

$
0
0

本文以两台机器实现双集热备高可用集群,主机名node1IP192.168.122.168 ,主机名node2IP192.168.122.169

一、安装集群软件

必须软件pcspacemakercorosyncfence-agents-all,如果需要配置相关服务,也要安装对应的软件

二、配置防火墙

1、禁止防火墙和selinux

# systemctl disable firewalld
# systemctl stop firewalld

修改/etc/sysconfig/selinux确保SELINUX=disabled,然后执行setenforce 0或者reboot服务器以生效

2、设置防火墙规则

# firewall-cmd --permanent --add-service=high-availability
# firewall-cmd --add-service=high-availability

 三、各节点之间主机名互相解析

分别修改2台主机名分别为node1node2,在centos 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。

#vi /etc/hostname
node1

#systemctl restart network.service
#hostname
node1

 配置2台主机的主机表,在/etc/hosts中加入

192.168.122.168 node1
192.168.122.169 node2

 四、各节点之间时间同步

node1node2分别进行时间同步,可以使用ntp实现。 

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1 为时间服务器 

五、各节点之间配置ssh的无密码密钥访问。

下面的操作需要在各个节点上操作。

# ssh-keygen -t rsa -P ‘’   #这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名用登录用户名

两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名, 192.168.122.168 node1 192.168.122.169 node2 

# ssh node2 ‘date’;date #测试一下是否已经互信 

六、通过pacemaker来管理高可用集群

1、创建集群用户

为了有利于各节点之间通信和配置集群,在每个节点上创建一个hacluster的用户,各个节点上的密码必须是同一个。

# passwd hacluster

Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

2、设置pcsd开机自启动

# systemctl start pcsd.service
# systemctl enable pcsd.service

3、集群各节点之间进行认证

# pcs cluster auth node1 node2Username: hacluster Password: node1: Authorized node2: Authorized

4、创建并启动集群

[root@z1 ~]# pcs cluster setup --start --name my_cluster node1 node2

node1: Succeeded
node1: Starting Cluster...
node2: Succeeded
node2: Starting Cluster...

5、设置集群自启动

# pcs cluster enable –all

6、查看集群状态信息

[root@z1 ~]# pcs cluster status

7、设置fence设备

这个可以参考<Red Hat Enterprise Linux 7 High Availability Add-On Reference>

corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默 认配置目前尚不可用,这可以通过如下命令验证:

#crm_verify -L -V

可以通过如下面命令禁用stonith

#pcs property set stonith-enabled=false(默认是true)

8、配置存储

高可用集群既可以使用本地磁盘来构建纯软件的镜像型集群系统,也可以使用专门的共享磁盘装置来构建大规模的共享磁盘型集群系统,充分满足客户的不同需求。

共享磁盘主要有iscsiDBRD。本文并没有使用共享磁盘。

9、配置浮点IP

不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.122.101作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。

# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.122.170 cidr_netmask=24 op monitor interval=30s
# pcs update VIP op monitor interval=15s

10、配置apache服务

node1node2上安httpd ,确认httpd开机被禁用

# systemctl status httpd.service;

配置httpd监控页面(貌似不配置也可以通过systemd监控),分别在node1node2上执行

# cat > /etc/httpd/conf.d/status.conf << EOF
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
EOF

首先我们为Apache创建一个主页。在centos上面默认的Apache docroot/var/www/html,所以我们在这个目录下面建立一个主页。

node1节点修改如下:

[root@node1 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>Hello node1</body>
</html>

END

node2节点修改如下:

[root@node2 ~]# cat <<-END >/var/www/html/index.html 
<html>
<body>Hello node2</body>
</html>

END

下面语句是将httpd作为资源添加到集群中:

#pcs resource create WEB apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status"

11、创建group

VIPWEB resource捆绑到这个group中,使之作为一个整体在集群中切换。(此配置为可选)

# pcs resource group add MyGroup VIP
# pcs resource group add MyGroup WEB

12、配置服务启动顺序

以避免出现资源冲突,语法:(pcs resource group add的时候也可以根据加的顺序依次启动,此配置为可选)

# pcs constraint order [action] then [action]
# pcs constraint order start VIP then start WEB

13、指定优先的 Location (此配置为可选)

Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置:当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。同样的,我们给他取一个描述性的名字(prefer-node1),指明我们想在上面跑WEB 这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:

# pcs constraint location WEB prefers node1=50
# pcs constraint location WEB prefers node2=45

这里指定分值越大,代表越想在对应的节点上运行。

14、资源粘性(此配置为可选)

一些环境中会要求尽量避免资源在节点之间迁移。迁移资源通常意味着一段时间内无法提供服务,某些复杂的服务,比如Oracle数据库,这个时间可能会很长。

为了达到这个效果,Pacemaker 有一个叫做“资源粘性值”的概念,它能够控制一个服务(资源)有多想呆在它正在运行的节点上。

Pacemaker为了达到最优分布各个资源的目的,默认设置这个值为0。我们可以为每个资源定义不同的粘性值,但一般来说,更改默认粘性值就够了。资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示负无穷,inf表示正无穷。

# pcs resource defaults resource-stickiness=100

 

常用命令汇总:

查看集群状态#pcs status

查看集群当前配置:#pcs config

开机后集群自启动:#pcs cluster enable –all

启动集群:#pcs cluster start –all

查看集群资源状态:#pcs resource show

验证集群配置情况:#crm_verify -L -V

测试资源配置:#pcs resource debug-start resource

设置节点为备用状态:#pcs cluster standby node1

Linux 3.17 Kernel发布

$
0
0

Linus Torvalds在邮件列表上宣布发布Linux 3.17 Kernel。

新版的主要特性包括:

  • 4个新的系统调用——新的随机数系统调用getrandom(),用于多线程程序的过滤器seccomp(),以及memfd_create()kexec_file_load()
  • 解决2038年问题的一系列内部工作
  • SCSI层的多队列支持,Xbox One手柄驱动,东芝笔记本的防坠落支持,等等。

Linus表示由于旅行出席会议的原因,3.18 的合并窗口可能会延长。

在Linux中使用LVM构建灵活的磁盘存储(第一部分)

$
0
0

逻辑卷管理器(LVM)让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间,可以在它的卷组中将空闲空间添加到其逻辑卷中,而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败,用于替换的磁盘可以使用卷组注册成一个物理卷,而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。

在Linux中创建LVM存储

在如今,每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID,SAN。单个物理卷将会被加入组以创建卷组,在卷组中,我们需要切割空间以创建逻辑卷。在使用逻辑卷时,我们可以使用某些命令来跨磁盘、跨逻辑卷扩展,或者减少逻辑卷大小,而不用重新格式化和重新对当前磁盘分区。卷可以跨磁盘抽取数据,这会增加I/O数据量。

LVM特性

  • 可以在任何时候灵活地扩展空间。
  • 可以安装和处理任何文件系统。
  • 可以通过迁移来恢复错误磁盘。
  • 可以使用快照功能恢复文件系统到先前的阶段。等等……

我的服务器设置 - 需求

  • 操作系统 —— 安装有LVM的CentOS 6.5
  • 服务器IP地址 —— 192.168.0.200

在Linux中创建LVM磁盘存储

1. 我们已经在虚拟磁盘(VDA)中使用了带LVM的CentOS 6.5操作系统。在此,我们可以使用下列命令查看到物理卷(PV),卷组(VG),逻辑卷(LV)。

# pvs 
# vgs
# lvs
Check Physical Volumes
检查物理卷

下面是上面截图中各个参数的说明。

  • 物理磁盘大小(PV Size)
  • 用作虚拟磁盘vda的磁盘
  • 卷组大小(VG Size)
  • 卷组名称(vg_tecmint)
  • 逻辑卷名称(LogVol00,LogVol01)
  • LogVol00分配给swap,大小1GB
  • LogVol01分配给/,大小16.5GB

从上面看,我们可以知道VDA磁盘中没有足够的空闲空间。

2. 为了创建一个新卷组,我们需要在这台服务器上添加额外的3个硬盘。3个驱动器不是强制使用的,只要一个就足够用来创建新的VG,并在其中创建LV了。我在这里添加了更多的磁盘,目的只是用于演示和更多命令功能的说明。

下面是我已经额外添加的磁盘。

sda, sdb, sdc

# fdisk -l
Verify Added Disks
验证添加的磁盘
  • 用于操作系统(CentOS 6.5)的默认磁盘。
  • 默认磁盘上定义的分区(vda1 = swap),(vda2 = /)。
  • 额外添加的磁盘Disk1,Disk2,Disk3。

各个磁盘大小都是20GB,默认的卷组的PE大小为4MB,我们在该服务器上配置的卷组使用默认PE。

Volume Group Display
卷组显示
  • VG Name – 卷组名称。
  • Format – LVM架构使用LVM2。
  • VG Access – 卷组为读写模式,备好待用。
  • VG Status – 卷组可调整大小,如果我们需要添加更多空间,我们可以扩展更多。
  • Cur LV – 当前卷组中有2个逻辑卷。
  • CurPV and Act PV – 当前使用的物理磁盘是1(vda),已被激活,因此我们可以使用该卷组。
  • PE Size – 磁盘的物理扩展大小,可以定义使用PE,或者GB,LVM的默认PE大小是4MB。例如,如果我们需要创建5GB大小的逻辑卷,我们可以使用总计1280 PE,你们懂我的意思么?

这里解释一下 -> 1024MB = 1GB,这样的话,1024MB x 5 = 5120PE = 5GB,然后5120/4 = 1280,4是默认的PE大小。

  • Total PE – 该卷组具有的PE数量。
  • Alloc PE – 总的PE使用量,已经使用的全部PE,4482 x 4PE = 17928。
  • Free PE – 这里因为已经使用,所以没有空闲PE了。

3. 只使用了vda,当前CentOS在使用lvm的vda物理磁盘中安装了/boot,/,swap,,该磁盘中没有空间剩余。

# df -TH
Check the Disk Space
检查磁盘空间

上面的图片中显示了用于根的挂载点已使用了18GB,因此没有空闲空间可用了。

4. 那么,让我们创建新的物理卷(pv),以及名为tecmintaddvg的卷组(vg),并在其中创建逻辑卷(lv)。这里,我们可以创建4个逻辑卷,分别名为 tecmint_documentstecmint_manager以及tecmintaddvg

我们可以扩展当前使用的卷组以获得更多空间。但在这里,我们将要做的是,创建新的卷组,然后在里面肆意妄为吧。过会儿,我们可以看到怎样来扩展使用中的卷组的文件系统。

在使用新磁盘前,我们需要使用fdisk来对磁盘分区。

# fdisk -cu /dev/sda
  • c – 关闭DOS兼容模式,推荐使用该选项。
  • u – 当列出分区表时,会以扇区而不是柱面显示。
Create New Physical Partitions
创建新的物理分区

接下来,请遵循以下步骤来创建新分区。

  • 选择n来创建新分区。
  • 选择p来创建主分区。
  • 选择我们需要创建的分区号。
  • Enter两次来使用整个磁盘空间。
  • 我们需要修改新创建的分区类型,输入t
  • 选择需要修改的分区号,选择我们创建的分区号1
  • 这里,我们需要修改类型。我们需要创建LVM,因此我们使用LVM的类型代码8e。如果不知道类型代码,按L来列出所有类型代码。
  • 打印我们创建的分区以确认。
  • 这里我们可以看到Linux LVM的ID 8e。
  • 写入修改并退出fdisk。

重复以上步骤,为另外2个磁盘sdb和sdc创建新分区。然后重启机器,使用fdisk命令来验证分区表。

# fdisk -l
Verify Partition Table
验证分区表

配置 Linux 的访问控制列表(ACL)

$
0
0

使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。

Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。

在文件系统使ACL生效

首先,我们需要安装工具来管理ACL。

Ubuntu/Debian 中:

$ sudo apt-get install acl

CentOS/Fedora/RHEL 中:

# yum -y install acl

Archlinux 中:

# pacman -S acl

出于演示目的,我将使用ubuntu server版本,其他版本类似。

安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。

首先,我们检查ACL功能是否已经开启。

$ mount

你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。

现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。

$ sudo mount / -o remount

干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。

ACL 范例

基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。让我们来做一些测试。

我创建一个目录/shared给一个假设的用户,名叫freeuser

$ ls -lh /

我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。

首先,为用户test设置ACL:

$ sudo setfacl -m u:test:rwx /shared

现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。

现在我们增加只读权限给用户test2:

$ sudo setfacl -m u:test2:rx /shared

注意test2读取目录需要执行(x)权限

让我来解释下setfacl命令格式:

  • -m 表示修改ACL。你可以增加新的,或修改存在的ACL
  • u: 表示用户。你可以使用 g 来设置组权限
  • test 用户名
  • :rwx 需要设置的权限。

现在让我向你展示如何读取ACL:

$ ls -lh /shared

你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行:

$ sudo getfacl /shared

最后,如果你需要移除ACL:

$ sudo setfacl -x u:test /shared

如果你想要立即擦除所有ACL条目:

$ sudo setfacl -b /shared

最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。

总结

使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。


via: http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html

作者:Christopher Valerio 译者:VicYu 校对:wxy

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

墙外香花:Google drive和Ubuntu 14.04 LTS的胶合

$
0
0

Google尚未发布用于从Ubuntu访问其drive的官方Linux客户端。然开源社区却业已开发完毕非官方之软件包‘grive-tools’。

grive乃是Google Drive(在线存储服务)的GNU/Linux系统客户端,允许你同步所选目录到云端,以及上传新文件到Google Drive。

grive-tools安装步骤

步骤:1 使用下列命令添加grive-tools PPA:

# sudo add-apt-repository ppa:thefanclub/grive-tools

步骤:2 更新列表

#sudo apt-get update

步骤:3 安装grive-tools

# sudo apt-get install grive-tools 

访问Google Drive的步骤

步骤:1 安装完了,通过输入GriveUnity Dash搜索应用,并打开之。

步骤:2 登入google drive,你将被问及访问google drive的权限。

点击下一步时,新的浏览器中讲打开Google登录页

登入你的Google帐号,并点击接受,如下所示:

步骤:3 下面将提供给你一个 google代码,复制并粘贴到Grive设置框内。

点击下一步后,将会开始同步google drive到你家目录下的‘Google Drive’文件夹。完成后,将出现如下窗口。

Google Drive 文件夹会创建在用户的主目录下。


via: http://www.linuxtechi.com/mount-google-drive-in-ubuntu/

作者:Pradeep Kumar 译者:GOLinux 校对:wxy

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


Linux有问必答:如何使用tcpdump来捕获TCP SYN,ACK和FIN包

$
0
0

问题:我想要监控TCP连接活动(如,建立连接的三次握手,以及断开连接的四次握手)。要完成此事,我只需要捕获TCP控制包,如SYN,ACK或FIN标记相关的包。我怎样使用tcpdump来仅仅捕获TCP SYN,ACK和/或FYN包?

作为业界标准的捕获工具,tcpdump提供了强大而又灵活的包过滤功能。作为tcpdump基础的libpcap包捕获引擎支持标准的包过滤规则,如基于5重包头的过滤(如基于源/目的IP地址/端口和IP协议类型)。

tcpdump/libpcap的包过滤规则也支持更多通用分组表达式,在这些表达式中,包中的任意字节范围都可以使用关系或二进制操作符进行检查。对于字节范围表达,你可以使用以下格式:

proto [ expr : size ]

“proto”可以是熟知的协议之一(如ip,arp,tcp,udp,icmp,ipv6),“expr”表示与指定的协议头开头相关的字节偏移量。有我们熟知的直接偏移量如tcpflags,也有取值常量如tcp-syn,tcp-ack或者tcp-fin。“size”是可选的,表示从字节偏移量开始检查的字节数量。

使用这种格式,你可以像下面这样过滤TCP SYN,ACK或FIN包。

只捕获TCP SYN包:

 # tcpdump -i <interface> "tcp[tcpflags] & (tcp-syn) != 0" 

只捕获TCP ACK包:

# tcpdump -i <interface> "tcp[tcpflags] & (tcp-ack) != 0"

只捕获TCP FIN包:

# tcpdump -i <interface> "tcp[tcpflags] & (tcp-fin) != 0"

之捕获TCP SYN或ACK包:

 # tcpdump -r <interface> "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" 


via: http://ask.xmodulo.com/capture-tcp-syn-ack-fin-packets-tcpdump.html

译者:GOLinux 校对:wxy

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

如何在Linux上移除文件内的隐私数据

$
0
0

典型的数据文件通常关联着“元数据”,其包含这个文件的描述信息,表现为一系列属性-值的集合。元数据一般包括创建者名称、生成文件的工具、文件创建/修改时期、创建位置和编辑历史等等。几种流行的元数据标准有 EXIF(图片)、RDF(web资源)和DOI(数字文档)等。

虽然元数据在数据管理领域有它的优点,但事实上它会危害你的隐私。相机图片中的EXIF格式数据会泄露出可识别的个人信息,比如相机型号、拍摄相关的GPS坐标和用户偏爱的照片编辑软件等。在文档和电子表格中的元数据包含作者/所属单位信息和相关的编辑历史。不一定这么绝对,但诸如metagoofil一类的元数据收集工具在信息收集的过程中常最作为入侵测试的一部分被利用。

对那些想要从共享数据中擦除一切个人元数据的用户来说,有一些方法从数据文件中移除元数据。你可以使用已有的文档或图片编辑软件,通常有自带的元数据编辑功能。在这个教程里,我会介绍一种不错的、单独的元数据清理工具,其目标只有一个:匿名一切私有元数据

MAT(元数据匿名工具箱)是一款专业的元数据清理器,使用Python编写。它属于Tor旗下的项目,而且是Live 版的隐私增强操作系统 Trails 的标配应用。

与诸如exiftool等只能对有限种类的文件类型进行写入的工具相比,MAT支持从各种各样的文件中消除元数据:图片(png、jpg)、文档(odt、docx、pptx、xlsx和pdf)、归档文件(tar、tar.bz2)和音频(mp3、ogg、flac)等。

在Linux上安装MAT

在基于Debian的系统(Ubuntu或Linux Mint)上,已经打包好MAT,所以安装很直接:

$ sudo apt-get install mat

在Fedora上,并没有预先生成的MAT软件包,所以你需要从源码生成。这是我在Fedora上生成MAT的步骤(不成功的话,请查看教程底部):

$ sudo yum install python-devel intltool python-pdfrw perl-Image-ExifTool python-mutagen
$ sudo pip install hachoir-core hachoir-parser
$ wget https://mat.boum.org/files/mat-0.5.tar.xz
$ tar xf mat-0.5.tar.xz
$ cd mat-0.5
$ python setup.py install 

使用MAT-GUI匿名元数据

一旦安装好,通过GUI和命令行都可以使用MAT。输入这个命令启动MAT的GUI:

$ mat-gui

尝试清理一个包含如下内置元数据的实例文档文件(如private.odt)。

点击“添加”按钮来添加需要清理的文件到MAT中。一旦载入文件,点击“确认”按钮对所有隐藏的元数据信息进行扫描。

只要元数据被MAT检测到,“State”状态就会被标记成“Dirty”。双击文件可以查看检测到的元数据。

点击“清理”按钮来清除文件中的元数据。MAT会自动清空文件中的所有私有元数据字段。

清除后的状态中不包含任何私有可辨识的痕迹:

从命令行匿名元数据

$ mat -c .

正如前面提到的,另一种调用MAT的方式是从命令行,使用mat命令可达到。

为了检查任何敏感的元数据,先前往文件所在的目录,然后运行:

$ mat -c .

这样会扫描当前目录和其子目录下的所有文件,并报告它们的状态(已清理或未清理)。

你可以使用“-d”选项来查看检测到的真实元数据:

$ mat -d <input_file> 

如果不为mat命令提供任何选项,默认操作会移除文件的元数据。如果要在清理的过程中保留原始文件的备份,使用“-b”选项。下面命令会清除所有文件的元数据,并将原始文件存储为“*.bak”文件。

$ mat -b . 

查看所支持的文件类型,请运行:

$ mat -l 

故障排除

当前我在Fedora上使用编译版本的MAT遇到了下列问题。当我尝试在Fedora清除归档/文档文件的元数据时(如.gz、.odt、*.docx),MAT因为下列错误失败。如果你知道如何解决这个问题,请在评论里回复我。

  File "/usr/lib64/python2.7/zipfile.py", line 305, in __init__
    raise ValueError('ZIP does not support timestamps before 1980')
ValueError: ZIP does not support timestamps before 1980

总结

MAT是一款简单但非常好用的工具,用来预防从元数据中无意泄露私人数据。请注意如果有必要,文件内容也需要保护。MAT能做的是消除与文件相关的元数据,但并不会对文件本身进行任何操作。简而言之,MAT是一名救生员,因为它可以处理大多数常见的元数据移除,但不应该只指望它来保证你的隐私。[译者注:养成良好的隐私保护意识和习惯才是最好的方法]


via: http://xmodulo.com/2014/08/remove-file-metadata-linux.html

作者:Dan Nanni 译者:KayGuoWhu 校对:wxy

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

systemd作者抨击开源和Linux社区

$
0
0

systemd是一个备受争议的初始化系统,而它的作者Lennart Poettering也是一位备受争议的人。

他在Google+上发了一篇帖子抨击了开源和Linux社区,其中包括Linux作者 Linus Torvalds 。

Lennart声称开源的世界是一个病态的世界,充斥了混帐之人,而他则可能是最主要的攻击目标之一。他举例说:收到过恐吓信,反对者不断发起请求他停止工作的请愿,征集比特币雇佣杀手杀他,抵制丑化更是不绝于耳,而在IRC上他也经常收到各种信息的骚扰。

他还矛头指向了Linux作者 Linus Torvalds,说Linux社区从头烂到尾。他说Linux社区被三四十岁的西方白人直男统治,表示对于Linux社区的新人来说,最后要么变成厚脸皮要么远远避开,“它不是一个友好的地方。”

ARM宣布新操作系统mbed

$
0
0

ARM宣布了针对物联网低功耗设备的操作系统mbed OS

mbed OS overview

mbed OS部分开源,其余部分控制在ARM手中,理由是为了确保操作系统不会碎片化。ARM声称mbed OS只需要256kb内存,它希望开发商能能使用mbed开发电池使用寿命长达数年的设备。

mbed OS将免费提供给所有厂商使用。

在物联网领域,mbed面临多个竞争对手的挑战,如通用电气的 Predix 、三星的 Tizen,Nest Labs使用的是基于Linux的私有软件,在被Google收购后它未来可能改用 Android。

年度最期待游戏《废土2》登陆Linux

$
0
0

Wasteland-2

《废土2》是经典RPG《废土》回归之作,由InXile公司开发。本作借由慈善网站Kickstarter的募捐而启动,可以说这款游戏开发的所有希望都来自玩家。游戏开发商曾强调《废土2》项目募集的资金都不会用于添加毫无意义的甚至减弱核心体验的功能,游戏力求回归传统RPG,探索,发现与求生将成为游戏的着重点。

玩家初步探索将发生在一个3D地图内,区域内具代表性的地理特征会显示你周围的环境。当玩家在侦查环境时,重要的方位,定居点和网点将被显示出来。3D探索有点像《骑马与砍杀》或是《无冬之夜2:泽希尔风暴》。

游戏地图分为两部分,3D场景显示你周围的环境细节,2D模式显示整个区域的总体地形,建筑,资源和“地标”的位置。Markland 表示,“地标”是《废土2》中刺激区域,比如废弃矿洞和高速路入口路障等。不过无论你走在哪里,死亡都在等着你。

玩家在地图上探险时会发现废土是一个危险的地方,他们会遇到一些威胁如死于脱水。当水供应是基于队伍中的流浪者和水壶的数量时,玩家还得精通于水资源管理。辐射中毒是另一种死法,所以玩家需要密切关注自己的盖革计数器。当然在废土你也有可能会被谋杀,但这取决于随机遭遇系统把各种危险的动物,突变体,雷达和机器人设置在什么时候突袭你。

最低配置:

系统:Linux (32 or 64 bit)
CPU :Dual Core 3.0GHz or equivalent processor
内存:4 GB RAM
显存:512 MB of VRAM
DX :OpenGL
硬盘:20 GB available space

推荐配置:

系统:Linux (32 or 64 bit)
CPU :i5 or equivalent
内存:4 GB RAM
显存:1 GB of VRAM
DX :OpenGL
硬盘:20 GB available space

游戏72分钟入门全方位解说:

ss_0652161f7ace8171cb3c7c34e665bbfb7f02c592 ss_946734797fa786612389b8351001b517548df73f ss_de5e8e1e48c8c1048da963c30777aa819cff85a8

Viewing all 13806 articles
Browse latest View live


Latest Images