设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

每个极客都应该知道的Linux技巧

2014-3-7 11:08| 发布者: 红黑魂| 查看: 6538| 评论: 0|来自: 伯乐在线

摘要: 是什么区分开普通的Linux用户和超级极客的呢?很简单:用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提高效率而又不用做这些搜集资料的跑腿活儿,那我们已经收集了50多条简单 ...

41:自动执行USB装置

难度:高级

应用程序:hotplug脚本

当添加一个特殊的外设时想要运行一个指定的应用程序?USB hotplug后台进程可以帮你!当有USB装置添加到系统中时,这个服务就会得到通知。对于需要内核驱动的装置,hotplug后台进程将在/etc/hotplug/usb/下调用一个同名的脚本,例如,这里的一个名为usb-storage的脚本。你可以直接在这个脚本的后面添加你自己的命令(或者更好的是,在它的最后添加一行来让脚本在别的地方执行)。那么你就可以播放音乐,autosync文件(译注:影像文件),搜寻图片或者其他什么的。

对于不依赖于内核驱动的装置,有一个检查表,可以用来匹配USB产品和制造商ID。很多发行版已经设置好去做一些事情,但是你可以依据你的需要定制这些脚本。到http://jphoto.sourceforge.net/ selected=sync去看一个我们能做什么的例子。

 

42:重命名和调整图片大小

难度:高级

应用程序:bash

很喜欢你的新相机但是不能容忍那个糟糕的名字?你也想要准备发布它们到网上吗?没问题,一个简单的bash脚本真是你所需要的:

1
2
3
4
5
6
7
8
9
#!/bin/sh
counter=1
root=mypict
resolution=400x300
for i in `ls -1 $1/*.jpg`; do
echo "Now working on $i"
convert -resize $resolution $i ${root}_${counter}.jpg
counter=`expr $counter + 1`
done

保存这个脚本到一个名为picturename.sh的文件中,然后用一下命令执行它:

1
chmod u+x picturename.sh

然后在你的某个路径下存储它。现在,如果你在directory /path/to/pictdir下有一堆.jpg文件,所有你需要做的就是执行这个:

1
picturename.sh /path/to/pictdir

而在当前的目录下你会发现 mypict_1.jpg, mypict_2.jpg之类的,它们是你初始图片调整大小后的版本。你可以根据你的需要改变脚本,或者,你只是期待一个超级简单的图片大小调整,试着看看mogrify命令和它的-geometry参数。

 

43:安全登出

难度:简单

应用程序:bash

当你在一台共享机器上使用一个控制台,或者甚至只是在你自己的桌面使用控制台,都可能会发现当你登出时,屏幕仍然会显示谁已经登入正在做什么的痕迹。大多数发行版本将会清屏,但是有些不会。你可以通过编辑你的 ~/.bash_logout文件然后增加这个命令来解决问题:

1
clear

你也可以添加任何其他的有用命令在这里。

 

44:传输文件但不使用ftp或者scp

难度:简单

应用程序:netcat

需要传输一个目录给其他服务器但是没有FTP或者SCP使用权?那么这个小技巧将会帮助你使用netcat功能。在目的服务器上运行:

1
nc -l -p 1234 | uncompress -c | tar xvfp -

并且在发送服务器上运行:

1
tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234

现在你就可以不需要FTP并且不需要root权限,就能传送文件了。

 

45:备份一个Debian包清单

难度:简单

应用程序:Debian

如果你正在运行Debian并且找不到你正在运行的包,为你当前正在安装的包做一个备份是非常有用的。你可以运行如下得到一个清单:

1
dpkg --get-selections > debianlist.txt

这将把全部的清单放到debianlist.txt中,这样你就可以通过如下代码在不同的计算机上安装相同的包。

1
dpkg --set-selections < debianlist.txt

当你复制你的系统到一个新的计算机上时,你要记住你还需要从/etc中复制配置文件。

要实际安装这些选项,使用如下指令:

1
apt-get -u dselect-upgrade

 

46:强化ssh

难度:简单

应用程序:ssh

尽管SSH是一个非常安全的连接服务器的方式,这里还有两个简单的改变,可以让你进一步增强它的安全性。首先,你当然不希望别人直接以root用户登入——他们应该以普通用户登陆,然后使用su命令来转换。你可以在/etc/ssh/ssh_config 文件中通过添加如下代码改变这个件事:

1
PermitRootLoginno

现在唯一能得到root特权的方式是通过su,这意味着入侵者现在需要破解两个密码来得到全部的使用权。当你编辑这个文件时,找到这样一行:

1
Protocol 2, 1

然后把它改为如下:

1
Protocol 2

这将消除最初的SSH协议中的撤销选项,现在被认为是非常易于攻击的。

 

47:停止回应ping

难度:简单

应用程序:sysctl

ping在找出网络拓扑结构时是非常有用的命令,缺点是它只能做这件事,而且会使得网络上的黑客们更容易瞄准现场服务器。但是你可以告诉Linux忽略所有的ping服务器将不会回应。这里有很多的方法来实现它,但是最好的是使用sysctl。关掉ping回应:

1
sysctl -w net.ipv4.icmp_echo_ignore_all=1

想要打开它,使用:

1
sysctl -w net.ipv4.icmp_echo_ignore_all=0

关掉ping对你来说是非常严重的,看看接下来的技巧。

 

48:降低ping速率

难度:简单

应用程序:sysctl

可能你想要保持服务器回复ping的功能,但是又想从被熟知的“ping flood”(封包洪流)的攻击中保护自己。那么你要如何完成这一壮举呢?最简单的方法是降低回应ping服务器的速率。它们仍然是有效的,但不会使服务器过载。

1
sysctl -w net.ipv4.icmp_echoreply_rate=10

当回复被当作一个信号地址发送时,这将会降低速率。

 

49:当登出的时候清理KDE

难度:简单

应用程序:bash

在Windows中有很多程序会做一些清除网络缓存,移除临时文件事情。Linux上如果也可以这样是不是很cool呢?使用KDE,你甚至不需要安装任何新的软件,startkde脚本将会自动的执行你放在特殊地方的脚本。

首先,你需要在你的.kde目录下创建一个命令shutdown的目录:

1
mkdir /home/username/.kde/shutdown

现在创建一个脚本,用来在关机时执行一些你想要的事情。这里是一个例子:

1
2
3
4
5
6
7
8
#!/bin/bash
#clear up temp folder
rm -rf ~/tmp/*
#clear out caches
rm -rf ~/.ee/minis/*
rm -rf ~/.kde/share/cache/http/*
# delete konqueror form completions
rm ~/.kde/share/apps/khtml/formcompletions

现在确保你设置了正确的权限:

1
chmod ug+x ~/.kde/shutdown/cleanup.sh

(或者随便你叫它什么)。可以清除敏感文件,也可以通过将脚本放在你的默认KDE文件夹中有一个名为shutdown的子文件夹里,给所有用户一个全局的关机脚本。找出你的默认KDE目录在哪里,试一下:

1
kde-config --path exe

 

50:无密码的ssh

难度:中等

应用程序:ssh

厌烦了每次登陆你的服务器时都要输入密码?ssh也支持密钥,所以当你登陆桌面时你只能输入你的密码。在你的桌面机器上生成一个密钥对:

1
ssh-keygen -t dsa -C your.email@ddress

为你的密钥输入一个口令。这会将密钥放到 ~/.ssh/id_dsa and the public key in ~/.ssh/id_dsa.pub中。现在看看你是否有了一个正在运行的ssh-agent。

1
echo $SSH_AGENT_PID

如果安装了ssh-agent,大部分窗口管理器都会自动运行它。如果没有安装,开启一个:

1
eval $(ssh-agent)

现在,告诉这个代理你的密钥:

1
ssh-add

然后输入你的口令。你需要在每次登陆时都输入口令,如果你是使用X,尝试添加:

1
SSH_ASKPASS=ssh-askpass ssh-add

到你的.xsession文件。(你可能需要安装ssh-askpass)现在为每个你需要登入的服务器都创建这个目录 ~/.ssh,然后复制这个文件~/.ssh/id_dsa.pub into it as ~/.ssh/authorized_keys 。如果你是手动开启ssh-agent,当你登出时,使用如下代码终止它:

1
ssh-agent -k

 

51:通过ssh使用rsync

难度:中等

应用程序:Shell

rsync使大型目录结构保持同步。通过SSH使用tar远程复制一个文件系统的一部分是非常理想的,sync甚至更适合保持两台机器之间的文件系统的同步。为了使用SSH运行一个rsyns,传递给它一个-e转换:

1
rsync -ave ssh greendome:/home/ftp/pub/ /home/ftp/pub/

注意从源端(在greendome上)来的文件说明后面的 / ,在源说明中,一个尾部的 / 告诉rsync这个目录的内容,但不是目录本身。为了将目录放入正在复制的内容的最高等级丢掉这个 /:

1
rsync -ave ssh bcnu:/home/six .

这将在 ~/six/目录下保持一个与bcnu:/home/six/上的任何东西同步的复制品。rsync默认只拷贝文件和目录,但是当源端移除了文件时并不会在目的端移除它们的拷贝。为了保持复制的精确性,包含–delete这个标志:

1
rsync -ave ssh--delete greendome:~one/reports .

现在当老的报表从greendome上的~one/reports/中移除了,在同步版本中,每次这个命令运行时,它们也将会从~six/public_html/reports/中移除。如果你在corn中像这样运行一条命令,记得丢掉v。这将会使输出稳定(除非rsync在运行中出现问题,在这种情况下你将会收到一封有错误输出的邮件)。使用SSH作为你的rsync运输方式,这样做的好处是使数据在网络传输过程中加密,并可以方便使用任何你已经用SSH客户端密钥建立的信任关系。

 

52:资源扫描

难度:中等

应用程序:nmap

例如,简单的TCP连接扫描可以在不需要root特权时进行:

一般来说,当人们想到nmap时,都假设nmap是用来进行一些违法的网络侦查,并为恶意攻击做准备的。但是作为一个强大的工具,nmap可以成为一个白帽子,做一些比入侵网络有意义得多的事。

1
nmap rigel

nmap也可以通过指定范围或者CIDR符号来扫描IP地址:

1
2
nmap 192.168.0.1-254
nmap 192.168.0.0/24

nmap如果以root身份运行,可以提供更多的信息。当它以root身份运行时,通过使用-O标志,它可以使用特殊的数据包来决定远程机器的操作系统。此外,你可以通过使用-sS标志来实现半开的TCP扫描。nmap将会发送一个SYN数据包到远程的主机,然后等待接收它回应的ACK。如果nmap收到一个ACK,它就知道这个端口是开放的。

这不同于普通的TCP三次握手,客户端会发送一个SYN包,如果它收到了初始的服务器ACK,客户端随后会将一个ACK送回服务器。攻击者们时常使用这个选项来避免使他们的扫描登陆到远程机器上。

1
nmap -sS -O rigel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on rigel.nnc (192.168.0.61):
(The 1578 ports scanned but not shown below are in state: filtered)
Port State Service
7/tcpopen echo
9/tcpopen discard
13/tcp open daytime
19/tcp open chargen
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
111/tcpopen sunrpc
512/tcpopen exec
513/tcpopen login
514/tcpopen shell
587/tcpopen submission
7100/tcp open font-service
32771/tcpopen sometimes-rpc5
32772/tcpopen sometimes-rpc7
32773/tcpopen sometimes-rpc9
32774/tcpopen sometimes-rpc11
32777/tcpopen sometimes-rpc17
Remote operating system guess: Solaris 9 Beta through Release on SPARC
Uptime 44.051 days (since Sat Nov1 16:41:50 2003)
Nmap run completed -- 1 IP address (1 host up) scanned in 166 seconds

伴随着OS探测的激活,nmap可以确认OS是Solaris,但是现在你还可以知道,它可能是运行在SPARC处理器上的Version 9。

一个强大的功能是可以被用于和你的nmap的XML输出性能保持联系。使用-oX命令行转换而激活,就像这样:

1
nmap -sS -O -oX scandata.xml rigel

这在扫描IP地址范围或者你全部的网络时是特别有用的,你可以将所有通过扫描收集起来的信息放到一个XML文件里,并经过解析后插入到数据库中。这里是一个开放的端口的XML入口:

1
2
3
4
5
<port protocol="tcp" portid="22">
 
<state state="open" />
<service name="ssh" method="table" conf="3" />
</port>

nmap是一个强大的工具。通过使用它的XML输出性能,一点点的脚本,还有一个数据库,你可以创造一个更强大的可以在你的网络上监测未授权的服务和机器的工具。

 

53:备份你的bootsector(引导扇区)

难度:高级

应用程序:Shell

妨碍引导装入,双启动和很多其他下热闹的程序会留给你一个混乱的引导扇区。为什么不在你可以备份的时候给它创建一个备份呢:

引导装载器混乱、双启动及许多其他的可怕的进程可能造成乱七八糟的启动区。

1
dd if=/dev/hda of=bootsector.img bs=512 count=1

很显然,你应该改变这个装置来显示你的boot驱动(有可能是SCSI的sda)。还要非常小心,别把事情搞砸——你可能会轻而易举地毁掉你的驱动!恢复时使用:

1
dd if=bootsector.img of=/dev/hda

 

54:保护日志文件

难度:高级

应用程序:很多

在一个入侵过程中,一个入侵者将会很可能在很多系统日志中留下能反映他行为的迹象:一个有价值的审计追踪应该被保护。没有可靠的日志,就很难发现攻击者是如何侵入,或者是从哪里来的攻击。这个信息在分析事件、联系相关方面并给予反馈上,是很关键的。但是,如果入侵成功,什么才能阻止他来移除他的这些错误行为的痕迹呢?

这就是文件属性能发挥作用、挽回败局的地方(或者至少使事情没那么糟)。Linux和BSD都有给文件和目录分配额外的属性这个功能。这不同于标准的Unix权限方案中,系统为所有的用户提供的普遍的属性设置,而且它们比文件权限或者ACL都要更深层次影响文件访问。

在Linux中,你可以看到并且通过lsattr和chattr命令分别修改一个给出文件的设置。在写这篇文章时,Linux的文件属性只能在你使用ext2和ext3时获得。这还有些XFS和ReiserFS的关于获得属性支持的内核补丁。一个保护日志文件的有用的属性是append-only。当这个属性被设置后,文件不能被删除,而且写操作只能被允许在文件的最后追加。

在Linux下要设置append-only标志,运行这条命令:

1
chattr +afilename

看看+a属性是如何工作的:创建一个文件然后设置它的append-only属性:

1
2
3
4
5
touch /var/log/logfile
echo "append-only not set" > /var/log/logfile
chattr +a /var/log/logfile
echo "append-only set" > /var/log/logfile
bash: /var/log/logfile: Operation not permitted

企图第二次写文件失败,因为它将覆盖这个文件。然而,在文件的末尾追加仍然是被允许的:

1
2
3
4
echo "appending to file" >> /var/log/logfile
cat /var/log/logfile
append-only not set
appending to file

显而易见,一个获得root特权的侵入者能意识到使用了文件属性,并且可以通过运行chattr -a来移除append-only标志。为了防止这种情况,我们需要禁用移除append-only属性的性能,在Linux下使用功能机制完成这个。

Linux功能模型分割特权给全能的root账户,并且允许你有选择的禁用它们。为了防止一个用户移除一个文件的append-only属性,我们需要移除CAP_LINUX_IMMUTABLE功能。当体现在当前运行系统中时,这个功能允许append-only属性被修改。为了当前系统中获得修改这个功能的设置,我们将简单有效地调用lcap(http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2).

为了解压和编译这个工具,运行这条命令:

1
tar xvfj lcap-0.0.3.tar.bz2 && cd lcap-0.0.3 && make

然后,不允许修改append-only标志,运行:

1
2
./lcap CAP_LINUX_IMMUTABLE
./lcap CAP_SYS_RAWIO

第一条命令移除了改变append-only标志的功能,然后第二条移除了原始I/O的功能。这是很有必要的,因为这样就能保护文件不被访问块设备时驻留在其上的东西修改。这阻止了访问/dev/mem和/dev/kmem,有可能给入侵者提供恢复CAP_LINUX_IMMUTABLE功能的漏洞。为了在boot上移除这项功能,添加之前的两条命令到你的系统启动脚本中(例如/etc/rc.local)。你应该确保这个功能在boot命令中被移除了,防止其他启动脚本出问题。一旦lcap移除了内核功能,就只能通过重启系统来恢复了。

在做这些之前,你应该明白,给你的日志文件添加append-only标志,将会造成日志循环脚本失败。然而,做这件事将会极大的提升你的审计追踪的安全性。安全性的提升在突发事件中会被证明是很有用的。

 

55:自动加密连接

难度:高级

应用程序:FreeS/WAN

一个FreeS/WAN支持的特别cool的功能是,当其他主机运行FreeS/WAN时随机加密。这允许FreeS/WAN在所有支持随机加密的主机间透明传输。为了这个,每台主机必须使用FreeS/WAN生成一个公钥,这个公钥可以存储于那台主机的一个DNS TXT记录中。当一台主机要与另一个主机建立一个随机加密,希望初始化一个加密连接时,将会通过DNS查询这台主机的公钥并且初始化这个连接。

一开始,你想使用这个功能时,需要为每一台主机生成一个公钥。你可以通过运行如下命令来实现它:

1
ipsec newhostkey --output /tmp/`hostname`.key

现在你需要添加通过那条命令创建的文件的内容到/etc/ipsec.secrets中。

1
cat /tmp/`hostname`.key >> /etc/ipsec.secrets

然后,你需要生成一个TXT记录来存放你的DNS区域。你可以通过运行如下命令来实现它:

1
ipsec showhostkey --txt @colossus.nnc

现在添加这条记录到你的空间然后重载它。你会证实DNS已经通过这条命令正确的运行了:

1
ipsec verify
1
2
3
4
5
6
7
8
Checking your system to see if IPsec got installed and started correctly
Version check and ipsec on-path[OK]
Checking for KLIPS support in kernel [OK]
Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
DNS checks.
Looking for TXT in forward map: colossus [OK]
Does the machine have at least one non-private address [OK]

现在只需要重启FreeS/WAN-你现在应该能连接到任何支持随机加密的主机上了。但是如果其他的主机想要连接你该怎么办?要授权连接,你需要在你的DNS反向查找区域为你的机器创建一个TXT记录。

你可以通过运行一个简单的命令来生成一条记录:

1
ipsec showhostkey --txt 192.168.0.64

为你的子网添加这条记录到反向查找区域,然后其他的机器就可以和你的机器初始化随机加密了。伴随着随机加密的使用,所有主机间的传输将被自动加密,同时保护所有的服务。

 

56:消除二进制suid

难度:中等

应用程序:find

如果你的服务器有比你自身多的shell用户,你应该在你的系统上定期的审核setuid和setgid的二进制文件。可能你会惊讶你找到了那么多文件。这里有一个搜寻所有setuid或者setgid的文件的命令位设置:

1
find / -perm +6000 -type f -exec ls -ld {} \; > setuid.txt &

这将会创建一个名为setuid.txt的文件,包含了所有当前系统上匹配的文件的细节。要移除任何你不用的工具的s位,输入:

1
chmod a-s program

 

57:Mac过滤Host AP

难度:高级

应用程序:iwpriv

你可以在链路层使用iptables或者ebtables执行MAC过滤,那比让Host AP为你做这些更安全。这不仅仅是阻碍指向你的网络传输,也是预防邪恶的人关联你的站。这能帮助组织某些人给你的其他无线客户端造成麻烦的可能,即使他们没有更多的网络通道。

当使用MAC过滤时,很多人会列出一个他们希望允许的无线装置清单,然后拒绝所有其他的。使用iwpriv命令完成这个功能:

1
2
3
4
5
iwpriv wlan0 addmac 00:30:65:23:17:05
iwpriv wlan0 addmac 00:40:96:aa:99:fd
...
iwpriv wlan0 maccmd 1
iwpriv wlan0 maccmd 4

addmac指示添加一个MAC地址到内部表。只要你喜欢你就可以通过执行更多的addmac命令添加更多的MAC地址到表中。然后你需要告诉Host AP对你已经建好的表做什么。maccmd 1命令告诉Host AP就像使用一个“允许”清单一样使用这个表,并且拒绝所有其他的MAC地址来关联。最终,maccmd 4命令去除掉所有的关联客户端,强制使它们重新关联。对表中的客户端来说是自动发生的,但是其他的任何企图关联的客户端都是被拒绝的。

有时,你只需要禁止一个或者两个捣蛋鬼,而不是设置一个详细的被允许的硬件规则。如果你需要禁止两三个MAC地址而允许其他所有的地址,尝试这个:

1
2
3
iwpriv wlan0 addmac 00:30:65:fa:ca:de
iwpriv wlan0 maccmd 2
iwpriv wlan0 kickmac 00:30:65:fa:ca:de

像以前一样,你可以不限次数的使用addmac,只要你乐意。Maccmd2命令会将规则设置为“拒绝”,而如果该MAC恰巧已经关联,kickmac会立刻将特定的MACboot。这也许比只为了禁止一个捣蛋鬼而消除所有关联然后让他们重新邻接要好一些。顺便说一下,如果你想要消除所有的MAC过滤,尝试maccmd 0。

如果你错误的输入了一个MAC地址,你可以像使用addmac一样使用delmac命令,然后它(可以预见)就会从表中删掉这个给出的MAC地址。你有时会需要完全清除当前的MAC表但是保留它当前的规则,使用这条命令:

1
iwpriv wlan0 maccmd 3

最后,你可以通过使用/proc浏览正在运行的MAC表:

1
cat /proc/net/hostap/wlan0/ap_control

iwpriv程序操纵正在运行的Host AP驱动,但是重启后不保留设置。一旦你对你的MAC过滤表感到满意,请确保你在一个rc脚本中添加了相关命令在启动时间运行。

注意,未关联的客户端仍然可以监听网络传输,所以MAC过滤实际上只能预防一点点窃取。为了与被动的监听技巧搏斗,你需要加密你的数据。

更新:如果你想要知道更多的技巧,请查看《More Linux tips every geek should know》(每个geek应该知道的更多的技巧)

 


原文链接: TuxRadar Linux   翻译: 伯乐在线 欣仔
译文链接: http://blog.jobbole.com/60549/

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部