Gabriel Cánepa 发布的文章

当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的。你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一个极佳的选择。而如果你碰到必须追踪打开的文件(在Unix意义上:一切皆文件)的需求,可能你会使用lsof。

strace、tcpdump以及lsof,确实是些伟大的工具,它们应该成为每个系统管理员工具集之中的一部分,而这也正是你为什么应该爱上sysdig的原因。它是一个强大的开源工具,用于系统级别的勘察和排障,它的创建者在介绍它时称之为“strace+tcpdump+lsof+上面点缀着lua樱桃的绝妙酱汁”。抛开幽默不说,sysdig的最棒特性之一在于,它不仅能分析Linux系统的“现场”状态,也能将该状态保存为转储文件以供离线检查。更重要的是,你可以自定义sysdig的行为,或者甚至通过内建的(你也可以自己编写)名为凿子(chisel)的小脚本增强其功能。单独的凿子可以以脚本指定的各种风格分析sysdig捕获的事件流。

在本教程中,我们将探索sysdig的安装及其基本用法,在Linux上实施系统监控和排障。

安装Sysdig

对于本教程,由于为了简便、缩短安装流程以及版本的不可知,我们将选择使用官方网站提供的自动化安装过程。在自动化过程中,安装脚本会自动检测操作系统并安装必需的依赖包。

以root身份运行以下命令来从官方apt/yum仓库安装sysdig:

# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash 

安装完成后,我们可以通过以下方法调用sysdig来感受一下它:

# sysdig 

我们的屏幕将马上被系统上发生的所有事件填满,对于这些信息,不便于我们做更多操作。要进一步处理,我们可以运行:

# sysdig -cl | less 

来查看可用的凿子列表。

默认有以下类目可用,各个类目中分布有多个内建的凿子。

  • CPU Usage:CPU使用量
  • Errors:错误
  • I/O
  • Logs:日志
  • Misc:混杂
  • Net:网络
  • Performance:性能
  • Security:安全
  • System State:系统状态

要显示指定凿子上的信息(包括详细的命令行用法),运行以下命令:

# sysdig -cl [凿子名称] 

例如,我们可以检查“网络”类目下关于spy\_port凿子的信息:

# sysdig -i spy_port 

凿子可以通过过滤器(可同时应用于实时数据和记录文件)组合,以获取更多有用的输出。

过滤器遵从“类.字段”结构。例如:

  • fd.cip:客户端IP地址。
  • evt.dir:事件方向,可以是‘>’用于进入事件,或‘<’用于退出事件。

完整的过滤器列表可以通过以下命令显示:

# sysdig -l 

在本教程剩余部分,我将演示几个sysdig的使用案例。

Sysdig实例: 服务器性能排障

假定你的服务器发生了性能问题(如,没有回应,或者重大的回应延迟)。你可以使用瓶颈凿子来显示当前10个最慢系统调用的列表。

使用以下命令在存活服务器上进行实时检查。“-c”标识,后跟凿子名称告诉sysdig运行指定的凿子。

# sysdig -c bottlenecks 

或者,你可以离线对服务器实施性能分析。在此种情况下,你可以保存完整的sysdig记录到文件,然后像下面这样针对记录运行瓶颈凿子。

首先,保存sysdige记录(使用Ctrl+c来停止收集):

# sysdig -w trace.scap 

收集完记录后,你可以运行以下命令来检查捕获间隔中最慢的系统调用:

# sysdig -r trace.scap -c bottlenecks 

你需要关注栏#2,#3和#4,这些分别表示执行时间、进程名和PID。

Sysdig实例: 监控交互用户活动

假定你作为系统管理员想要监控系统中交互的用户活动(如,用户在命令行输入了什么命令,以及用户去了什么目录),这时spy\_user凿子就派上用场了。

让我们首先通过一些额外选项来收集一个sysdig记录。

# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz 
  • “-s 4096”告诉sysdig每个事件捕获4096字节。
  • “-z” (与“-w”一起使用)为记录文件启用压缩。
  • “-w ”保存sysdig记录到指定的文件。

在上面的例子中,我们自定义了基于每个主机的压缩的记录文件的名称。记住,你可以在任何时候按下Ctrl+c来打断sysdig的执行。

在我们收集到了合理数量的数据后,我们可以通过运行以下命令来查看每个用户的交互活动:

# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users 

上面输出的第一栏表示与指定用户的活动相关进程的PID。

如果你想要定位一个指定的用户,以及只监控该用户的活动又怎么样呢?你可以通过用户名对spy\_users凿子的结果进行过滤:

# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo" 

Sysdig实例: 监控文件I/O

我们可以使用“-p”标识来自定义sysdig记录的输出格式,并指定双引号括起来的想要的字段(如用户名、进程名,以及文件或套接口名称)。在本例中,我们将创建一个记录文件,该文件将只包含在家目录中的写入事件(我们今后可以使用“sysdig -r writetrace.scap.gz”来检测该文件)。

# sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz 

Sysdig实例: 监控网络I/O

作为服务器排障的一部分,你可能想要监听网络通信,此工作通常由tcpdump做。对于sysdig,可以很容易进行通信嗅探,其风格更为对用户友好。

例如,你可以检查由特定IP地址,特定进程(如apache2)提供的数据(ASCII编码格式):

# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2 

如果你想要监控原生数据传输(二进制格式),请把“-A”替换为“-X”:

# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2 

要获取更多信息、实例以及案例分析,你可以查阅项目网站。相信我,会有着无限可能,但请不要仅仅局限于我所写的这些。安装sysdig,请从今天开始深入挖掘吧!


via: http://xmodulo.com/monitor-troubleshoot-linux-server-sysdig.html

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

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

据其官方网站,ownCloud可以让你通过一个Web界面或者WebDAV访问你的文件。它还提供了一个平台,可以轻松地查看、编辑和同步您所有设备的通讯录、日历和书签。尽管ownCloud与广泛使用Dropbox非常相似,但主要区别在于ownCloud是免费的,开源的,从而可以自己的服务器上建立与Dropbox类似的云存储服务。使用ownCloud你可以完整地访问和控制您的私人数据,而对存储空间(除了硬盘容量)或客户端的连接数量没有限制。

ownCloud提供了社区版(免费)和企业版(面向企业的有偿支持)。预编译的ownCloud社区版可以提供了CentOS、Debian、Fedora、openSUSE、,SLE和Ubuntu版本。本教程将演示如何在Debian Wheezy上安装和在配置ownCloud社区版。

在Debian上安装 ownCloud

进入官方网站:http://owncloud.org,并点击‘Install’按钮(右上角)。

为当前的版本选择“Packages for auto updates”(下面的图是v7)。这可以让你轻松的让你使用的ownCloud与Debian的包管理系统保持一致,包是由ownCloud社区维护的。

在下一屏中点击继续:

在可用的操作系统列表中选择Debian 7 [Wheezy]:

加入ownCloud的官方Debian仓库:

 # echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list 

加入仓库密钥到apt中:

# wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/Release.key
# apt-key add - < Release.key 

继续安装ownCLoud:

# aptitude update
# aptitude install owncloud 

打开你的浏览器并定位到你的ownCloud实例中,地址是 http://服务器 IP/owncloud:

注意ownCloud可能会包一个Apache配置错误的警告。使用下面的步骤来解决这个错误来解决这些错误信息。

a) 编辑 the /etc/apache2/apache2.conf (设置 AllowOverride 为 All):

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

b) 编辑 the /etc/apache2/conf.d/owncloud.conf

<Directory /var/www/owncloud>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

c) 重启web服务器:

# service apache2 restart 

d) 刷新浏览器,确认安全警告已经消失

设置数据库

这时可以为ownCloud设置数据库了。

首先登录本地的MySQL/MariaDB数据库:

$ mysql -u root -h localhost -p

为ownCloud创建数据库和用户账户。

mysql> CREATE DATABASE owncloud_DB;
mysql> CREATE USER ‘owncloud-web’@'localhost' IDENTIFIED BY ‘whateverpasswordyouchoose’;
mysql> GRANT ALL PRIVILEGES ON owncloud_DB.* TO ‘owncloud-web’@'localhost';
mysql> FLUSH PRIVILEGES; 

通过http://服务器 IP/owncloud 进入ownCloud页面,并选择‘Storage & database’ 选项。输入所需的信息(MySQL/MariaDB用户名,密码,数据库和主机名),并点击完成按钮。

为ownCloud配置SSL连接

在你开始使用ownCloud之前,强烈建议你在ownCloud中启用SSL支持。使用SSL可以提供重要的安全好处,比如加密ownCloud流量并提供适当的验证。在本教程中,将会为SSL使用一个自签名的证书。

创建一个储存服务器密钥和证书的目录:

# mkdir /etc/apache2/ssl

创建一个证书(并有一个密钥来保护它),它有一年的有效期。

 # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt 

编辑/etc/apache2/conf.d/owncloud.conf 启用HTTPS。对于重写规则中的NC、R和L的意义,你可以参考Apache 文档:

Alias /owncloud /var/www/owncloud

<VirtualHost 192.168.0.15:80>
    RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

<VirtualHost 192.168.0.15:443>
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key
    DocumentRoot /var/www/owncloud/
<Directory /var/www/owncloud>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>

启用重写模块并重启Apache:

# a2enmod rewrite
# service apache2 restart 

打开你的ownCloud实例。注意一下,即使你尝试使用HTTP,你也会自动被重定向到HTTPS。

注意,即使你已经按照上述步骤做了,在你启动ownCloud你仍将看到一条错误消息,指出该证书尚未被受信的机构颁发(那是因为我们创建了一个自签名证书)。您可以放心地忽略此消息,但如果你考虑在生产服务器上部署ownCloud,你可以从一个值得信赖的公司购买证书。

创建一个账号

现在我们准备创建一个ownCloud管理员帐号了。

欢迎来自你的个人云!注意你可以安装一个桌面或者移动端app来同步你的文件、日历、通讯录或者更多了。

在右上叫,点击你的用户名,会显示一个下拉菜单:

点击Personal来改变你的设置,比如密码,显示名,email地址、头像还有更多。

ownCloud 使用案例:访问日历

让我开始添加一个事件到日历中并稍后下载。

点击左上角的下拉菜单并选择日历。

添加一个时间并保存到你的日历中。

通过 'Event and Tasks' -> 'Import...' -> 'Select file' 下载你的日历并添加到你的Thunderbird日历中:

提示:你还需要设置你的时区以便在其他程序中成功地导入你的日历(默认情况下,日历程序将使用UTC+00:00时区)。要更改时区在左下角点击小齿轮图标,接着日历设置菜单就会出现,你就可以选择时区了:

ownCloud 使用案例:上传一个文件

接下来,我们会从本机上传一个文件

进入文件菜单(左上角)并点击向上箭头来打开一个选择文件对话框。

选择一个文件并点击打开。

接下来你就可以打开/编辑选中的文件,把它移到另外一个文件夹或者删除它了。

总结

ownCloud是一个灵活和强大的云存储,可以从其他供应商快速、简便、无痛的过渡。此外,它是开源软件,你只需要很少有时间和精力对其进行配置以满足你的所有需求。欲了解更多信息,可以随时参考用户管理开发手册。


via: http://xmodulo.com/2014/08/install-configure-owncloud-debian.html

作者:Gabriel Cánepa 译者:geekpi 校对:wxy

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

所有系统管理员想要在他们生产服务器上首先要部署的安全手段之一,就是检测文件篡改的机制——不仅仅是文件内容,而且也包括它们的属性。

AIDE (“高级入侵检测环境”的简称)是一个开源的基于主机的入侵检测系统。AIDE通过检查大量文件属性的不一致性来检查系统二进制文件和基本配置文件的完整性,这些文件属性包括权限、文件类型、索引节点、链接数、链接名、用户、组、文件大小、块计数、修改时间、添加时间、创建时间、acl、SELinux安全上下文、xattrs,以及md5/sha校验值在内的各种特征。

AIDE通过扫描一台(未被篡改)的Linux服务器的文件系统来构建文件属性数据库,以后将服务器文件属性与数据库中的进行校对,然后在服务器运行时对被修改的索引了的文件发出警告。出于这个原因,AIDE必须在系统更新后或其配置文件进行合法修改后重新对受保护的文件做索引。

对于某些客户,他们可能会根据他们的安全策略在他们的服务器上强制安装某种入侵检测系统。但是,不管客户是否要求,系统管理员都应该部署一个入侵检测系统,这通常是一个很好的做法。

在 CentOS或RHEL 上安装AIDE

AIDE的初始安装(同时是首次运行)最好是在系统刚安装完后,并且没有任何服务暴露在互联网甚至局域网时。在这个早期阶段,我们可以将来自外部的一切闯入和破坏风险降到最低限度。事实上,这也是确保系统在AIDE构建其初始数据库时保持干净的唯一途径。(LCTT 译注:当然,如果你的安装源本身就存在安全隐患,则无法建立可信的数据记录)

出于上面的原因,在安装完系统后,我们可以执行下面的命令安装AIDE:

 # yum install aide 

我们需要将我们的机器从网络断开,并实施下面所述的一些基本配置任务。

配置AIDE

默认配置文件是/etc/aide.conf,该文件介绍了几个示例保护规则(如FIPSR,NORMAL,DIR,DATAONLY),各个规则后面跟着一个等号以及要检查的文件属性列表,或者某些预定义的规则(由+分隔)。你也可以使用此种格式自定义规则。

FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
NORMAL = FIPSR+sha512

例如,上面的例子说明,NORMAL规则将检查下列属性的不一致性:权限(p)、索引节点(i)、链接数(n)、用户(u)、组(g)、大小(s)、修改时间(m)、创建时间(c)、ACL(acl)、SELinux(selinux)、xattrs(xattr)、SHA256/SHA512校验和(sha256和sha512)。

定义的规则可灵活地用于不同的目录和文件(用正则表达式表示)。

条目之前的感叹号(!)告诉AIDE忽略子目录(或目录中的文件),对于这些可以另外定义规则。

在上面的例子中,PERMS是用于/etc机器子目录和文件的默认规则。然而,对于/etc中的备份文件(如/etc/.*~)则不应用任何规则,也没有规则用于/etc/mtab文件。对于/etc中的其它一些选定的子目录或文件,使用NORMAL规则替代默认规则PERMS。

定义并应用正确的规则到系统中正确的位置,是使用AIDE最难的一部分,但作一个好的判断是一个良好的开始。作为首要的一条规则,不要检查不必要的属性。例如,检查/var/log或/var/spool里头的文件的修改时间将导致大量误报,因为许多的应用程序和守护进程经常会写入内容到该位置,而这些内容都没有问题。此外,检查多个校验值可能会加强安全性,但随之而来的是AIDE的运行时间的增加。

可选的,如果你使用MAILTO变量指定电子邮件地址,就可以将检查结果发送到你的邮箱。将下面这一行放到/etc/aide.conf中的任何位置即可。

MAILTO=root@localhost

首次运行AIDE

运行以下命令来初始化AIDE数据库:

 # aide --init 

根据/etc/aide.conf生成的/var/lib/aide/aide.db.new.gz文件需要被重命名为/var/lib/aide/aide.db.gz,以便AIDE能读取它:

 # mv /var/lib/aide/aide.db.new.gz /var/lib/aide.db.gz 

现在,是时候来将我们的系统与数据库进行第一次校对了。任务很简单,只需运行:

 # aide 

在没有选项时,AIDE假定使用了--check选项。

如果在数据库创建后没有对系统做过任何修改,AIDE将会以OK信息来结束本次校对。

生产环境中管理AIDE

在构建了一个初始AIDE数据库后,作为不断进行的系统管理活动,你常常需要因为某些合法的理由更新受保护的服务器。每次服务器更新后,你必须重新构建AIDE数据库,以更新数据库内容。要完成该任务,请执行以下命令:

 # aide --update 

要使用AIDE保护生产系统,可能最好通过任务计划调用AIDE来周期性检查不一致性。例如,要让AIDE每天运行一次,并将结果发送到邮箱:

 # crontab -e 

0 0 * * * /usr/sbin/aide --check | /usr/bin/mail -s "AIDE run for $HOSTNAME" [email protected]

测试AIDE检查文件篡改

下面的测试环境将演示AIDE是如何来检查文件的完整性的。

测试环境 1

让我们添加一个新文件(如/etc/fake)。

# cat /dev/null > /etc/fake 

测试环境 2

让我们修改文件权限,然后看看它是否被检测到。

 # chmod 644 /etc/aide.conf 

测试环境 3

最后,让我们修改文件内容(如,添加一个注释行到/etc/aide.conf)。

echo "#This is a comment" >> /etc/aide.conf 

上面的截图中,第一栏显示了文件的属性,第二栏是AIDE数据库中的值,而第三栏是更新后的值。第三栏中空白部分表示该属性没有改动(如本例中的ACL)。

结尾

如果你曾经发现你自己有很好的理由确信系统被入侵了,但是第一眼又不能确定到底哪些东西被改动了,那么像AIDE这样一个基于主机的入侵检测系统就会很有帮助了,因为它可以帮助你很快识别出哪些东西被改动过,而不是通过猜测来浪费宝贵的时间。


via: http://xmodulo.com/host-intrusion-detection-system-centos.html

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

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

保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。

在CentOS系统上,用户登录历史存储在以下这些文件中:

  • /var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。
  • /var/log/wtmp (用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。
  • /var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。

在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT 译注:我怎么觉得这像是做坏事的前奏?)。

Utmpdump的使用及其输出说明

正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。

为了要显示/var/run/utmp的内容,请运行以下命令:

# utmpdump /var/run/utmp 

同样要显示/var/log/wtmp的内容:

# utmpdump /var/log/wtmp | tail -15

最后,对于/var/log/btmp:

# utmpdump /var/log/btmp 

正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT 译注:此处原文有误,实际上都是按照时间顺序排列的)。

每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。

Utmpdump使用样例

下面提供了一些utmpdump的简单使用情况。

1、 检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。

# utmpdump /var/log/wtmp | grep gacanepa 

如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由logrotate生成的旧wtmp和btmp的归档文件。

2、 统计来自IP地址192.168.0.101的登录次数。

# utmpdump /var/log/wtmp | grep 192.168.0.101 

3、 显示失败的登录尝试。

# utmpdump /var/log/btmp 

在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?)

4、 显示每个用户会话的登入和登出信息

# utmpdump /var/log/wtmp 

在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。

  • 在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。
  • 在 [Fri Sep 19 12:04:21 2014 ART],用户 root 登入。
  • 在 [Fri Sep 19 12:07:24 2014 ART],用户 root 登出。

旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。

到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。

例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳:

 # utmpdump /var/log/wtmp | grep -E "\[7].*gacanepa" | awk -v OFS="," 'BEGIN {FS="] "}; {print $2,$4,$7,$8}' | sed -e 's/\[//g' -e 's/\]//g' 

就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。

当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“>[文件名].csv”到命令后面)。

在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。

在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下:

# utmpdump /var/log/utmp > tmp_output
<使用文本编辑器修改 tmp_output>
# utmpdump -r tmp_output > /var/log/utmp 

这在你想要移除或修复二进制日志中的任何伪造条目时很有用。

下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。

你可以随意添加评论以加强本帖的含金量。


via: http://xmodulo.com/2014/09/monitor-user-login-history-centos-utmpdump.html

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

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

之前的文章中, 我们讨论过如何在Linux服务器安装各种各样的打印机(当然也包括网络扫描仪)。今天我们将来处理另一端:如何通过桌面客户端来访问网络打印机/扫描仪。

网络环境

在这个安装教程中,我们的服务器(Debian Wheezy 7.2版本)的IP地址是192.168.0.10,我们的客户端(Ubuntu 12.04版本)的IP地址是192.168.0.105.注意这两台机器是在同一个网段(192.168.0.0/24).如果我们想允许打印机访问其它网段,我们需要在服务器上修改cupsd.conf文件的以下部分:

<Location />
  Order allow,deny
  Allow localhost
  Allow from XXX.YYY.ZZZ.*
</Location>

(在上述例子中,我们授予打印机从本地或者任何系统能够访问打印机,这些系统的IPv4地址以XXX.YYY.ZZZ开始。

为了验证哪些打印机可以在我们的服务器上适用,我们也可以在服务器上使用lpstat命令,或者浏览网页https://192.168.0.10:631/printers page.

root@debian:~# lpstat -a 

EPSON_Stylus_CX3900 accepting requests since Mon 18 Aug 2014 10:49:33 AM WARST
PDF accepting requests since Mon 06 May 2013 04:46:11 PM WARST
SamsungML1640Series accepting requests since Wed 13 Aug 2014 10:13:47 PM WARST

在Ubuntu桌面安装网络打印机

在我们的Ubuntu 12.04的客户端,我们将打开"Printing"菜单(Dash -> Printing).你会注意到在其它发行版中,这个名字也许会有一点差别(例如会叫做"Printers" 或者 "Print & Fax"):

还没有打印机添加到我们的客户端:

下面是在Ubuntu桌面客户端安装一台网络打印机的一些步骤。

1) “Add”按钮将弹出 "New Printer" 菜单。我们将选择"Network printer" -> "Find Network Printer"并输入我们服务器的IP地址,接着点击"Find":

2) 在最下面我们将会看到可使用的打印机的名称。我们来选择这台三星打印机并按"Forward":

3) 我们将会被要求填写一些关于我们打印机的信息。当我们输入完成时,将点击 "Apply"按钮。

4) 我们接下来将被询问是否打印一张测试页。让我们点击"Print test page"吧:

这个打印任务将被创建为本地id 2:

5)适用我们服务器上的CUPS网络借口,我们可以观察到打印任务已经提交成功了(打印机 -> SamsungML1640系列 -> 显示完成任务):

我们也可以通过在打印机服务器上运行以下命令显示同样信息:

 root@debian:~# cat /var/log/cups/page_log | grep -i samsung 

SamsungML1640Series root 27 [13/Aug/2014:22:15:34 -0300] 1 1 - localhost Test Page - -
SamsungML1640Series gacanepa 28 [18/Aug/2014:11:28:50 -0300] 1 1 - 192.168.0.105 Test Page - -
SamsungML1640Series gacanepa 29 [18/Aug/2014:11:45:57 -0300] 1 1 - 192.168.0.105 Test Page - -

这个page\_log日志显示每一页被打印过的信息,只包括哪些用户发送这些打印任务,打印日期&时间,以及客户端的IPv4地址。

要安装Epson喷墨和PDF打印机,我们只需重复第1-5的步骤即可,并每一次选择左边的打印队列。例如,在下图中选择PDF打印机:

然而,请注意到根据CUPS-PDF 文档中,根据默认:

PDF文件将会被放置在打印作业的所有者命名的子目录内。在这个案例中,打印作业的所有者不能被识别(i.e.不会存在服务器中)输出的内容被放置在匿名操作的文件中。

这些默认的文件夹可以通过改变在/etc/cups/cups-pdf目录中的Out值和AnonDirName变量来修改。这里,${HOME}被扩展到用户的家目录中:

Out ${HOME}/PDF
AnonDirName /var/spool/cups-pdf/ANONYMOUS

网络打印实例

实例 #1

从Ubuntu12.04中打印,通常在本地用gacanepa(具有相同名字存在打印机服务器上)。

打印到PDF打印机之后,让我们来检查打印机服务器上的/home/gacanepa/PDF目录下的内容:

root@debian:~# ls -l /home/gacanepa/PDF 

total 368
-rw------- 1 gacanepa gacanepa 279176 Aug 18 13:49 Test_Page.pdf
-rw------- 1 gacanepa gacanepa   7994 Aug 18 13:50 Untitled1.pdf
-rw------- 1 gacanepa gacanepa  74911 Aug 18 14:36 Welcome_to_Conference_-_Thomas_S__Monson.pdf

这个PDF文件被创建时的,权限已经设置为600(-rw-------),这意味着只有打印任务的所有者(在这个例子中是gacanepa )可以访问它们。我们可以通过修改the /etc/cups/cups-pdf.conf文件UserUMask变量的值来改变这种行为。例如,0033的umask值将可以使PDF打印者以及其它所有者拥有创建文件的权限,但是只读权限也会赋予给其它所有者。

 root@debian:~# grep -i UserUMask /etc/cups/cups-pdf.conf 

### Key: UserUMask
UserUMask 0033

对于那些不熟悉umask(有名用户文件创建模式掩码),它作为一组可以用于控制那些为新文件创建时修改默认权限。给予特定的umask值,在计算最终文件的许可权限时,在文件基本权限(0666)和umask的单项按位补码之间进行按位布尔 AND 运算。因此,如果设置一个umask值为0033,那么新文件默认的权限将不是(0033)AND 0666 = 644的值(文件拥有者具有读/写/执行的权限,其他人拥有只读权限)。

实例 #2

在Ubuntu12.04执行打印,本地登录用户为jdoe(同样的帐号名称但是服务器上是不存在的)。

 root@debian:~# ls -l /var/spool/cups-pdf/ANONYMOUS 

total 5428
-rw-rw-rw- 1 nobody nogroup 5543070 Aug 18 15:57 Linux_-_Wikipedia__the_free_encyclopedia.pdf

这个PDF被创建时赋予的权限是666(-rw-rw-rw-),这意味着每个人都可以访问它们。我们可以通过编辑在/etc/cups/cups-pdf.conf文件中的AnonUMask值来改变这种行为。

在这一点上,你也许会疑惑:为什么同样安装一台网络打印机,大多数(当然不是全部)当前的Linux桌面发行版都会内置一个"打印到文件"的功能来允许用户动态创建PDF文件?

使用一台网络PDF打印机有以下好处:

  • 一个网络打印机(任何类型的)允许你直接从命令行直接打印,无需首先打开文件。
  • 在其它操作系统上安装一个网络客户端,一个PDF网络打印机备件,于是系统管理员不必再单独需要安装PDF创建者实用程序(也避免了最终用户安装这些工具存在的风险)。
  • 网络PDF打印机允许通过配置权限直接打印一个网络共享,如我们所见的例子。

在Ubuntu桌面安装一个网络扫描仪

这里是通过Ubuntu桌面客户端安装和访问一台网络扫描仪的一些步骤。假设网络扫描仪服务器已经启动并运行所述here.

1)让我们第一步来检查在我们的Ubuntu客户端主机上是否存在一台可用的扫描仪。没有先前的安装,你将会看到信息提示"没有识别到扫描仪." $ scanimage -L

2) 现在我们需要启用saned进程,用来预装Ubuntu桌面。要启用它,我们需要编辑/etc/default/saned文件,并设置RUN变量为yes:

$ sudo vim /etc/default/saned 

# Set to yes to start saned
RUN=yes

3) 让我们编辑/etc/sane.d/net.conf文件,并在扫描仪安装后添加服务器IP地址:

4) 重启saned进程:

$ sudo service saned restart 

5) 现在让我们来看看扫描仪是否可用:

现在我们可以打开"Simple Scan"(或者其它扫描工具)并开始扫描文件。我们可以旋转,修剪,和保存生成的图片:

总结

拥有一或多台网络打印机或扫描仪在任何办公和家庭网络中都是非常方便适用的,并同时提供了许多好处。例举如下:

  • 多用户(从不同的平台/地方)都能够向打印机发送打印作业的队列。
  • 由于硬件共享达到了节约成本和维护的作用。

我希望这篇文章可以帮助你更充分地利用这些有点。


via: http://xmodulo.com/2014/08/configure-network-printer-scanner-ubuntu-desktop.html

作者:Gabriel Cánepa 译者:disylee 校对:wxy

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

假定你想要在你的家庭/办公网络中设置一台Linux打印服务器,而你手头上却只有USB打印机可用(因为他们比那些有着内建网络接口或无线模块的打印机要便宜得多)。此外,如果这些设备中有一台是一体化的,而你也想要通过网络共享其整合的扫描仪,这该怎么办?在本文中,我将介绍怎样安装并共享一台USB一体机(Epson CX3900喷墨打印机和扫描仪),一台USB激光打印机(Samsung ML-1640),以及作为锦上添花,配置一台PDF打印机。所有这一切,我们都将在GNU/Linux Debian 7.2 [Wheezy]服务器中实现。

尽管这些打印机看起来有点老旧了(我是在2007年买的Epson一体机,2009年买的激光打印机),但我仍然相信我从安装过程中学到的东西也一样能应用到该品牌的新产品和其它品牌中去:有一些预编译的.deb包驱动可用,而其它驱动可以从仓库中直接安装。毕竟,它是重要的基本原则。

先决条件

要设置网络打印机和扫描仪,我们将使用CUPS,它是一个用于Linux/UNIX/OSX的开源打印系统。

# aptitude install cups cups-pdf 

排障提示:根据你的系统状况(这个问题很可能在手动安装包失败后,或者缺少依赖包的时候会发生),在安装cups和cups-pdf前端包管理系统可能会提示你卸载许多包以尝试解决当前依赖问题。如果这种情况真的发生,你只有两个选择:

1)通过另外一个前端包管理系统安装包,如apt-get。注意,并不建议进行这样的处理,因为它不会解决当前的问题。

2)运行以下命令:aptitude update && aptitude upgrade。该命令会修复此问题,并同时更新包到最新版本。

配置CUPS

为了能够访问CUPS的网页接口,我们需要至少对cupsd.conf文件(用于CUPS的服务器配置文件)进行一次最低限度的修改。在进行修改前,让我们为cupsd.conf做个备份副本:

# cp cupsd.conf cupsd.conf.bkp 

然后,编辑原始文件(下面只显示了最为有关联的部分):

  • Listen:监听指定的地址和端口,或者域套接口路径。
  • Location /path:为该名字所代表的位置指定访问控制。
  • Order:指定HTTP访问控制顺序(allow,deny或deny,allow)。Order allow,deny是说允许规则先于(并且优先处理)拒绝规则。
  • DefaultAuthType (也可以用AuthType): 指定默认使用的认证类型。Basic是指使用/etc/passwd文件来认证CUPS中的用户。
  • DefaultEncryption:指定认证请求所使用的加密类型。
  • WebInterface:指定是否启用网页接口。

    # Listen for connections from the local machine
    Listen 192.168.0.15:631

    # Restrict access to the server
    <Location />
      Order allow,deny
      Allow 192.168.0.0/24
    </Location>

    # Default authentication type, when authentication is required
    DefaultAuthType Basic
    DefaultEncryption IfRequested

    # Web interface setting
    WebInterface Yes

    # Restrict access to the admin pages
    <Location /admin>
      Order allow,deny
      Allow 192.168.0.0/24
    </Location>

现在,让我们重启CUPS来应用修改:

# service cups restart 

为了允许另外一个用户(除了root之外)修改打印机设置,我们必须像下面这样添加他/她到lp(授权对打印机硬件的访问并启用用户管理打印任务)和lpadmin(拥有打印优先)组。如果在你当前网络设置没有必要或不需要该设置,你可以不用理会该步骤。

# adduser xmodulo lp
# adduser xmodulo lpadmin 

通过网页接口配置网络打印机

1、 启动网页浏览器,并打开CUPS接口http://:Port,这里在我们的例子中是http://192.168.0.15:631:

2、 转到管理标签,然后点击添加打印机

3、 选择你的打印机;在本例中,EPSON Stylus CX3900 @ debian (Inkjet Inkjet Printer),然后点击继续

4、 是时候为打印机取个名字,并指定我们是否想要从当前工作站共享它:

5、 安装驱动——选择品牌并点击继续

6、 如果打印机如果不被CUPS支持(没有在下一页中列出来),我们必须从生产厂家的网站上下载驱动(如http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX),安装完后回到该页。

7、 注意,预编译的.deb文件必须从我们使用的机器上发送(例如,通过sftp或scp)到打印服务器(当然,如果我们有一个直接的下载链接就更加简单了,而不用下载按钮了):

8、 在将.deb文件放到服务器上后,我们就可以安装了:

 # dpkg -i epson-inkjet-printer-escpr_1.4.1-1lsb3.2_i386.deb 

排障提示:如果lsb包(一个第三方Linux应用编写者可以依赖标准核心系统)没有安装,那么驱动会无法安装:

我们将安装lsb,然后尝试再次安装打印机驱动:

# aptitude install lsb
# dpkg -i epson-inkjet-printer-escpr_1.4.1-1lsb3.2_i386.deb

9、 现在,我们可以返回到第五步并安装打印机:

配置网络扫描仪

现在,我们将继续配置打印机服务器来共享扫描仪。首先,安装xsane,这是SANE——扫描仪快捷访问的前端:

# aptitude install xsane 

接下来,让我们编辑/etc/default/saned文件以启用saned服务:

# Set to yes to start saned                                                     
RUN=yes

最后,我们将检查saned是否已经在运行了(很可能不在运行哦——那么我们将启动服务并再来检查):

# ps -ef | grep saned | grep -v grep
# service saned start 

配置另一台网络打印机

通过CUPS,你可以配置多台网络打印机。让我们通过CUPS配置一台额外的打印机:Samsung ML-1640,它是一台USB打印机。

splix包包含了单色(ML-15xx, ML-16xx, ML-17xx, ML-2xxx)和彩色(CLP-5xx, CLP-6xx)Samsung打印机驱动。此外,此包的详细信息中指出,一些新命名的Samsung打印机,如Xerox Phaser 6100也适用此驱动。

# aptitude install splix 

然后我们将使用CUPS网页接口来安装打印机,就像前面一样:

安装PDF打印机

接下来,让我们在打印服务器上配置一台PDF打印机。这样,你就可以将来自客户计算机的文档转换成PDF格式了。

由于我们已经安装了cups-pdf包,PDF打印机就已经自动安装好了,可以通过网页接口验证:

当选定PDF打印机后,文档将被写入可配置目录(默认是~/PDF),或者也可以通过后续处理命令进行复制。

在下一篇文章中,我们将配置桌面客户端来通过网络访问打印机和扫描仪。


via: http://xmodulo.com/2014/08/usb-network-printer-and-scanner-server-debian.html

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

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