标签归档:linux

linux限制ssh用户使用命令

假设有机器A和B,分别有帐户a和b,现在希望允许a能以b的身份登陆B,但是限制a仅能访问$HOME/bin下面的命令(比如作为中转机,要求只能使用ssh命令),可以如下操作:
        1、在A上帐户a下生成RSA密匙对,并把公钥写入B的帐户b下的~/.ssh/authorized_keys中。
        2、编辑~/.ssh/authorized_keys,在前面加上语句:
command=”bash –restricted –noprofile –rcfile $HOME/.stricted_profile” ssh-rsa 。。。
         这句话的作用是使用restricted模式,并且不加载系统默认的profile文件,而加载我们定义的profile文件$HOME/.stricted_profile。上面添加command参数一定是在一个主机行的前面,每添加一台主机,需要添加一行。
         3、编辑 $HOME/.stricted_profile文件
                PATH=${HOME}/bin
                export PATH
         4、加入想让该用户使用的命令,如ssh
             mkdir $HOME/bin
             ln -s /usr/bin/ssh $HOME/bin/
这样当登陆这台机器的时候,除了ssh 命令,不能使用其他任何命令。效果如下:
ssh usr@192.168.122.28
bash-3.2$ ls bash: ls: command not found bash-3.2$
即使ls也不能使用

Linux批量添加用户(newusers、chpasswd)

在 Linux 用户管理中,大批量添加用户是经常需要的;如果用useradd或adduser 来添加大量用户,对系统管理员的体力和耐力是一个极大的挑战;好在Linux有大批量用户添加工具 newusers ,我们通过newusers 和chpasswd 就可以轻松完成大批量用户的添加;
 

为什么需要大批量添加用户;

我们什么时候才需要大批量添加用户呢?有时我们需要让几十个或更多的用户在主机上完成相同或相似的任务,比如我们想同时添加一堆的ftp 用户,这些ftp用户归属同一组,但不允许他们通过终端或远程登录服务器;有时我们可能为了教学,比如我们有50个学生,并且每个学生在服务器上有一个独立的用户名,能登录系统,并能管理自己的帐号或完成一些在自己权限下的作业;

批量用户添加流程;

批量添中用户流程是通过newusers 导入一个严格按照/etc/passwd 的书写格式来书写内容的文件来完成添加用户,然后通过chpasswd 导入用户密码文件来完成批量更新用户密码的过程;

1、newusers 成批添加用户的工具;

其用法很简单,newusers 后面直接跟一个文件;文件格式和/etc/passwd 的格式相同;

用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL

举例:

win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
......

值得一提的是关于SHELL类型,查看主机上所有SHELL ,可以通过chsh 来查看;

[root@localhost beinan]# chsh --list
/bin/sh
/bin/bash
/sbin/nologin
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh

其中除了/sbin/nologin ,其它类型的SHELL 都能登录系统;nologin 大多是虚拟用户用的SHELL ,也就是说虽然他是系统用户,但他并无登录系统的权限;如果您想添加这类用户,就把他的SHELL 设置成/sbin/nologin ,比如上面的例子;

关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档;

2、chpasswd 批量更新用户口令工具;

chpasswd 工具是成批更新用户口令的工具,是把一个文件内容重新定向添加到/etc/shadow中;

chpasswd < 文件

但文件的内容并不是没有约定的,必须以下面的格式来书写,并且不能有空行;

用户名:口令

用户名1:口令1
用户名2:口令2

举例:

win00:123456
win01:654321
… …

四、批量添加用户实例;

1、首先我们创建用户文件和密码文件;

我们要创建包含新用户的文件userfile.txt ;另一个是为新添加的用户设置密码的userpwdfile.txt;

[root@localhost ~]# touch userfile.txt
[root@localhost ~]# touch userpwdfile.txt

然后用文本编辑器打开文件userfile.txt,添加如下内容;

win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
win02:x:522:522::/home/win02:/sbin/nologin
win03:x:523:523::/home/win03:/sbin/nologin

userfile.txt 文件内容格式和 /etc/passwd 的格式是一样的,必须严格按照/etc/passwd 的格式来书写;上面所添加的用户都不能登录系统,但完全能用于ftp登录,但您得在相应ftp服务器的配置文件中打开让本地用户有读写权限;如果您想让上面的部份用户可以登录系统,可以把SHELL类似改一改,比如改成/bin/bash ;

我们再来书写新增用户的密码文件userpwdfile.txt内容;这个文件的内容中的用户名要与 userfile.txt用户名相同;也就是说我们先是添加了win00到win09的用户,现在要为这些用户更新密码;比如下面的;

win00:123456
win01:654321
win02:123321
win03:qweewq

2、通过newusers和chpasswd 完成批量添加用户;

[root@localhost ~]# newusers userfile.txt
[root@localhost ~]# chpasswd < userpwdfile.txt

ftp被动方式(PASV)连接iptables设置

iptables中加

-A INPUT -p tcp -m state –state NEW -m tcp –dport 10221:10231 -j ACCEPT
/etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_min_port=10221 #随机最小端口,原来是4000
pasv_max_port=10231 #随机最大端口,原来是5000.

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的1024+端口发送连接请求,建立一条数据链路来传送数据。

setfacl报错提示Operation not supported

Centos系统的setfacl给用户设置权限时报错提示Operation not supported
问题:/mnt/bak为硬盘的一个分区,在fstab做了defaults挂载,当设定acl
命令为:setfacl -m u:luo:rwx /mnt/bak的时候提示
setfacl: /mnt/bak: Operation not supported 错误
解决方法:重新修改/etc/fstab文件,加入acl选项
/dev/vg/bak             /mnt/bak                ext3    defaults,acl    0 0
然后:mount -o remount /mnt/bak 重新挂载,再执行上面的命令,成功!

Top命令监控某个进程的资源占有情况

Top命令监控某个进程的资源占有情况

下面是各种内存:

VIRT:virtual memory usage

1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存

1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory

1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来

DATA

1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

CentOS 6.x 升级linux内核至 3.x

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.3 (Final)

[root@localhost ~]# uname -a
Linux localhost 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

更新当前系统
yum update
yum upgrade

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

安装编译内核所需要的软件包
yum groupinstall “Development Tools”   # 一口气安装编译时所需的一切工具
yum -y install wget gcc gcc-c++ xz bc ncurses-devel  hmaccalc zlib-devel binutils-devel elfutils-libelf-devel

yum install qt-devel #如果你没有 X 环境,这一条可以不用

Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3个数字组成:r.x.y

r: 主版本号
x: 次版本号,偶数表示稳定版本;奇数表示开发中版本。
y: 修订版本号 , 表示修改的次数

http://www.kernel.org 可以看到有stable, longterm等版本,longterm是比stable更稳定的版本,会长时间更新,当前3x最新版本为3.18.18

下载解压
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.18.tar.xz
yum -y install xz
tar -xvJf linux-3.18.18.tar.xz

将当前系统的配置文件拷贝到当前目录
cd linux-3.18.18
cp /boot/config-2.6.32-504.23.4.el6.x86_64 .config

使用旧内核配置,并自动接受每个新增选项的默认设置
sh -c ‘yes “” | make oldconfig’

make oldconfig会读取当前目录下的.config文件,在.config文件里没有找到的选项则提示用户填写,然后备份.config文件为.config.old,并生成新的.config文件,参考 http://stackoverflow.com/questions/4178526/what-does-make-oldconfig-do-exactly-linux-kernel-makefile

编译内核 (需要几十分钟)
[root@centos ~]# make

安装内核

[root@centos ~]# make modules_install install

如果出现了 ERROR: modinfo: could not find module xxx,数量少的话,可以忽略。

修改Grub引导顺序

安装完成后,需要修改Grub引导顺序,让新安装的内核作为默认内核。
vi /etc/grub.conf

数一下刚刚新安装的内核在哪个位置,从0开始,然后设置default为那个数字,一般新安装的内核在第一个位置,所以设置default=0

重启
reboot

重启后,看一下当前内核版本号,

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.18.18 #1 SMP Wed Jul 15 12:49:31 CST 2015 x86_64 x86_64 x86_64 GNU/Linux

成功啦

Linux ContOS 6.5如何安装Java JDK 6

1. 去官网下载jdk.
http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin

2.su root     //切换到root账户

3. mkdir /usr/java     // 在usr目录下创建java文件夹

4. mv jdk-6u45-linux-x64.bin /usr/java     //将下载的jdk文件移动到你刚创建的文件夹下 前提是在你下载jdk所存放的目录下

5. chmod 777  jdk-6u45-linux-x64.bin     //给安装包执行权限  前提是要在/usr/java目录下

6.  ./jdk-6u45-linux-x64.bin   //安装  出现none 时安装成功

7. vi /etc/profile  // 设置环境变量

在文件最后加上

export JAVA_HOME=/usr/java/jdk1.6.0_45
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

按Esc键退出 输入 :wq

注意:linux环境变量的分隔符是冒号“:”不是分号“;”

之后重启机器   reboot

最后输入 java -version 查看安装jdk版本

java version “1.6.0_45”
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

Linux ntpdate同步网络时间

在Linux下,我们可以使用ntpdate进行网络时间的同步,而不是我们自己去设置时间。这个命令的使用很简单
ntpdate 0.cn.pool.ntp.org
定时的同步时间

vim /etc/crontab
10 5 * * * root (/usr/sbin/ntpdate 0.cn.pool.ntp.org && /sbin/hwclock -w) &> /var/log/ntpdate.log

每天的5点10分crontab运行一次命令,自动同步时间。

如果你具有多台的服务器,不要使用这个方法来定时的同步的你服务器,请使用ntpd来进行,这个还可以校准始终的问题。详情查看鸟哥

使用ntpdata造成的时间的越变还可能引发因某些依赖连续时间的程序的问题。一般第一次使用ntpdate,接下来使用ntpd服务来不断的调整时间。参见http://blog.sina.com.cn/s/blog_3f3422fd0100f06c.html

将时区设置为东8区的时间,虽然服务器在全球的不同地方,但是我们人在中国,看着中国的时间比较有感觉。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
# Mon Mar 31 11:02:55 CST 2014
另外如果使用date命令查看时间,发现刚刚好相差8个小时或者其他的小时,那么应该就是你的时区设置不对,快快修改一下吧。

网络时间同步服务器列表

全球那么多的网络时间同步器,那么使用哪个好呢。我们知道数据在网络上流动是由延迟的,因此我们选择离我们服务器越近的服务器进行同步,时间越准。

时间服务器分为两种,一种是一级时间服务器,另外一种是二级时间服务器。我们如果是同步自己的服务器的时间,那么选择二级时间服务器,因为一级时间服务器是为二级时间服务器提供时间校对服务器,我们尽量不要增加一级服务器的压力。这种层级的概念和DNS的层级概念是一致的。

一级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumOneTimeServers

二级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers

附二级服务器列表:

  • 0.pool.ntp.org  有域名负载均衡
  • 0.cn.pool.ntp.org  有域名负载均衡
  • ntp.tuna.tsinghua.edu.cn 清华大学
  • time.windows.com    微软

Linux下如何备份指定目录,并排除不需要的目录

有时,我们需要将服务器上的某个目录打包,以方便我们下载传输。
例如 备份/data/webroot/uploads下所有文件,但要排除/data/webroot/uploads/temp目录。代码如下:

cd /data/webroot/
date=`date +%Y%m%d`
/bin/tar -zcvf /data/backup/uploads.${date}.tar.gz --exclude=uploads/temp  uploads