2013年2月26日星期二

linux系統的設定檔: /etc/crontab


這個『 crontab -e 』是針對使用者的 cron 來設計的,如果是『系統的例行性任務』時, 該怎麼辦呢?是否還是需要以 crontab -e 來管理你的例行性工作排程呢?當然不需要,你只要編輯 /etc/crontab這個檔案就可以啦!有一點需要特別注意喔!那就是 crontab -e 這個 crontab 其實是 /usr/bin/crontab 這個執行檔,但是 /etc/crontab 可是一個『純文字檔』喔!你可以 root 的身份編輯一下這個檔案哩!
基本上, cron 這個服務的最低偵測限制是『分鐘』,所以『 cron 會每分鐘去讀取一次 /etc/crontab 與 /var/spool/cron 裡面的資料內容 』,因此,只要你編輯完 /etc/crontab 這個檔案,並且將他儲存之後,那麼 cron 的設定就自動的會來執行了!
Tips:
在 Linux 底下的 crontab 會自動的幫我們每分鐘重新讀取一次 /etc/crontab 的例行工作事項,但是某些原因或者是其他的 Unix 系統中,由於 crontab 是讀到記憶體當中的,所以在你修改完 /etc/crontab 之後,可能並不會馬上執行, 這個時候請重新啟動 crond 這個服務吧!『/etc/init.d/crond restart』
鳥哥的圖示
廢話少說,我們就來看一下這個 /etc/crontab 的內容吧!
[root@www ~]# cat /etc/crontab
SHELL=/bin/bash                     <==使用哪種 shell 介面
PATH=/sbin:/bin:/usr/sbin:/usr/bin  <==執行檔搜尋路徑
MAILTO=root                         <==若有額外STDOUT,以 email將資料送給誰
HOME=/                              <==預設此 shell 的家目錄所在

# run-parts
01  *  *  *  *   root      run-parts /etc/cron.hourly   <==每小時
02  4  *  *  *   root      run-parts /etc/cron.daily    <==每天
22  4  *  *  0   root      run-parts /etc/cron.weekly   <==每週日
42  4  1  *  *   root      run-parts /etc/cron.monthly  <==每個月 1 號
分 時 日 月 週 執行者身份  指令串
看到這個檔案的內容你大概就瞭解了吧!呵呵,沒錯!這個檔案與將剛剛我們下達 crontab -e 的內容幾乎完全一模一樣!只是有幾個地方不太相同:
  • MAILTO=root

    這個項目是說,當 /etc/crontab 這個檔案中的例行性工作的指令發生錯誤時,或者是該工作的執行結果有 STDOUT/STDERR 時,會將錯誤訊息或者是螢幕顯示的訊息傳給誰?預設當然是由系統直接寄發一封 mail 給 root 啦!不過, 由於 root 並無法在用戶端中以 POP3 之類的軟體收信,因此,鳥哥通常都將這個 e-mail 改成自己的帳號,好讓我隨時瞭解系統的狀況!例如: MAILTO=dmtsai@my.host.name
  • PATH=....

    還記得我們在第十一章的 BASH 當中一直提到的執行檔路徑問題吧! 沒錯啦!這裡就是輸入執行檔的搜尋路徑!使用預設的路徑設定就已經很足夠了!
  • 01 * * * * root run-parts /etc/cron.hourly

    這個 /etc/crontab 裡面預設定義出四項工作任務,分別是每小時、每天、每週及每個月分別進行一次的工作! 但是在五個欄位後面接的並不是指令,而是一個新的欄位,那就是『執行後面那串指令的身份』為何!這與使用者的 crontab -e 不相同。由於使用者自己的 crontab 並不需要指定身份,但 /etc/crontab 裡面當然要指定身份啦!以上表的內容來說,系統預設的例行性工作是以 root 的身份來進行的。

    那麼後面那串指令是什麼呢?你可以使用『 which run-parts 』搜尋看看,其實那是一個 bash script 啦!如果你直接進入 /usr/bin/run-parts 去看看, 會發現這支指令會將後面接的『目錄』內的所有檔案捉出來執行!這也就是說『 如果你想讓系統每小時主動幫你執行某個指令,將該指令寫成 script,並將該檔案放置到 /etc/cron.hourly/ 目錄下即可』的意思!

    現在你知道系統是如何進行他預設的一堆例行性工作排程了嗎?如果你下達『 ll /etc/cron.daily 』就可以看到一堆檔案, 那些檔案就是系統提供的 script ,而這堆 scripts 將會在每天的凌晨 4:02 開始運作!這也是為啥如果你是夜貓族, 就會發現奇怪的是,Linux 系統為何早上 4:02 開始會很忙碌的發出一些硬碟跑動的聲音!因為他必須要進行 makewhatis, updatedb, rpm rebuild 等等的任務嘛!
由於 CentOS 提供的 run-parts 這個 script 的輔助,因此 /etc/crontab 這個檔案裡面支援兩種下達指令的方式, 一種是直接下達指令,一種則是以目錄來規劃,例如:
  • 指令型態
    01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
    以 dmtsai 這個使用者的身份,在每小時執行一次 mail 指令。
  • 目錄規劃
    */5 * * * * root run-parts /root/runcron
    建立一個 /root/runcron 的目錄,將要每隔五分鐘執行的『可執行檔』都寫到該目錄下, 就可以讓系統每五分鐘執行一次該目錄下的所有可執行檔。
好!你現在大概瞭解了這一個咚咚吧!OK!假設你現在要作一個目錄,讓系統可以每 2 分鐘去執行這個目錄下的所有可以執行的檔案,你可以寫下如下的這一行在 /etc/crontab 中:
*/2 * * * * root run-parts /etc/cron.min
當然囉, /etc/cron.min 這個目錄是需要存在的喔!那如果我需要執行的是一個『程式』而已, 不需要用到一個目錄呢?該如何是好?例如在偵測網路流量時,我們希望每五分鐘偵測分析一次, 可以這樣寫:
*/5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg
如何!建立例行性命令很簡單吧!如果你是系統管理員而且你的工作又是系統維護方面的例行任務時, 直接修改 /etc/crontab 這個檔案即可喔!又便利,又方便管理呢!

小標題的圖示一些注意事項
有的時候,我們以系統的 cron 來進行例行性工作的建立時,要注意一些使用方面的特性。 舉例來說,如果我們有四個工作都是五分鐘要進行一次的,那麼是否這四個動作全部都在同一個時間點進行? 如果同時進行,該四個動作又很耗系統資源,如此一來,每五分鐘不是會讓系統忙得要死? 呵呵!此時好好的分配一些執行時間就 OK 啦!所以,注意一下:

媒体盘点全球黑帮:俄黑帮贩卖核材料成美国梦魇



2013-02-26 07:46:00 来源: 人民网(北京) 
2013年1月,“俄罗斯黑帮之王”阿斯兰·乌索扬遭暗杀,黑帮高层在1月26日举行秘密会议,协商“战略”布局,谋求扩张势力,规划由“塔里耶尔·奥尼亚尼帮派”控制的有组织犯罪团伙的战略,协商“后乌索扬”时代行动。

苏联1991年解体后,俄罗斯社会持续动荡。犯罪集团通常以暗杀等手段控制利润丰厚的产业,扩张地盘。这期间,奥尼亚尼逐步建立自己的犯罪集团,涉及毒品、赌博、武器销售和自然资源等领域,地盘覆盖原苏联地区。

纵观俄、美、日、意等全球著名黑帮,虽然行事方式或野蛮或冠冕堂皇,但他们借势力扩张对地区乃至世界政治经济产生的影响都是相同的。

俄罗斯黑帮的核交易

在俄罗斯叶卡捷琳堡的一个墓园,矗立着一些用进口大理石制作的墓碑。墓碑上雕刻着主人生前的形象,他们有的穿着皮夹克,手里拿着汽车钥匙,有的裸露身体展示文身,有的抽着雪茄接打电话。他们,就是俄罗斯的黑帮,有些已经入土为安,但多数还横行于世。

2012年12月9日,在俄罗斯卡巴尔达-巴尔卡尔共和国首府纳利奇克,一名电视新闻主持被疑似黑帮成员的杀手连射三枪身亡,而死者的两位主播同事也曾接到死亡威胁。调查部门估计,黑帮意在迫使当地传媒停止报道当局打击黑帮的行动。

这样的事情屡见不鲜,2012年3月20日,俄罗斯银行家格尔曼·戈尔本佐夫在伦敦遇刺;2006年9月,俄罗斯央行副行长科兹洛夫就因为领导反洗钱运动遭枪杀。

与意大利黑帮不同,俄罗斯不需要贿赂政府官员,因为黑社会的头面人物早已坐在政府的机要部门,他们甚至控制和影响着几个重要的行业。贪官和黑帮分子互相勾结,协助黑帮进行内幕交易、避税甚至杀死竞争对手。2012年美国的官方报告称,2/3的俄罗斯经济被犯罪组织掌控,其中包括40%的私营经济和60%的国有企业,全俄1740家银行中的大约一半也被黑帮所控制。

近年来,俄罗斯黑帮更加熟悉国际业务,世界上的其他黑帮也成了他们重要的生意伙伴。他们向尼日利亚提供武器,从哥伦比亚购买毒品,与意大利黑手党合作洗钱,跟日本山口组携手开拓色情市场。

对长期从事军火交易的俄罗斯黑帮来说,贩卖核材料也是轻车熟路。而这也是美国政府一直以来挥之不去的梦魇。美国联邦调查局局长认为,俄罗斯黑帮已经取代了前苏联军队,成为欧美安全体系的新威胁。

美国国防部曾表示,根据情报可以推断,“基地”组织已经对俄罗斯黑市上的核武器及大规模杀伤性武器进行了考察,可能已和俄罗斯黑帮取得了联系。

“体面”的日本山口组

在很多人眼里,黑帮都是身上背着刀疤和文身,无恶不作的暴利团伙。但在今天的日本,黑帮的“进化”程度之高足以颠覆绝大多数人的观念。

笔挺的西装,斯文的领带,印有照片的胸卡和名片,黑框眼镜和公文包是当今日本多数黑帮成员的日常装扮。如果不细看他们袖口或脖子上暴露出的文身和可能存在的断指,很多人会把他们当成公务员或工薪族。

发达国家中,日本是唯一公开允许有组织的黑社会团体存在的国家。目前,日本全国有22个团体被定为性质恶劣的“指定暴力团”,这22个团体鼎盛时期成员超过20万人。

在这22个团体中,人数最多、势力最大的是山口组。根据日本警察厅日前公布的报告,到2011年年底,山口组人数略有下降,但仍有成员7.3万人。

冠冕堂皇的背后,避免不了黑帮的犯罪本质。

根据2012年2月,美国财务部指出,山口组的犯罪活动包括在日本及其他国家贩毒、偷运军火、贩卖人口、卖淫和洗黑钱等,每年的收益预计达到数十亿美元。该组织已渗透至美国金融及商业体系,干扰了美国金融市场的运作秩序。

有人估计,包括山口组在内的日本黑帮年收入在1000亿美元以上,其中35%来自毒品,45%来自洗钱和其他犯罪所得,其余20%是正当投资所得的合法收入。

山口组偶尔也干点“正事”。

在山口组总部门口有一个醒目的标志牌,上面清晰地写着:我们不允许使用童工,不卖毒品,也不乱扔烟头。山口组内部还设有“奖学金”制度,成绩优秀的成员可以被派到欧美国家留学。山口组成员还会维持自己地盘上的社会秩序,有时甚至会先于警方调查“破案”,并将罪犯交予警察绳之以法。

近年来,日本黑帮的形象越来越好,在当地居民心目中堪比政府。令日本民众印象最深的或许是山口组在两次大地震后的表现。

2011年日本福岛地震后,日本政府反应缓慢,山口组成员却在第一时间将食物、水、毯子、盥洗用品等救援物资用卡车从东京和神户运送到日本东北部灾区的大小避难所中。山口组共向灾区运送了超过70车救援物资,总价值超过50万美元。他们行动迅速,悄无声息。

早在1995年阪神发生大地震后,山口组就曾积极地参与民间救援任务。

纵横世界的意大利黑手党

2012年在11日,在美国公开的数千份罗伯特·F·肯尼迪的文件中,一份中央情报局的文件记录了一项与黑手党有关的刺杀古巴革命领导人卡斯特罗的计划。这项计划中,黑手党成员和“爱国的古巴流亡者”同意收10万美元的报酬来暗杀卡斯特罗,另外还要2500美元作为经费。

以残忍著称的黑手党已经存在了近800年,然而诞生初期的黑手党却和现在的黑手党大不相同。

1282年3月30日复活节前一天,意大利西西里首府巴勒莫的一个少女在结婚当天被法国士兵强奸,西西里民众开始了疯狂的报复,他们高喊“Morto Alla Francia,Italia Anela”(“消灭法国是意大利的渴求”),后来,这句话的缩写Mafia就成了黑手党的名称,一个贫苦农民为求生存而联合起来的秘密帮会组织也从此产生。

然而,时过境迁,黑手党如今却演化成为一个十恶不赦的恐怖组织,随着意大利人的外迁,黑手党的势力遍布全球,并在国际社会扮演角色。目前,美国和加拿大都已经成为黑手党洗钱犯罪的温床。

如今,意大利很多地方都有被黑手党控制的可能。比如,在意大利南部雷焦卡拉布里亚市,不少官员与意大利四大黑手党之一“光荣会”有牵连,为此,意大利中央政府2012年10月9日不得不宣布,解雇包括市长在内的30名雷焦卡拉布里亚市政府及议会成员。

2012年7月24日,意大利西西里多名检察官正寻求对该国一批前政要发起审判,这些包括意大利前政府部长、国会议员和司法人员的政要被指控在上世纪90年代初与黑手党进行幕后交易。此前,意大利一些落网黑手党成员供称,前总理贝卢斯科尼早年也曾向黑手党上供寻求保护。

猖狂的哥伦比亚贩毒黑帮

世界上或许没有一个黑帮能像哥伦比亚黑帮那样肆无忌惮,劫掠军机,悬赏杀死警察。

2012年年初哥伦比亚的大街上,黑帮四处散发传单,传单上写着,凡杀一名警察,可获巫拉贝诺帮提供的500美元赏金,如果杀害一名扫毒特警赏金更高。

巫拉贝诺帮是哥伦比亚北部从事贩毒活动的主要黑帮,2012年元旦之后,巫拉贝诺帮成员在北部各地架设路障,严格控管物流,并警告当地商家不得营业,使得当地许多社区几乎陷入瘫痪。

哥伦比亚是目前世界上最大的可卡因加工国和贩运国,是美国可卡因的最大输出国和大麻最大的供货基地之一。由于贩卖毒品,这里的黑帮财大气粗,哥伦比亚第二大城市麦德林几乎成了毒枭们的地盘,每天都有几个人死在那里,麦德林被人们称为“杀人城”。

曾被《财富》杂志评选为全球七大富豪之一的巴勃罗·埃斯科巴就是在麦德林“发家致富”的。埃斯科巴手下有4万人组成的私人军队,他们装备精良。此前,埃斯科巴看上了哥伦比亚海军的一架号称“空中坦克”的战机后,他便命令出动3架战斗机把“空中坦克”迫降在自己的机场,将其变为自己的私人专机,并命名为“云雀”。?

在哥伦比亚甚至整个美洲,埃斯科巴从来都没有把谁放在眼里。逮捕他的警察,不出3天就被人射杀;审判他的法官,妻子被轮奸后,内衣被寄到法官办公室;通缉他的哥伦比亚总检察长,被他反过来悬赏1亿美元捉拿,最后横尸街头。1987年,他的兄弟奥乔亚被捕,负责审判的哥伦比亚最高法院院长先后辞职,司法部长不得不取消逮捕令。

由于长期向美国境内输送毒品,美国政府一直想和哥伦比亚政府联手除掉埃斯科巴,但谈何容易。


1984年3月,在美国军事顾问的指挥下,5000名哥政府军乘坐大力神运输机直捣麦德林集团的老巢,但遭到埃斯科巴的反击,一个月后,哥伦比亚禁毒总指挥——司法部长拉腊被枪杀。两个月后,50多名毒贩干脆冲入了哥伦比亚司法部大厦,试图绑架正在开会的司法部、最高法院、最高检察院和缉毒警察局的高级官员。

1991年,哥伦比亚政府接受了埃斯科巴提出的3项招安条件:保证他的个人财产合法化;惩办侵犯过毒贩及其家属人权的警察;建一座由正规部队看守的专门监狱以确保他们的生命安全。1993年12月2日,埃斯科巴终于被军方击毙。

虽然埃斯科巴死了,但哥伦比亚的黑帮一直在疯狂生长。现在,很多黑帮和警方、政府的利益联系更加紧密。

c#加密/解密:一个可逆加密的类(使用3DES加密)

    3DES加密:表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生。是从 SymmetricAlgorithm 类里继承出来。一、提要 命名空间:System.Security.Cryptography.TripleDES 类 简单说明: 表示三重数
3DES加密:表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生。是从 SymmetricAlgorithm 类里继承出来。
一、提要
命名空间:System.Security.Cryptography.TripleDES 类
简单说明: 表示三重数据加密标准算法的基类,TripleDES 的所有实现都必须从此基类派生。是从 SymmetricAlgorithm 类里继承出来。TripleDES 使用 DES 算法的三次连续迭代。它可以使用两个或三个 56 位密钥。
使用目的:比较安全的加密一种方式,密钥和矢量的不同,会生产不同的加密字串。因为是DES算法的三次连续迭代,而且算法可逆,这样对于数据保密性和可恢复性都不错。
二、代码示例
本代码参照了部分MSDN上的代码示例,再根据自己的实际情况,补充了一部分MSDN上没有提到的内容

using System;
using System.Security;
using System.Security.Cryptography;
using System.IO;
using System.Text;
using System.Threading;
namespace TRIP3DES
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class dllEncrypt
{
//密钥
private const string sKey = "qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM3";
//矢量,矢量可以为空
private const string sIV = "qcDY6X+aPLw=";
//构造一个对称算法
private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
public dllEncrypt(){}
#region public string EncryptString(string Value)
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="Value">输入的字符串</param>
/// <returns>加密后的字符串</returns>
public string EncryptString(string Value)
{
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
#endregion
#region public string DecryptString(string Value)
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="Value">加过密的字符串</param>
/// <returns>解密后的字符串</returns>
public string DecryptString(string Value)
{
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
#endregion
}
}
三、总结
做成类库对于密钥和矢量的保管比较方便,输入输出全部是string型变量,这样也比较方便,密钥的生成可以用mSCP. GenerateKey()来生成,矢量的生成也可以用mCSP.GenerateIV()来生成。大家也可以自己灵活的编写符合自己的3DES算法。

c#中利用Process调用外部ftp.exe


实际需求:利用process调用ftp.exe,程序在“int bytesReadPassword = stdoutStream.Read(bufferPassword, 0, bufferPassword.Length);”处出现阻塞
以下代码为正常流程,异常情况暂时未考虑。
C# code
   ftp = new Process();
            ftp.StartInfo.FileName = "ftp.exe";
            ftp.StartInfo.Arguments = host; //remote host IP Address.
            ftp.StartInfo.UseShellExecute = false;
            ftp.StartInfo.RedirectStandardOutput = true;
            ftp.StartInfo.RedirectStandardInput = true;
            ftp.StartInfo.RedirectStandardError = true;
            ftp.StartInfo.CreateNoWindow = false;
            ftp.Start();
            stdoutStream = ftp.StandardOutput.BaseStream;
            stdinpStream = ftp.StandardInput.BaseStream;          
           
            //取得进程启动后的output,应该为提示用户输入登录用户名
            byte[] buffer = new byte[1024];
            int bytesRead = stdoutStream.Read(buffer, 0, buffer.Length);
            if (bytesRead <= 0)
            {
                throw new Exception("Host does not respond as expected before timeout");
            }
            string str = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            //输入登录用户名
            if (str.Contains("User"))
            {
                if (stdinpStream.CanWrite)
                {
                    string user = String.Format("{0}", username);
                    Byte[] cmd = Encoding.ASCII.GetBytes((user + "
").ToCharArray());
                    stdinpStream.Write(cmd, 0, cmd.Length);
                    stdinpStream.Flush();
                }
            }                    
            //取得输入用户名后的output,应该为提示用户输入登录密码
            byte[] bufferRoot = new byte[1024];
            int bytesReadRoot = stdoutStream.Read(bufferRoot, 0, bufferRoot.Length);
            if (bytesReadRoot <= 0)
            {
                throw new Exception("Login failed.");
            }
            string strRoot = Encoding.ASCII.GetString(bufferRoot, 0, bytesReadRoot);
            //输入登录密码
            if (strRoot.Contains("Password"))
            {
                if (stdinpStream.CanWrite)
                {
                    string userpassword = String.Format("{0}", password);
                    Byte[] cmd1 = Encoding.ASCII.GetBytes((userpassword + "
").ToCharArray());
                    stdinpStream.Write(cmd1, 0, cmd1.Length);
                    stdinpStream.Flush();
                }
            }
            //取得登录成功后的信息
            byte[] bufferPassword = new byte[1024];
            int bytesReadPassword = stdoutStream.Read(bufferPassword, 0, bufferPassword.Length);
            if (bytesReadPassword <= 0)
            {
                throw new Exception("Login failed.");
            }
            string strPassword = Encoding.ASCII.GetString(bufferPassword, 0, bytesReadPassword);



注明:远程机器上的ftp服务没有问题,手工能登录成功。

如果把ftp.exe换成其他的程序,没有问题。