Linux 快捷键
Ctrl + a 切换到命令行开始 这个操作跟 Home 实现的结果一样的,但 Home 在某些 unix 环境下无法使用,便可以使用这个组合;在 Linux 下的 vim,这个也是有效的;另外,在 windows 的许多文件编辑器里,这个也是有效的。 Ctrl + e 切换到命令行末尾 这个操作跟 END 实现的结果一样的,但 End 键在某些 unix 环境下无法使用,便可以使用这个组合;在 Linux 下的 vim,这个也是有效的;另外,在 windows 的许多文件编辑器里,这个也是有效的。 Ctrl + l 清除屏幕内容 效果等同于 clear Ctrl + u 清除剪切光标之前的内容 这个命令很有用,在 nslookup 里也是有效的。我有时看见同事一个字一个字的删除 shell 命令,十分崩溃!其实完全可以用一个 Ctrl + u 搞定。 Ctrl + k 剪切清除光标之后的内容 […]
使用 Vagrant 打造跨平台开发环境
Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。 我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。 安装步骤 1. 安装 VirtualBox 虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。 下载地址:https://www.virtualbox.org/wiki/Downloads * 虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的 2. 安装 Vagrant 下载地址:http://downloads.vagrantup.com/ 根据提示一步步安装。 此外,还得下载官方封装好的基础镜像: Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box 如果你要其他系统的镜像,可以来这里下载:http://www.vagrantbox.es/ * 鉴于国内网速,我们将下载镜像的步骤单独剥离出来了 3. 添加镜像到 Vagrant 假设我们下载的镜像存放路径是 ~/box/precise64.box,在终端里输入: $ vagrant box […]
10个最酷的Linux单行命令
下面是来自 Commandlinefu 网站由用户投票决出的 10 个最酷的 Linux 单行命令,希望对你有用。 sudo !! 以 root 帐户执行上一条命令。 python -m SimpleHTTPServer 利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000 访问。 :w !sudo tee % 在 Vim 中无需权限保存编辑的文件。 cd – 更改到上一次访问的目录。 ^foo^bar 将上一条命令中的 foo 替换为 bar,并执行。 cp filename{,.bak} 快速备份或复制文件。 mtr google.com traceroute + ping。 !whatever:p 搜索命令历史,但不执行。 $ssh-copy-id user@host 将 ssh keys 复制到 user@host 以启用无密码 […]
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一、前言 二、环境准备 三、安装与配置Nginx 四、Nginx之反向代理 五、Nginx之负载均衡 六、Nginx之页面缓存 七、Nginx之URL重写 八、Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一、前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解、nginx作为web服务器的操作讲解、nginx作为LNMP架构的讲解,不清楚的博友可以回头看看,在这一篇博客中我们主要讲解, nginx的反向代理、负载均衡、缓存、URL重写以及读写分离详解。好了,下面我们来具体说一说。 二、环境准备 1. 操作系统 CentOS 6.4 x86_64 2.软件版本 Nginx 1.4.2 3.实验拓扑 注,实验拓扑见下文。 4.安装yum源 1 2 3 [root@nginx ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@web1 ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@web2 ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 5.各节点时间同步 1 2 3 [root@nginx ~]# […]
git服务器的简单搭建
1、公钥的生成 任何一个需要使用git服务器的工程师都需要生成一个ssh的公钥。可以通过ssh-keygen来生成 ~/.ssh$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/shizhen/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/shizhen/.ssh/id_rsa. Your public key has been saved in /home/shizhen/.ssh/id_rsa.pub. The key fingerprint is: a8:19:49:f4:e6:e8:4f:8f:3e:47:c9:19:4c:09:ee:7f shizhen@sz-desktop The key’s randomart image is: 首先会让你输入要保存公钥的位置,直接回车即可,接着会提示让你重复一个密码两次,如果不想再使用公钥的时候输入密码,直接回车即可。完成后会在home目录下的.ssh目录中生成两个文件id_rsa(私有密钥)和id_rsa.pub(公钥)。 […]
Linux系统中掩耳盗铃的sudo配置
今天在这里讨论Linux系统中一个非常滑稽的系统配置失误,就是sudo,为什么说是滑稽的配置呢,就是因为如果配置不当的话,普通用户非常容易就可以提权到root用户,而且没有一点技术含量,系统管理员自己以为已经做好了权限管理,其实如果配置不当,权限漏洞已经出现。 很多公司Linux系统都会用到sudo来配置普通用户可以执行的超级用户权限,一是为了系统管理员更安全的操作系统,二是可以为研发人员提供可控的权限范围,下面就看一下我们在系统中常见的sudo配置文件。 admin ALL=(ALL) NOPASSWD: /app/nginx/sbin/nginx 这一段配置文件显示admin用户可以通过sudo来调用root权限启动nginx,相信这也是经常使用sudo的功能之一,因为如果nginx启动的是80端口的话,普通用户是无法启动的,因为系统限制了1024以下的端口监听只有root权限才可以操作,问题大多出现在这个sbin目录下的nginx可执行文件上,因为我们既然要将nginx的管理权限交付给普通用户admin,那么大部分情况是nginx的所有文件权限所属用户及组也都为admin,就像下面显示的这样。 [admin@localhost sbin]$ ll 总用量 3004-rwxr-xr-x 1 admin admin 3066035 9月 10 2014 nginx 但是如果sbin目录下的nginx文件权限也为admin用户,而此时该文件还在sudo权限配置中,那么问题就来了,admin用户可以将系统任意命令copy过来变成nginx文件,到这里大家应该知道潜在的风险是有多大了,只要是任何命令文件admin用户有只读权限,那么就可以把文件变成nginx,随意以root身份执行该命令,因为sudo只关心执行的文件名,而不关心文件内容本身,如果此时admin用户需要提权到root用户下也很简单,只要将系统的vi命令copy到sbin目录下并重命名为nginx,当文件替换后,此时的nginx文件就变成了系统的vi命令,如果admin用户此时运行sudo nginx时就是以root用户的权限来执行vi动作了,例如用户执行sudo nginx /etc/sudoers,他就可以用root身份来编辑这个文件,从而给自己开放一个NO PASSWORD ALL的权限,只要保存sudo配置文件,执行sudo su -就可以轻松切换到root权限中来了,而后再将被替换的nginx文件复原,此时用root权限就可以轻松留下系统后门,同时再清空操作记录,完成整个操作而不留痕迹,下面来总结一下admin提权需要的几步操作。 [admin@localhost ~]$ sudo -l用户 admin 可以在该主机上运行以下命令: (ALL) NOPASSWD: /app/nginx/sbin/nginx [admin@localhost ~]$ which vi /bin/vi [admin@localhost ~]$ cp /bin/vi /app/nginx/sbin/nginx [admin@localhost ~]$ sudo /app/nginx/sbin/nginx /etc/sudoers //注意此时已经是调用root权限vi编辑sudoers文件了 [admin@localhost ~]$ sudo -l用户 admin 可以在该主机上运行以下命令: (ALL) NOPASSWD: ALL [admin@localhost ~]$ sudo su – root [root@localhost ~]# //用户成功切换到root权限 避免这样的问题发生其实也很简单,就是将我们需要执行的文件所属权限都改为root即可,这样普通用户就没有办法用copy的方法来改写这个文件,因为他对于该文件已经没有操作权限了,从而也就规避了这种提权风险。 最后提一下发现这个配置问题的过程,在很早刚开始负责运维工作时,那个时候还是在一家传统互联网企业,甲方对于权限的控制非常严格,对于系统操作人员只提供普通用户权限,如果普通用户需要操作apache或者是nginx等就需要配置sudo,由于申请root权限的流程非常繁琐,在一次非常紧急的系统故障处理中就发现了这个方法,而当时的sudo可执行文件就存在权限所属的问题,最终提权成功了,不过这种方法还是不鼓励大家去做哈,如果在生产系统中发现有这样的问题,应该及时更新修复,避免由于权限泄漏导致的更多问题。 原创文章首发自阿布的博客,本文地址:http://www.abuve.com/article/16
每天一个linux命令(50):crontab命令
前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。 一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 Linux下的任务调度分为两类,系统任务调度和用户任务调度。 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。 /etc/crontab文件包括下面几行: [root@localhost ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=””HOME=/ # run-parts 51 * * * * root run-parts /etc/cron.hourly 24 7 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly [root@localhost ~]# 前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。 使用者权限文件: 文件: /etc/cron.deny 说明: 该文件中所列用户不允许使用crontab命令 文件: /etc/cron.allow 说明: 该文件中所列用户允许使用crontab命令 文件: /var/spool/cron/ 说明: 所有用户crontab文件存放的目录,以用户名命名 crontab文件的含义: 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute hour day month week command 其中: minute: 表示分钟,可以是从0到59之间的任何整数。 hour:表示小时,可以是从0到23之间的任何整数。 day:表示日期,可以是从1到31之间的任何整数。 month:表示月份,可以是从1到12之间的任何整数。 week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。 command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 在以上各个字段中,还可以使用以下特殊字符: 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。 二、crond服务 安装crontab: yum install crontabs 服务操作说明: /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 查看crontab服务状态: […]
隐藏Apache Nginx PHP版本号
############################################################################### 隐藏Apache版本号 ############################################################################### [root@localhost tmp]# curl -I 192.168.93.143 HTTP/1.1 403 Forbidden Date: Wed, 21 Jul 2010 13:09:33 GMT Server: Apache/2.2.15 (CentOS) Accept-Ranges: bytes Content-Length: 5043 Connection: close Content-Type: text/html; charset=UTF-8 隐藏方法: 1、隐藏Apache版本号的方法是修改Apache的配置文件,如RedHat系的Linux默认是: vim /etc/httpd/conf/httpd.conf 分别搜索关键字ServerTokens和ServerSignature,修改: ServerTokens OS 修改为 ServerTokens ProductOnly ServerSignature On 修改为 ServerSignature Off 2、重启或重新加载Apache就可以了。 apachectl restart 测试一下,如下: [root@localhost tmp]# curl -I 192.168.93.143 HTTP/1.1 […]
SSH远程登录显示自定义警告信息
>Linux服务器经常需要通过ssh服务远程登录操作。为了提醒登录着,或者非法入侵者,我们可以自定义设置警告或提醒信息,在用户登录时显示。起到警示登录者的作用。 配置ssh服务的打开显示提示信息选项,默认为打开。 [root@station25 ~]# grep “PrintMotd” /etc/ssh/sshd_config PrintMotd yes 编辑提示语文件/etc/motd,默认该文件为空。 [root@station25 ~]# vim /etc/motd 警告:你已经登录到一个重要服务器,所有操作将被记录. 非法操作将依法追究法律责任!! 请慎重操作! 客户端登录测试 [root@station35 ~]# ssh 10.1.1.25 root@10.1.1.25’s password: Last login: Thu Nov 22 10:21:16 2012 from station25.cluster.com 警告:你已经登录到一个重要服务器,所有操作将被记录. 非法操作将依法追究法律责任!! 请慎重操作! [root@station25 ~]# 实验完成,可以根据需要自定义一些警告信息,或欢迎信息。或者其他自己想要的喜欢的东西。 Ubuntu的登陆和欢迎信息控制/etc/issue和/etc/motd。/etc/issue与/etc/motd区别在于:当一个网络用户或通过串口登录系统 上时,/etc/issue的文件内容显示在login提示符之前,而/etc/motd内容显示在用户成功登录系统之后。 修改登陆前显示信息: #vi /etc/issue #vi /etc/issue.net Custom 10.04.2 LTS \n \l issue 内各代码意义: \d […]
linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
outekiMacBook-Air:BurpLoader4burpsuite_pro_v1.5.11 watsy$ ssh root@192.168.2.108 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is 07:36:8e:d0:72:88:38:f7:21:10:c3:12:d6:35:ad:55. Please contact your system administrator. Add correct host key in /Users/watsy/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/watsy/.ssh/known_hosts:1 RSA host key for 192.168.2.108 has changed and you have requested strict checking. Host key verification failed. 提示以上错误 解决办法 [root]$ rm -rf ~/.ssh/known_hosts 重新ssh连接,ok了。