【转】10 分钟服务器安全设置,Ubuntu安全设置入门

英文:Cody Littlewood 译者:伯乐在线 – Panblack 链接:http://blog.jobbole.com/103344/ Bryan Kennedy 的《5分钟服务器安全设置》很好地介绍了对多数服务器攻击的防御对策。我们对他的方法做了一些修改,记录下来,作为推广我们的流程和最佳实践的一部分。还增加一些额外的解释,年轻的工程师们应该可以从中受益。 我每天上午检查 logwatch 邮件的时候,看到那些成百上千的登录尝试,几乎没有成功的,完全就像是一种享受。(有很多非常令人无语,比如用 1234 做 root 密码反反复复的登录)。这篇入门文章适用于 Debian/Ubuntu服务器,这是我们最喜欢的服务器发行版,通常我们这些服务器只是作为 docker 容器的宿主机,不过原理仍然适用。下一次我们再深入讲解如何保护专门用作 docker 宿主机的服务器。 在大规模系统上,当然最好是用 Ansible 或 Shipyard 这类工具完全自动化配置。不过偶尔的,你只是搭建一台独立服务器或为一个 Ansible recipe 准备基准设置,这就是本文要涵盖的内容。 声明:本文仅仅是入门和基础,你需要根据自己的需求来扩展。 重要的事先说 我们还没给 root 设密码呢,密码要随机、要复杂。我们用一种密码管理软件的密码生成器,调至最复杂设定。PW 管理软件将密码加密保存,并且由一个很长的主密码保护着。这里提供了多项冗余措施——长、复杂、随机的密码 + 加密保存/另一个长密码保护。不管你是用 PW 管理软件或其他手段,要妥善保管密码并且要加密保存。你只有在忘了 sudo 密码时才会用到这个密码。 # passwd * 注:在 HN 和 Redit 上有很多关于 root 密码的讨论,值得一读。 下一步就需要更新软件库并升级系统、应用最新的补丁。我们后面有个章节专门介绍如何自动安装安全更新。 apt–get update apt–get upgrade 添加用户 永远不要以 root 登录服务器。在用户名方面我们跟 Bryan 遵循类似的惯例,但是你可以根据自己的喜好使用任何惯例。在小团队里,大家共用一个用户名不是问题;但是队伍再大一些的话,最好是给不同的用户设定不同的权限级别,只给精心挑选的少数用户赋予 sudo 权限。...

May 21, 2020 · 3 分钟 · Remo

C#中的 explicit 和 implicit 关键字

简单记录一下。 explicit explicit 用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如如下类型: public class StringCombine { private readonly string _firstString; private readonly string _secondString; public StringCombine(string firstString, string secondString) { this._firstString = firstString; this._secondString = secondString; } public string Combine() { return $"{_firstString} {_secondString}"; } } 可以看到StringCombine类中有一个Combine()方法,用于将该类中的两个私有成有组合后输出: StringCombine stringCombine = new StringCombine("Hello", "world!"); string newString = stringCombine.Combine(); Console.WriteLine(newString); 如上代码将会输出Hello world!。 现在我们在StringCombine类中添加一段代码: public static explicit operator string(StringCombine stringCombine) { return stringCombine.Combine(); } 这时我们稍稍修改一下上面的代码: StringCombine stringCombine = new StringCombine("Hello", "world!...

January 21, 2020 · 1 分钟 · Remo

DataGrip导出CSV文件中文乱码

最近用DataGrip导出查询结果为CSV文件后,用Excel打开发现中文出现乱码的情况: 搜出来很多解决DataGrip中文乱码的方法都不对。后来发现我错怪DataGrip了,原来这是Excel的一个特性导致的:Excel读取文件时,不是默认按照utf-8编码读取的,而是会根据文件的BOM头来识别,如果没有BOM头,则按照unicode编码处理。 而DataGrip导出的CSV文件是不包含BOM头的,所以Excel按照unicode编码读取就会出现中文乱码。 解决方案一 对于已导出的CSV文件,可以用Notepad++或其他文本编辑器打开,然后菜单栏选择“编码”–>“转为UTF-8 BOM编码”,然后保存即可。 这时候再用Excel打开,中文就可以正常显示了。 解决方案二 不直接导出文件,查询出结果后,在结果栏右上角选择导出格式为Tab-separated(TSV),然后选择导出到剪贴板,或者Ctrl+A全选结果后复制,然后直接粘贴到Excel中即可。

December 17, 2019 · 1 分钟 · Remo

【转】C#基础小知识之 yield 关键字

转自博客:一天两天三天 对于yield关键字我们首先看一下 msdn 的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问器是迭代器。 通过使用 yield 定义迭代器,可在实现自定义集合类型的 IEnumerable 和 IEnumerator 模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 IEnumerator)。 yield是一个语法糖 看 msdn 的解释总是让人感觉生硬难懂。其实 yield 关键字很好理解。首先我们对于性质有个了解。yield 是一个语法糖。既然 yield 是在C#中的一个语法糖,那么就说明yield是对一种复杂行为的简化,就是将一段代码简化为一种简单的形式,方便我们程序员使用。 那么yield到底是对什么行为的简化。我们首先来看一下yield的使用场景。 还是来看msdn上的例子。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { foreach (int i in Power(2, 8, "")) { Console.Write("{0} ", i); } Console.ReadKey(); } public static IEnumerable<int> Power(int number, int exponent, string s) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } yield return 3; yield return 4; yield return 5; } } } 这是msdn上yield的一种使用场景。...

August 16, 2019 · 5 分钟 · Remo

解决Google Play报错DF-DFERH-01问题

博主最近换了港版三星S10+,刚开始用港行系统的时候,Google Play使用一直没有任何问题。后来刷成国行系统后,在某一次系统重启之后,Google Play突然开始无法连接,显示“从服务器检索信息时出错。DF-DFERH-01”这个错误。 经过一番搜索,发现是因为国行的谷歌框架会请求一个.cn后缀的域名“services.googleapis.cn”,这个.cn后缀的域名会自动被识别为国内域名,从而绕开代理,导致Google Play连接出错。解决方法有两个: 开启全局代理或者强制让“googleapis.cn”这个域名走代理,以KoolShare的OpenWrt软路由系统为例,只需在代理工具内选择“黑白名单”,然后将该域名添加到域名黑名单内即可。添加并保存后稍等几分钟或者清空一下DNS即可生效。 如果上面的方法没有作用,还可以使路由器强制将services.googleapis.cn这个地址解析到216.58.197.195这个IP。还是以KoolShare的OpenWrt软路由系统为例,在代理工具内选择“DNS设定”,然后在“自定义dnsmasq”文本框内添加一行“address=/services.googleapis.cn/216.58.197.195”后保存即可。

April 3, 2019 · 1 分钟 · Remo