显示标签为“Linux”的博文。显示所有博文
显示标签为“Linux”的博文。显示所有博文

2014年7月27日星期日

ubuntu 14.04 的 dns nameserver

ubuntu 14.04 的DNS设置不能再用 /etc/resolv.conf 来管理


If you are using ubuntu 14.04, you may find you can not setting dns on your /etc/resolv.conf
This is because ubuntu using resolvconf to manage the dns setting, every times system boot, resolvconf will regenerate resolv.conf file.

But there always have way to do this.
vim /etc/resolvconf/resolv.conf.d/head  

在最新的ubuntu 14.04中,/etc/resolv.conf 在系统重启之后,会被重新生成,这样你原来配置的DNS就消失了,但是,你可以设置

Linux iptables

http://vbird.dic.ksu.edu.tw/linux_server/0250simple_firewall_3.php#netfilter_chain

Linux 的 iptables 至少就有三个表格,包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其他计算机) 的 nat 、管理特殊旗标使用的 mangle (较少使用) 。更有甚者,我们还可以自定义额外的链呢! 真是很神奇吧!每个表格与其中链的用途分别是这样的:
  • filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的 table 喔!
    • INPUT:主要与想要进入我们 Linux 本机的封包有关;
    • OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
    • FORWARD:这个咚咚与 Linux 本机比较没有关系, 他可以『转递封包』到后端的计算机中,与下列 nat table 相关性较高。
  • nat (地址转换):是 Network Address Translation 的缩写, 这个表格主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。
    • PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
    • POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
    • OUTPUT:与发送出去的封包有关
  • mangle (破坏者):这个表格主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。

如果你在安装的时候选择没有防火墙的话,那么 iptables 在一开始的时候应该是没有规则的,不过, 可能因为你在安装的时候就有选择系统自动帮你建立防火墙机制,那系统就会有默认的防火墙规则了! 无论如何,我们先来看看目前本机的防火墙规则是如何吧!
[root@www ~]# iptables [-t tables] [-L] [-nv]
选项与参数:
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的 filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等

范例:列出 filter table 三条链的规则
[root@www ~]# iptables -L -n
Chain INPUT (policy ACCEPT)   <==针对 INPUT 链,且预设政策为可接受
target  prot opt source     destination <==说明栏
ACCEPT  all  --  0.0.0.0/0  0.0.0.0/0   state RELATED,ESTABLISHED <==第 1 条规则
ACCEPT  icmp --  0.0.0.0/0  0.0.0.0/0                             <==第 2 条规则
ACCEPT  all  --  0.0.0.0/0  0.0.0.0/0                             <==第 3 条规则
ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:22      <==以下类推
REJECT  all  --  0.0.0.0/0  0.0.0.0/0   reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)  <==针对 FORWARD 链,且预设政策为可接受
target  prot opt source     destination
REJECT  all  --  0.0.0.0/0  0.0.0.0/0   reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)  <==针对 OUTPUT 链,且预设政策为可接受
target  prot opt source     destination

范例:列出 nat table 三条链的规则
[root@www ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
在上表中,每一个 Chain 就是前面提到的每个链啰~ Chain 那一行里面括号的 policy 就是预设的政策, 那底下的 target, prot 代表什么呢?
  • target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
  • prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
  • opt:额外的选项说明
  • source :代表此规则是针对哪个『来源 IP』进行限制?
  • destination :代表此规则是针对哪个『目标 IP』进行限制?
在输出结果中,第一个范例因为没有加上 -t 的选项,所以默认就是 filter 这个表格内的 INPUT, OUTPUT, FORWARD 三条链的规则啰。若针对单机来说,INPUT 与 FORWARD 算是比较重要的管制防火墙链, 所以你可以发现最后一条规则的政策是 REJECT (拒绝) 喔!虽然 INPUT 与 FORWARD 的政策是放行 (ACCEPT), 不过在最后一条规则就已经将全部的封包都拒绝了!
不过这个指令的观察只是作个格式化的查阅,要详细解释每个规则会比较不容易解析。举例来说, 我们将 INPUT 的 5 条规则依据输出结果来说明一下,结果会变成:
  1. 只要是封包状态为 RELATED,ESTABLISHED 就予以接受
  2. 只要封包协议是 icmp 类型的,就予以放行
  3. 无论任何来源 (0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式 (prot 为 all),通通都接受
  4. 只要是传给 port 22 的主动式联机 tcp 封包就接受
  5. 全部的封包信息通通拒绝

2014年7月26日星期六

Ubuntu 开机 waiting for network configuration

安装好ubuntu server 之后,配置了两块网卡,ip配置是修改interface文件来完成,可是在启动的时候总是显示
“Waiting for network configuration…”和”Waiting up to 60 more seconds for network configuration…”,每次在这都要等待快2分钟,好是烦人,下面给出解决办法
在终端中输入
1
2
3
4
5
6
7
8
sudo vim /etc/init/failsafe.conf
 
 
$PLYMOUTH message --text="Waiting for network configuration..." || :
    sleep 1
 
    $PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
    sleep 1
将上面两处的sleep后面的数字修改成1,就是只等待1秒,这样就会快多了

2014年7月25日星期五

ubuntu 14.04 service networking restart 无法重启

更改了 /etc/network/interfaces

要重启一下网卡,使其生效

使用命令 service networking restart 无法重启,并报错

stop: Job failed while stopping
start: Job is already running: networking


原因:
This was never a supported way to bounce the network, starting with 14.04, we changed the init script to fail rather than possibly trash your machine.

If you look at upstart's log, you'll notice the following message:
Stopping or restarting the networking job is not supported.
Use ifdown & ifup to reconfigure desired interface.


在 14.04 版本中,取消了 service networking restart 的功能,只能使用 ifdown和ifup 来重新配置网卡接口

2014年5月26日星期一

nginx auth basic 认证

有时候需要象Apache那样为指定的目录添加访问验证,一般在Apache下使用htpasswd来添加,而htpasswd是包含在apache2-utils


以一个简单的后台管理为例, 地址:http://xxxx/admin/*, 对admin 下面的文件进行权限管理
1. 使用命令生成passfile 文件: htpasswd -c -d /etc/nginx/pass_file  username
2. 修改ngnix 配置
location ~ /admin {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/pass_file; //请使用绝对路径
        root   /home/www/admin; //host 地址,不然认证通过之后,找不到对应的文件
}  

htpasswd命令

apache htpasswd 命令选项参数说明

  -c 创建一个加密文件

  -n 不更新加密文件,只将apache htpasswd命令加密后的用户名密码显示在屏幕上

  -m 默认apache htpassswd命令采用MD5算法对密码进行加密

  -d apache htpassswd命令采用CRYPT算法对密码进行加密

  -p apache htpassswd命令不对密码进行进行加密,即明文密码

  -s apache htpassswd命令采用SHA算法对密码进行加密

  -b 在apache htpassswd命令行中一并输入用户名和密码而不是根据提示输入密码
  -D 删除指定的用户


apache htpasswd命令用法实例

1、利用htpasswd命令添加用户

  htpasswd -bc passwd_filename username 123456

2、在原有密码文件中增加下一个用户

  htpasswd -b passwd_filename username 123456

3、如何不更新密码文件,只显示加密后的用户名和密码

  htpasswd -nb username 123456

4、利用htpasswd命令删除用户名和密码

  htpasswd -D passwd_filename username

5、利用htpasswd命令修改密码

  htpasswd -D passwd_filename username

  htpasswd -b passwd_filename username 5678

2014年5月11日星期日

ssh配置密钥登录

1、在你的mac端,使用ssh-keygen生成一对密钥,一对密钥包含公钥和私钥。
ssh-keygen命令使用:
ssh-keygen -t type -f output_keyfile 

我们可以给密钥起一个名字,因为可能出现不同的密钥登录不同服务器。如果不采用 -f 命名,默认名字为id。 

eg. ssh-keygen -t rsa -f mylinux
如果创建成功会在当前目录下生成 mylinux 和 mylinux.pub 两个文件。


2、在你的mac端,使用ssh-copy-id命令将公钥加入到远程主机的authorized_key上。(默认mac是没有ssh-copy-id命令)。

添加命令如:
ssh-copy-id -i mylinux.pub ywang@10.211.55.4

authorized_key位于你要登录的远程服务器的用户根目录的.ssh文件夹内,如果没有.ssh文件夹,会自动生成相应的文件夹和文件。



3、最后,在你的mac端,直接使用 ssh -i mylinux ywang@10.211.55.4就可以登录,如果密钥有passpharse,会提示你输入。


4、再最后,我不想在登录时候还要指定密钥是什么,想直接使用ssh ywang@10.211.55.4登录,这时候需要配置mac端的 .ssh/config 文件。

添加配置如:
Host 10.211.55.4
User ywang
Port 22
CheckHostIP yes

IdentityFile ~/.ssh/mylinux

这样ssh会自动搜索配置文件,根据不同的Host和User使用不同的密钥文件登录。

2014年5月7日星期三

ssh的scp

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。

用法

传送文件到远程服务器
scp -P 2222 /home/filename root@192.168.1.2:/root/filename

获取远程服务器文件
scp -P 2222 root@192.168.1.2:/root/filename /home/filename

  1. 端口大写P为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 
  2. /home/filename表示本地上准备上传文件的路径和文件名。
  3. root@ 192.168.1.2 表示使用root用户登录远程服务器192.168.1.2
  4. :/root/filename 表示保存在远程服务器上目录和文件名。

2014年5月5日星期一

useradd 与 adduser

在Ubuntu中创建新用户,通常会用到两个命令:useradd和adduser。虽然作用一样,但用法却不尽相同:

1. 使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

2. 使用adduser时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。

useradd是一个ELF可执行程序

useradd会添加用户名,并创建和用户名相同的组名,但它并不在/home目录下创建基于用户名的目录,也不提示创建新的密码。

-b, –base-dir BASE_DIR 指定home目录的base目录

-d, –home-dir HOME_DIR 指定home目录

-g, –gid GROUP 指定gid

-l, –no-log-init do not add the user to the lastlog and

faillog databases

不要把用户添加到lastlog和failog中, 这个用户的登录记录不需要记载

-M, –no-create-home 不要建立home目录

-p, –password PASSWORD 指定新用户的密码

-r, –system 建立一个系统帐号

-s, –shell SHELL 指定shell

adduser -m -d /usr/system -s /bin/bash -p passwd system

adduser是一个perl脚本, 可以交互式地设定一些用户参数

问题:

adduser的-p 参数 并不能shadow密码

/usr/sbin/usermod 与 useradd的参数很类似

usermod –password PASSWORD username

总结上来讲,在Ubuntu中,adduser更适合初级使用者,因为不用去记那些繁琐的参数选项,只要跟着系统的提示一步一步进行下去就行,缺点就是整个创建过程比较复杂而漫长;而useradd比较适合有些高阶经验的使用者,往往一行命令加参数就能解决很多问题,所以创建起来十分方便。

OpenSSH配置文件

工作时电脑经常会存储不同的key,并且使用不同的用户登录linux系统。如:

ssh name@123.123.1.1
ssh user@123.122.1.145

解决方案:在~/.ssh/建立config文件(600权限)

Host *
User www
Port 22
CheckHostIP no
Compression yes
ForwardAgent yes

Host 114.80.119.*
User name
Port 22
IdentityFile ~/.ssh/mylinux


一般不需要修改OpenSSH客户端配置文件。对于给定用户,共有两个配置文件,分别是~/.ssh/config(用户专用)和/etc/ssh/ssh_config(全局共享)。要按照该顺序读取这些文件,对于给定的某个参数,它使用的是读取过程中发现的第一个配置。用户可以通过以下方式将全局参数设置覆盖掉:在自己的配置文件中设置同样的参数。在ssh或scp命令行上给出的参数的优先级要高于这两个文件中所设置的参数的优先级。

用户的~/.ssh/config文件必须由该用户所有(他是目录"~/"的所有者),并且除了所有者之外任何人都不能写入该文件。否则客户端就会给出一条错误消息然后退出。这个文件的模式通常被设为600,这是因为除了它的所有者之外任何人都没有理由能够去读取它。

这些配置文件中的配置行包含着声明,这些声明均以某个关键字(不区分大小写)开头,后面是空白,最后是参数(区分大小写)。


可以使用关键字Host来使声明只作用于特定的系统。Host声明作用于它与下一个Host声明之间的所有配置行。在主机名中,可以使用通配符*和?。

Host hostnames

将下面的声明(直到下一条Host声明)都指定为只适用于hostnames。hostnames采用的格式应该与在命令行上所用的格式一样,而且也能够包含通配符*和?。单个*指定所有主机。

User name

指定登录系统时所用的用户名。用Host声明来指定系统。该选项意味着,在远程系统上登录时,如果使用的用户名不同于在本地系统上登录所用的用户名,那么不必在命令行上输入用户名。

CheckHostIP yes|no

如果将其设置为yes(默认值),那么除了主机名之外,还可以采用IP地址来识别known_hosts文件中的某个系统。若设置为no,则只能使用主机名。

StrictHostKeyChecking yes | no | ask

决定OpenSSH是否将主机密钥添加到用户的known_hosts文件中以及如何添加。如果设置为ask(默认值),那么在连接新系统时会询问是否添加主机密钥;如果设置为no,就会自动添加主机密钥;如果设置为yes,就要求手工添加主机密钥。若将参数设置yes或ask,则当某系统的主机密钥发生改变之后,OpenSSH会拒绝连接到该系统。对于安全性要求较高的系统,请将此参数设置为yes或ask。

HostbasedAuthentication yes | no

若设置为yes,则尝试着进行rhosts身份验证。对于安全要求更高的系统,请将其设置为no(默认值)。

HostKeyAlgorithms algorithms

其中algorithms是一个由逗号隔开的算法列表,客户端按照优先级顺序依次使用这些算法。从ssh-rsa或ssh-dss中选择算法(默认值为"ssh-rsa, ssh-dss")。

ForwardX11 yes|no

如果设置为yes,则自动通过一条安全通道以不可信模式来转发X11连接,并设置shell变量DISPLAY。也可以在命令行上使用选项"-X"以不可信模式重定向X11连接。这个参数的默认值是no。要想让X11转发起作用,还必须将服务器上的/etc/sshd_config文件中的X11Forwarding设置为yes。更多信息请参见1.6节的"X11转发"部分。

ForwardX11Trusted yes | no

如果设置为yes,那么自动通过一条安全通道以可信模式来转发X11连接,并设置shell变量DISPLAY。也可以在命令行上使用选项"-Y"以不可信模式重定向X11连接。这个参数的默认值是no,但是Red Hat Linux将其设置为yes。要想让X11转发起作用,还必须将服务器上的/etc/sshd_config文件中的X11Forwarding设置为yes。更多信息请参见1.6节的"X11转发"部分。

TCPKeepAlive yes | no

如果设置为yes(默认值),就定期检查连接是否存活。如果服务器崩溃或者由于其他原因导致连接死掉,那么这种检查将会导致ssh或scp连接中断,即便只是暂时的。若将这个参数设置为no,则会导致客户端不去检查连接是否存活。

这项声明用到了TCP keepalive选项,它不可加密,并且容易受到IP欺骗(IP Spoofing)。如果希望采用能够防止IP欺骗的替代选项,可以采用基于服务器的相关技术,请参见1.4.6节的"ClientAliveInterval"部分。



2014年4月28日星期一

OpenSSH sshd进程

sshd服务是OpenSSH的守护进程。
sshd就是ssh daemon。
此服务附带的工具程序可以取代rlogin和rsh,在两台会话的主机间通过非安全的Internet建立起安全的加密连接。sshd监听来自客户端的连接请求,并在接收到请求时fork一个子进程;此子进程将负责处理密钥交换、加密、认证、命令执行及数据传输等。可以使用命令行选项或者配置文件来配置启动sshd,但命令行中指定的选项将优先于配置文件中的相同选项。

-4 强制sshd仅接收来自IPv4格式地址的请求;

-6 强制sshd仅接收来自IPv6格式地址的请求;

-b 指定ssh v1中服务器密钥的长度位数;

-D 此选项只是用来监视sshd的启动状态,在附加此选项时,sshd不会作为一个守护进程启动;

-d 此选项将启动调试模式;sshd服务的启动状态会在前台显示,并把详细的调试信息输出至日志文件;此时, sshd不会fork新的子进程,因此仅仅能接受一个连接请求。此先项主要用来调试sshd;

-e 输出错误信息到日志文件,不包括正常的调试信息;

-f 此选项后接指定的配置文件;默认为/etc/ssh/sshd_config;

-g 此选项后跟一个时间期限,默认单位是秒,用来为客户端认证期间提供一个可以等待的期限;如果客户端在此指定期限内认证错误,sshd将断开连接并退出;0表示无时间限制;

-h 此选项后跟一个主机密钥文件,用来指定一个sshd启动时读取的主机密钥文件;在以非root身份启动sshd时必须指定此选项(因为默认的key文件只有root具有读权限);ssh v1默认的key文件为/etc/ssh/ssh_host_key,sshd v2默认的key为/etc/ssh/ssh_host_rsa_key以及/etc/ssh/ssh_host_dsa_key;可以为不同版本的协议及不同的密钥算法指定不同的key文件;

-i 此选项用来指定通过inetd守护进程启动sshd;sshd需要生成服务端密钥才能接受客户端的请求,这将需要大约10秒钟的时间,如果每个请求都重新生成一次密钥的话,客户端将不得不等待较长的时间,因此,默认情况下是不使用inet方式启动sshd的;如果使用较短长度的密钥,此选项将是一个颇富弹性的选择;

-k 此选项后跟一个时间期限,用来为ssh v1指定一个重新生成服务端key的时间间隔(默认为一个小时);如此频繁的生成密钥的目的在于不必存储密钥,因此,超过了一个小时后恢复通讯期间加密的数据几乎是不可能的,哪怕机器被攻入亦或被占据,这将在很大程度上提高了安全性;0表示不重新生成密钥;

-o 用来为配置文件指定一个新的可用选项;

-p 指定sshd服务监听的端口(默认是22),可以同时指定多个端口;如果使用此选项,则会忽略配置文件中指定的端口;
-q 安静模式,此种情况下将不会产生任何系统日志;正常情况下,服务启动、认证以及每一次终端登录都会被记录;

-t 测试模式,仅用来检查配置文件的正确性及密钥是否健壮;此选项多用在配置文件改动时;

六、sshd相关的文件详细说明

~/.hushlogin
如果配置文件中分别启用了PrintLastLog和PrintMotd选项,则此文件可以用来在屏幕显示前一次的登录时间以及/etc/motd的内容。但不会显示Banner选项指定的banner。

~/.rhosts
此文件主要用来实现主机间的认证。如果你的主机上有些用户的主目录位于NFS文件系统上,则必需把这个文件的权限置为全局可读,因为sshd进程将以root的身份读取此文件。此外,此文件属主必须为相关用户,且其他任何用户均不能具有写权限。一般推荐的权限为600。

~/.ssh/authorized_keys
此文件存储的是用户的公钥,当其远程登录时可以用此公钥为其进行认证。公钥信息并非要求高度安全性的文件,但仍推荐将其权限置为700。如果此文件、~/.ssh目录或者此用户的主目录能被其他用户读取,则此文件将可能被其他非授权用户修改或置换。
此种情况下,除非在主配置文件中把StrictModes的值置为"no",否则sshd将不允许使用此文件。

~/.ssh/environment
如果此文件存在,将会在用户登录时读入用户的环境。它只能包含空行、以"#"开头的注释行以及形如“name=value”赋值行,推荐权限为600。默认情况下此功能是禁止的,可以通过PermitUserEnviroment选项开启。

~/.ssh/known_hosts
用户曾成功登入过的主机的host key都将存放于此文件,但不包括系统间已经互相成功认证的主机host key,只能让root和属主具有读写权限。

~/.ssh/rc
此文件用来在用户的主目录不能正常访问前初始化用户的登录环境,其权限应该为600。

/etc/host.equiv
用于主机间的认证,只能让root用户可写。

/etc/nologin
如果这个文件存在,sshd将拒绝除root用户外的任何其他用户登录。在任何用户在尝试登录时,此文件都将被显示,但所有非root用户将被拒绝。此文件应该是全局可读的。

/etc/ssh/ssh_known_hosts
存入系统级别的互相认证时已知主机的host key。这个文件需要管理员手动配置,可以将已知主机的公钥存入于此文件。此文件只能为root或属主读写,但应该是全局可读的。

/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
以上三个文件用来存放主机密钥的私钥部分,它们的属主只能为root用户,只能被root用户读取,不能为其他任何用户访问。如果其他用户可以读取此文件,则sshd将不能启动。

/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
以上三个文件用来存放主机密钥的公钥部分,它们应该是全局可读的,但只有root用户可写。它们分别对应相应的私钥文件。这些文件并没有什么实际用途,仅仅是用来为用户认证登录提供便利,因此常被copy至其它可信的主机中。可以使用ssh-keygen来生成这些文件。

/etc/ssh/sshd_config
sshd的主配置文件;

2014年4月26日星期六

SSH、OpenSSH 使用和配置

SSH是一种网络协议,用于计算机之间的加密登录。

OpenSSH是SSH协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。

OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。

  1. ssh分为openssh-client和openssh-server
  2. ssh登录命令:ssh [-p port] [user@]hostname
  3. 如果修改过登录端口,需要添加端口 ssh -p 12345 root@x.x.x.x
  4. 我们需要安装ssh-server用于远程用户的ssh登录,ubuntu可以apt-get install openssh-server,然后查看sshd进程是否启动 ps -e|grep sshd,如果启动则远程用户可以通过ssh登录了。

ssh配置文件 /etc/ssh/sshd_config

  1. 可以修改ssh登录端口,默认端口22,改端口可以防止被端口扫描
  2. 可以禁止root登录,permitRootLogin no
  3. 可以禁止密码登录
  4. LoginGraceTime 20,意思为:通过sshd登陆服务器后,必须在出现操作提示符20秒内登陆,只要超时,sshd会自动切断连接。
  5. PermitRootLogin without-password,意思为:禁止root帐户使用用户名+密码认证方式登陆,只能使用公共密钥方式登陆。
  6. PasswordAuthentication no,意思为:禁止使用用户名+密码认证方式登陆,只能使用公共密钥方式登陆。
  7. LogLevel VERBOSE,意思为:在日志中记录更多的有关登陆成功和登陆失败的信息。

ssh重启

  1. service ssh restart
  2. /etc/init.d/ssh restart

ssh的log文件保存在/var/log/auth.log


ssh允许和拒绝用户和用户组
  1. DenyUsers, AllowUsers, DenyGroups, and AllowGroups
  2. DenyUsers aaa,拒绝aaa用户登录
  3. AllowGroups groupname,groupname为系统用户的组,此keyword设置只能该组的用户登录

ubuntu网络配置

ubuntu网络配置

配置命令 ifconfig

  1. 从ifconfig命令可以得到当前已经激活的网卡。
  2. eth一般代表独立网卡,em一般代表集成网卡
  3. ifconfig -a 可以查看所有的网卡
  4. 如果网卡没有激活,使用 ifconfig eth0 up/down 来开启/关闭
  5. 默认情况,服务器 网卡都是关闭的。
配置文件 /etc/network/interface
  1. IP、网关、掩码配置
  2. 如果网卡没有激活,用ifconfig命令虽然可以激活,但是系统重启后,配置就会还原。这样我们需要修改配置文件,配置网卡自动激活以及IP分配方式等等。
  3. 在配置文件里添加
  • auto eth0     eth0 自启动 
  • iface eth0 inet dhcp      使用dhcp配置动态IP
  • iface eth0 inet static      配置静态IP 
  • 配置静态IP,还需要设置 IP address、netmask、gateway
  • address   192.168.1.100
  • netmask   255.255.255.0
  • gateway   192.168.1.1 
DNS配置文件 /etc/resolv.conf

  1. 添加DNS服务器 nameserver 8.8.8.8 
  2. 如果有多个DNS,即再添加 nameserver
  3. DNS配置文件修改之后,立即生效

重启网络服务

  1. service networking restart
  2. /etc/init.d/networking restart

禁Ping

  1. 配置文件在 /proc/sys/net/ipv4/icmp_echo_ignore_all
  2. 默认该配置文件为0
  3. 如果要禁ping,则修改为1。可用命令echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  4. 但上面这种方式,在系统重启之后,会还原为0
  5. 如果想一直生效,可以将命令写入系统启动文件 /etc/rc.local 里
  6. 或者 自己写一个 初始化配置文件init.sh,然后在 /etc/rc.local 里 sh init.sh,在系统启动时自动运行该文件就可以了。

2014年4月24日星期四

rc.local

 1. /etc/rc.local
   这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里
   --------引用----------------------
  在完成 run level 3 的服务启动后,如果我还有其他的动作想要完成时,举例来说, 我还想要寄一封 mail 给某个系统管理帐号,通知他,系统刚刚重新开机完毕,那么,是否应该要制作一个 shell script 放置在 /etc/rc.d/init.d/ 里面,然后再以连结方式连结到 /etc/rc.d/rc3.d/ 里面呢?呵呵!当然不需要!还记得上一小节提到的 /etc/rc.d/rc.local 吧? 这个档案就可以执行您自己想要执行的系统指令了。像不像早期 DOS 年代的 autoexec.bat 与 config.sys 呢? ^_^
  也就是说,我有任何想要在开机时就进行的工作时,直接将他写入 /etc/rc.local , 那么该工作就会在开机的时候自动被载入喔!而不必等我们登入系统去启动呢!是否很方便啊!一般来说,鸟哥就很喜欢把自己制作的 shell script 完整档名写入 /etc/rc.d/rc.local ,如此一来,开机就会将我的 shell script 执行过,真是好棒那!
  --------引用----------------------
也就是说,在linux启动的最后阶段,系统会执行存于rc.local中的命令。和windows里面的“启动”菜单有点像,但是设置麻烦些,功能更强大

使用情况:
1)oracle等服务器的启动:如果你需要你的oracle可以随着系统一起启动,你可以去看看/etc/oratab这个文件,然后去了解它,你就会发现这里才是它正确的位置所在
2)静态路由: 对于需要增加大量的不是本网段的路由时,很多人喜欢在/etc/rc.d/rc.local里添加类似
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.224.0.251
route add -host 192.168.100.1  gw 10.224.0.251

2. /etc/init.d 
       这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动,停止,重启这些服务。举个例子来说,如果你要重新启动 sendmail 的话,而且你的 sendmail 是以 rpm 来安装的,那么下达 /etc/rc.d/init.d/sendmail restart 就可以直接启动 sendmail 啰!
        前面说到,/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别), 是该运行init.d里的脚本了,但是并不是直接运行,而是有选择的因为系统并不需要启动所有的服务。
  那么,系统是如何选择哪些需要启动哪些不要呢?这时刚才说的运行级别就起作用了。在决定了系统启动的run level之后,/etc/rc.d/rc这个脚本先执行。在RH9和FC7的源码中它都是一上来就check_runlevel()(虽然实现的代码不一样,也大同小异),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活到init.d里的脚本。


linux /etc/rc.d/目录的详解
rc.d的内容如下:
init.d/ :各种服务器和程序的二进制文件存放目录。
rcx.d/: 各个启动级别的执行程序连接目录。里头的东西都是指向init.d/的一些软连接。具体的后边叙述。
还有三个脚本:rc.sysinit, rc, rc.local
redhat的启动方式和执行次序是:
加载内核
执行init程序
/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
/etc/rc.d/rc.local
/sbin/mingetty # 等待用户登录
在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:
调入keymap以及系统字体
启动swapping
设置主机名
设置NIS域名
检查(fsck)并mount文件系统
打开quota
装载声卡模块
设置系统时钟
等等。

/etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的
,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx
从小到大来执行。例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用
/etc/rc.d/rc3.d/下的脚本。
值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中
的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。

2014年4月23日星期三

Gitolite

gitolite用于git版本库的权限控制。
gitolite发端自gitosis,功能早已超越后者,而且gitosis已停止跟新好多年!
安装
使用单独的用户git来安装gitolite
创建用户
1
# adduser --shell=/bin/bash git
安装gitolite
先为自己生成一个密钥对
1
$ ssh-keygen -b 2048 -t rsa -f your_name
然后
对于ubuntu可以通过apt-get install gitolite3安装
1
2
3
4
$ git clone git://github.com/sitaramc/gitolite
$ mkdir -p $HOME/bin
$ $HOME/gitolite/install -to $HOME/bin
$ $HOME/bin/gitolite setup -pk your_name.pub
安装就算完成了。
安装之后gitlote会在$HOME/repositories目录下初始化两个git仓库,gitolite-admin.git和testing.git,前者用于管理gitlote,后者是个测试用的仓库。
配置
gitolite通过更新gitolite-admin.git仓库来实施管理。所以要先clone这个仓库:
1
$ git clone ywang@:gitolite-admin
这里ywang@ubuntu是主机名。
用户管理
将git用户的公钥拷贝到进入管理仓库下的子目录keydir,然后提交推送即可。用户的公钥以username.pub的格式命名,username与权限管理时指定的用户名必须是一致的。
权限管理
权限管理就是配置管理仓库子目录conf下的gitolite.conf文件。配置完毕提交推送权限就会生效。
先列出一个简单的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@admin      =   openwares
@staff      =   minli.wang @admin
repo gitolite-admin
    RW+     =   @admin
repo testing
    RW+     =   @all
repo foobar
    RW+             =   @admin
    -   master      =   @staff
    -   refs/tags   =   @staff
    RW  devel       =   @staff
    RW+             =   @staff
gitolite支持按用户或组管理权限。组名以@开头,可以包含多个用户,名字以空格分隔。组还可以嵌套其他组。
权限规则行的格式为:
1
more refexes> = more users/user groups>
refex的含义见下一节
权限分类和规则
  • C
  • 可以创建新仓库
  • R
  • 可以读取仓库
  • RW
  • 可以读取,fast-forward推送,创建分支和标签
  • RW+
  • 可以进行任何类型的push,包括delete,rewind,overwrite等
  • -
  • 拒绝任何类型的推送
对于clone和fetch操作,只要当前用户具有R,RW或RW+任何一种权限,都可以读取仓库,其实就是存在R权限。
对于push操作,gitolite顺序处理权限规则,直到找到一条用户,权限许可和分支模式完全匹配的规则为止,之后的规则不再处理,所以一定要注意权限规则的顺序问题。
refex
refex这玩意儿就类似于regex的叫法,是指ref的匹配模式。有以下匹配规则:
  • 空的refex处理为’refs/.*’,也就是匹配任何refs,因为ref默认都存在于refs/目录下
  • 如果指定的refex没有以refs/开头,则为其添加前缀refs/heads/
  • refex使用隐式的行首规则,^在规则表达式中为匹配行首,refex默认从行首匹配,但没有$行尾匹配。举个栗子,如果指定refex为master,则下面这几个ref都可以匹配:
    1
    2
    3
    refs/heads/master
    refs/heads/master1
    refs/heads/master/full
  • 最后实际被推送到的ref以经过规则匹配后的结果为准
个人分支
gitolite支持为用户设立个人分支空间,其规则如下:
1
RW+ personal/USER/  =   alice
personal可以为任何字符,/USER/会被替换成实际的用户名,因此用户alice可以在personal/alice/目录推送任何分支,比如
personal/alice/foo和personal/alice/bar,但不能推送到personal/alice。
个人分支空间为每个用户设立一个私人空间,防止公共分支空间的名字污染。开发者可以随意使用自己的个人分支空间,无需关心其权限问题,也不用担心分支名字冲突。
gitolite shell
gitolite提供了一个简单的ssh shell,可以了解远程仓库的一些信息和进行一些管理操作,以下命令可以查看shell的帮助:
1
$ ssh gitolite help
gitolite是远程gitolite的ssh别名。可以在每个支持的命令后面添加-h参数来了解命令的详细用法。比如:
1
$ ssh gitolite help -h
新建gitolite远程仓库
有这么几种方法:
  • 服务器管理员远程登录服务器,直接在$HOME/repositories目录下初始化裸仓库,这和使用git没有任何差别
  • 修改gitolite-admin/conf/gitolite.conf文件,添加新仓库及其权限,提交推送时,gitolite会自动创建新仓库
  • 具有创建仓库权限的用户,可以本地创建空仓库,然后添加远程仓库引用,推送后gitolite会为用户创建新仓库。比如:
    1
    2
    3
    4
    5
    6
    mkdir somegit
    cd somegit
    git init
    git commit --allow-empty
    git remote add origin git@server:Projects/somegit.git
    git push origin master
删除gitolite仓库
先删除配置文件中仓库的相关配置,然后登录服务器删除仓库,gitolite不会自动删除仓库。
References:
[1]github:gitolite
[2]official:gitolite