Linux下,一般创建文件或者文件夹都有一个默认的权限

 这个数值是靠Linux的umask值决定的。

 而默认的root用户和普通用户的umask也不同

 root:022

 普通用户:002


所以导致root创建和普通用户的创建的权限不同

root:

-------

文件:644    // 666-022=644

-rw-r--r-- 1 root root    0 09-03 19:03 testfile

文件夹:755  // 777-022=755

drwxr-xr-x 2 root root 4.0K 09-03 19:02 testdir


普通用户:

--------

文件:664   // 666-002=664

-rw-rw-r-- 1 test test 0 09-03 19:05 testfile

文件夹:775  // 777-002=775

drwxrwxr-x 2 test test 4.0K 09-03 19:06 testdir


修改umask值


临时修改(只是当前终端有效,下次登录就没有了)

 umask 000

 注:000为权限所表示的八进制数据,如:022, 002



 永久修改:

 修改/etc/bashrc 文件


行8~行12

if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then

    umask 002

else

    umask 022

fi


第一个为普通用户的umask,

 第二个为root用户的


然后重要加载,或重新登录就可以了.



chmod命令详解

 chmod命令(转)2007-12-17 02:31 chmod 命令 


    chmod用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。


1. 文字设定法

 语法:chmod [who] [+ | - | =] [mode] 文件名 


    命令中各选项的含义为:

 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它是系统默认值。 操作符号可以是: + 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。 设置 mode 所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。 t 保存程序的文本到交换设备上。 u 与文件属主拥有一样的权限。 g 与和文件属主同组的用户拥有一样的权限。 o 与其他用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 


    在一个命令行中可给出多个权限方式,其间用逗号隔开。例如: 

 chmod g+r,o+r example %使同组和其他用户对文件example 有读权限。 2. 数字设定法 


    我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。


    例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。


    数字设定法的一般形式为:


    语法:chmod [mode] 文件名


指令实例:


    chmod a+x sort


    %即设定文件sort的属性为:


     文件属主(u)增加执行权限


     与文件属主同组用户(g)增加执行权限


     其他用户(o)增加执行权限


    chmod ug+w,o-x text


    %即设定文件text的属性为:


    文件属主(u)增加写权限


    与文件属主同组用户(g)增加写权限


    其他用户(o)删除执行权限



    chmod u+s a.out


    %假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看):


    –rws--x--x 1 inin users 7192 Nov 4 14:22 a.out


    并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。当其他用户执行 a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这 个文件被设定为其他人不具备任何权限),这就是s的功能。因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以 保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。


    chmod a–x mm.txt


    chmod –x mm.txt


    chmod ugo–x mm.txt


    %以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。



    $chmod 644 mm.txt


    %即设定文件mm.txt的属性为:-rw-r--r--


    文件属主(u)inin拥有读、写权限


     与文件属主同组人用户(g)拥有读权限


     其他人(o)拥有读权限



    chmod 750 wch.txt


    %即设定wchtxt这个文件的属性为:-rwxr-x---


     文件主本人(u)inin可读/可写/可执行权


     与文件主同组人(g)可读/可执行权

     其他人(o)没有任何权限


kill killall pkill (2012-06-06 10:14:55)转载▼ 标签: it 分类: linux命令 


杀死系统中的进程

kill 命令

 通常情况下,可以通过停止一个程序运行的方法来结束程序产生的进程。但有时由于某些原因,程序停止响

 应,无法正常终止,这就需要用kill命令来杀死程序产生的进程,从而结束程序的运行。kill命令不但能杀死进

程,同时也会杀死该进程的所有子进程。kill命令的格式是:

kill [–signal] PID

其中:PID是进程的识别号;signal是向进程发出的进程信号,下表列出了一些常用信号的说明。

 要终止一个进程首先要知道它的PID,这就需要用到上面介绍过的ps命令。例如,用户的xterm突然停止响应

了,无法接受用户的输入,也无法关闭,可以进行如下操作。

# (1)找到xterm对应的进程的PID

$ ps aux | grep xterm

osmond 1621 0.0 1.3 6980 1704 tty1 S Aug01 0:01 [xterm]

osmond 1920 0.0 1.9 6772 2544 tty1 S 00:41 0:00 [xterm]

osmond 1921 0.0 0.5 3528 664 pts/1 R 00:41 0:00 grep xterm

# (2)杀死进程

$ kill 1621

 可以看到用户共启动了两个xterm,可以通过两个xterm启动的先后顺序来判断哪个进程对应的是要杀死的

 xterm,因为先启动的进程的PID总是要小于后启动的进程的PID。默认情况下,kill命令发送给进程的终止信

 号是15,有些进程会不理会这个信号,这时可以用信号9来强制杀死进程,信号9是不会被忽略的强制执行信

 号。例如,如果上面的命令没有能够杀死xterm,可以用信号9来结束它。

$ kill -9 1621

killall 命令

 用户也可以用killall命令来杀死进程,和kill命令不同的是,在killall命令后面指定的是要杀死的进程的命令名

 称,而不是PID;和kill命令相同的是,用户也可以指定发送给进程的终止信号。

信号 数值 用途

SIGHUP 1 从终端上发出的结束信号

SIGINT 2 从键盘上发出的中断信号(ctrl+c)

SIGQUT 3 从键盘上发出的退出信号(ctrl+\)

SIGFPE 8 浮点异常(如:被0除)

SIGKILL 9 结束接受信号的进程(强行杀死进程)

SIGTERM 15 kill命令默认的终止信号

SIGCHLD 17 子进程中止或结束的信号

SIGSTOP 19 从键盘来执行的信号(ctrl+d)

# 例如,要删除所有 apache 进程,可以用如下命令:

# killall -9 apache

# 发送给进程的终止信号可以是信号的号码,也可以用信号的名称。

 由于killall使用进程名称而不是PID,所以所有的同名进程都将被杀死。


pkill -kill -t pts/0 踢除pts/0用户



vi/vim

光标控制命令

命令                        光标移动

h或^h                    向左移一个字符

j或^j或^n                向下移一行

k或^p                    向上移一行

l或空格                     向右移一个字符

G                        移到文件的最后一行

nG                       移到文件的第n行

w                        移到下一个字的开头

W                        移到下一个字的开头,忽略标点符号

b                        移到前一个字的开头

B                        移到前一个字的开头,忽略标点符号

L                        移到屏幕的最后一行

M                        移到屏幕的中间一行

H                        移到屏幕的第一行

e                        移到下一个字的结尾

E                        移到下一个字的结尾,忽略标点符号

(                        移到句子的开头

)                        移到句子的结尾

{                        移到段落的开头

}                        移到下一个段落的开头

0或|                     移到当前行的第一列

n|                       移到当前行的第n列

^                        移到当前行的第一个非空字符

$                        移到当前行的最后一个字符

+或return                移到下一行的第一个字符

-                        移到前一行的第一个非空字符

 

在vi中添加文本

命令                         插入动作

a                        在光标后插入文本

A                        在当前行插入文本

i                        在光标前插入文本

I                        在当前行前插入文本

o                        在当前行的下边插入新行

O                        在当前行的上边插入新行

:r file                  读入文件file内容,并插在当前行后

:nr file                 读入文件file内容,并插在第n行后

escape                   回到命令模式

^v char                  插入时忽略char的指定意义,这是为了插入特殊字符

 

在vi中删除文本

命令                         删除操作

x                        删除光标处的字符,可以在x前加上需要删除的字符数目

nx                       从当前光标处往后删除n个字符

X                        删除光标前的字符,可以在X前加上需要删除的字符数目

nX                       从当前光标处往前删除n个字符

dw                       删至下一个字的开头

ndw                      从当前光标处往后删除n个字

dG                       删除行,直到文件结束

dd                       删除整行

ndd                      从当前行开始往后删除

db                       删除光标前面的字

ndb                      从当前行开始往前删除n字

:n,md                    从第m行开始往前删除n行

d或d$                    从光标处删除到行尾

dcursor_command          删除至光标命令处,如dG将从当产胆行删除至文件的末尾

^h或backspace            插入时,删除前面的字符

^w                       插入时,删除前面的字

 

修改vi文本

每个命令前面的数字表示该命令重复的次数

命令                         替换操作

rchar                    用char替换当前字符

R text escape            用text替换当前字符直到换下Esc键

stext escape             用text代替当前字符

S或cctext escape         用text代替整行

cwtext escape            将当前字改为text

Ctext escape             将当前行余下的改为text

cG escape                修改至文件的末尾

ccursor_cmd text escape  从当前位置处到光标命令位置处都改为text

 

在vi中查找与替换

命令                         查找与替换操作

/text                    在文件中向前查找text

?text                    在文件中向后查找text

n                        在同一方向重复查找

N                        在相反方向重复查找

ftext                    在当前行向前查找text

Ftext                    在当前行向后查找text

ttext                    在当前行向前查找text,并将光标定位在text的第一个字符

Ttext                    在当前行向后查找text,并将光标定位在text的第一个字符

:set ic                  查找时忽略大小写

:set noic                查找时对大小写敏感

:s/oldtext/newtext       用newtext替换oldtext

:m,ns/oldtext/newtext    在m行通过n,用newtext替换oldtext

&                        重复最后的:s命令

:g/text1/s/text2/text3   查找包含text1的行,用text3替换text2

:g/text/command          在所有包含text的行运行command所表示的命令

:v/text/command          在所有不包含text的行运行command所表示的命令

 

在vi中复制文本

命令                         复制操作

yy                       将当前行的内容放入临时缓冲区

nyy                      将n行的内容放入临时缓冲区

p                        将临时缓冲区中的文本放入光标后

P                        将临时缓冲区中的文本放入光标前

dsfsd "(a-z)nyy          复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

"(a-z)ndd                删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

"(a-z)p                  将名字为圆括号的可命名缓冲区的内容放入当前行后

"(a-z)P                  将名字为圆括号的可命名缓冲区的内容放入当前行前

 

在vi中撤消与重复

命令                         撤消操作

u                        撤消最后一次修改

U                        撤消当前行的所有修改

.                        重复最后一次修改

,                        以相反的方向重复前面的f、F、t或T查找命令

;                        重复前面的f、F、t或T查找命令

"np                      取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9)

n                        重复前面的/或?查找命令

N                        以相反方向重复前面的/或?命令

 

保存文本和退出vi

命令                         保存和/或退出操作

:w                       保存文件但不退出vi

:w file                  将修改保存在file中但不退出vi

:wq或ZZ或:x              保存文件并退出vi

:q!                      不保存文件,退出vi

:e!                      放弃所有修改,从上次保存文件开始再编辑

 

vi中的选项

选项                         作用

:set all                 打印所有选项

:set nooption            关闭option选项

:set nu                  每行前打印行号

:set showmode            显示是输入模式还是替换模式

:set noic                查找时忽略大小写

:set list                显示制表符(^I)和行尾符号

:set ts=8                为文本输入设置tab stops

:set window=n            设置文本窗口显示n行

 

vi的状态

选项                         作用

:.=                      打印当前行的行号

:=                       打印文件中的行数

^g                       显示文件名、当前的行号、文件的总行数和文件位置的百分比

:l                       使用字母"l"来显示许多的特殊字符,如制表符和换行符

 

在文本中定位段落和放置标记

选项                         作用

{                        在第一列插入{来定义一个段落

[[                       回到段落的开头处

]]                       向前移到下一个段落的开头处

m(a-z)                   用一个字母来标记当前位置,如用mz表示标记z

'(a-z)                   将光标移动到指定的标记,如用'z表示移动到z

 

在vi中连接行

选项                         作用

J                        将下一行连接到当前行的末尾

nJ                       连接后面n行

 

光标放置与屏幕调整

选项                         作用

H                        将光标移动到屏幕的顶行

nH                       将光标移动到屏幕顶行下的第n行

M                        将光标移动到屏幕的中间

L                        将光标移动到屏幕的底行

nL                       将光标移动到屏幕底行上的第n行

^e(ctrl+e)               将屏幕上滚一行

^y                       将屏幕下滚一行

^u                       将屏幕上滚半页

^d                       将屏幕下滚半页

^b                       将屏幕上滚一页

^f                       将屏幕下滚一页

^l                       重绘屏幕

z-return                 将当前行置为屏幕的顶行

nz-return                将当前行下的第n行置为屏幕的顶行

z.                       将当前行置为屏幕的中央

nz.                      将当前行上的第n行置为屏幕的中央

z-                       将当前行置为屏幕的底行

nz-                      将当前行上的第n行置为屏幕的底行

 

vi中的shell转义命令

选项                         作用

:!command                执行shell的command命令,如:!ls

:!!                      执行前一个shell命令

:r!command               读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容

:w!command               将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all

:cd directory            将当前工作目录更改为directory所表示的目录

:sh                      将启动一个子shell,使用^d(ctrl+d)返回vi

:so file                 在shell程序file中读入和执行命令

 

vi中的宏与缩写

(避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键)

选项                         作用

:map key command_seq     定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本

:map                     在状态行显示所有已定义的宏

:umap key                删除该键的宏

:ab string1 string2      定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2

:ab                      显示所有缩写

:una string              取消string的缩写

 

在vi中缩进文本

选项                         作用

^i(ctrl+i)或tab          插入文本时,插入移动的宽度,移动宽度是事先定义好的

:set ai                  打开自动缩进

:set sw=n                将移动宽度设置为n个字符

n<<                      使n行都向左移动一个宽度

n>>                      使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度


Linux系统安全加固 

2012-05-01 20:41:19     我来说两句       

收藏    我要投稿 

 去年8月,某所网站遭黑客攻击瘫痪虽然港交所随后及时启用备用系统,但还是致使7支股票1支债卷被迫停牌,次日再次遭受攻击而瘫痪;在去年年底继CSDN信息安全出现之后,网上更是传出包括人人网等多家公司的用户被公开,日益凸显的网络安全事件说明了目前基础网络还面临着诸多威胁,木马僵尸网络终端恶意软件, 跨境化网络攻击都是直接威胁。因此,确保系统安全变得尤为重要,接下来在具体介绍Linux系统的安全性之前,首先介绍一些信息安全的基础知识,这些基础知识看似枯燥,但对于今后加固Linux系统,保证系统安全运行尤为重要。


  

 一、Linux的安全机制

     近年来,Linux系统由于其出色的性能和稳定性、开放源代码的灵活性和可扩展性,以及较低廉的成本,而受到计算机工业界的广泛关注和应用。在安全性方面,Linux内核提供了经典的Unix自主访问控制(root用户、用户ID安全机制), 以及部分支持了POSIX.1e标准草案中的Capabilities安全机制。自主访问控制(Discretionary Access Control,DAC)是指主体对客体的访问权限是由客体的属主或超级用户决定的,而且此权限一旦确定,将作为以后判断主体对客体是否有及有什么权限的惟一依据。只有客体的属主或超级用户才有权更改这些权限。传统Linux系统提供DAC支持,客体在Linux系统当中主要是指文件、目录等系统资源,主体是指访问这些资源的用户或进程。控制粒度为客体的拥有者、属组和其他人。下面就这样模型的三个要素,即客体(文件)、主体(文件)和访问权限一一介绍。

 1.文件系统及访问权限

     Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主惟一的注册名。对文件的控制取决于文件主或超级用户(root)。文件或目录的创建者对所创建的文件或目录拥有特别使用权,文件的所有关系是可以改变的,文件或目录的所有权可以转让给其它用户,但只有文件主或root用户才有权改变文件的所有关系。

    文件的所有权标志是用户ID(UID)。chown命今可以更改某个文件或目录的所有权。例如,超级用户把自己的一个文件拷贝给用户cg,为了让用户cg能够存取这个文件,超级用户(root)应该把这个文件的属主设为cg,否则,用户cg就无法存取这个文件。

 chown命令的语法格式如下:

 chown [cfhvR] 用户 或 组[文件1] [文件2]....

     用户可以是用户名或用户ID。文件是以空格分开的、要改变权限的文件列表,可以用通配符表示文件名。如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限。

     在Linux下,每个文件又同时属于一个用户组。当创建一个文件或目录时,系统就会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。文件用户组关系的标志是GID。文件的GID只能由文件主或超级用户(root)来修改。chgrp命令可以改变文件或目录的拥有者或所属群组,其语法格式如下:

 chgrp  [cfhRv]  group文件名或目录

 其中,group是用户组ID;文件名是以空格分开的,它支持通配符。

     Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问及操作。访问权限规定三种不同类型的用户,即文件主(owner)、同组用户(group)、可以访问系统的其它用户(others)。访问权限规定三种访问文件或目录的方式,即读 (r)、写 (w)、可执行 (x)。

     对于文件,读权限(r)表示只允许指定用户读其内容,而禁止对其做任何的更改操作。将所访问的文件内容作为输入的命令需要有读的权限,例如命令more、head、cat等。写权限(w)表示允许指定用户打开并修改文件,例如命令cp、vi、mv等。执行权限(x)允许指定用户将该文件作为一个程序执行。可以使用“ls -l”查看一个文件的详细属性。

 # ls -l /etc/passwd        

 -rw-r--r-- 1 root root 1606 Aug 25 20:10 /etc/passwd

   对于目录,读权限(r)可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许Shell使用文件扩展名字符列出相匹配的文件名。写权限(w)表示允许从目录中删除或添加新的文件,通常只有目录主才有写权限。执行权限(x)允许在目录中查找,并能用cd命令将工作目录改到该目录。使用“ls - ld”命令可以查看一个目录的详细属性。

 # ls -ld /var

 drwxr-xr-x 14 root root 360 Aug 25 20:30 /var

 二、用户和账号管理

     Linux是一个多用户系统,因此对用户的管理是系统管理的基本组成部分。安装Linux的用户很可能就是该系统的管理员,也就是权限最高的root。通过对用户的管理,分清了用户之间的责、权、利,保证了系统安全。对于如何添加和删除一个用户等常规的管理,这里就不再赘述了,下面重点介绍一下同用户管理关系密切的几个配置文件。

 1. /etc/passwd文件

   用“ls -l”命令可以看到该文件属主是root用户,只有root用户能对该文件进行写操作,其它用户只能进行读的操作。

 /etc/passwd文件当中以行为单位,每行是一个记录保存一个用户的信息,参数之间用冒号隔开,用cat可以查看其内容。

 # cat /etc/passwd

 at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash

 bin:x:1:1:bin:/bin:/bin/bash

 cyrus:x:96:12:User for cyrus-imapd:/usr/lib/cyrus:/bin/bash

 daemon:x:2:2:Daemon:/sbin:/bin/bash

 dhcpd:x:102:65534:DHCP server daemon:/var/lib/dhcp:/bin/false

 ftp:x:40:49:FTP account:/srv/ftp:/bin/bash

 games:x:12:100:Games account:/var/games:/bin/bash

 gdm:x:50:106:Gnome Display Manager daemon:/var/lib/gdm:/bin/false

 sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin

 notes:x:500:500::/home/notes:/bin/bash

 ....................

 上面代码

 ◆   第一列是用户名;

 ◆   第二列是用户的密码;

 ◆   第三列是用户的数字ID,即用户的UID;

 ◆   第四列是用户的主组的ID,即用户的GID;

 ◆   第五列是用户的全名,或者是注释;

 ◆   第六列是用户主目录的位置,这个目录通常位于/home目录下, 目录名与用户ID 相同;第七列是用户的默认控制台Shell。

 注意,在上面的文件当中,所有用户的Password列是一个“x”,但这并不是说用户的密码是x 。这是因为早期的Unix系统密码是以一个强度比较弱的加密手段将密码加密后, 以文本的形式存储在这个文件中。现在已经很少有人再这样做了。Linux系统采取的解决的方法是,在/etc/passwd文件中存放密码的位置只是存放一个“x”,而经过加密的密码存放于/etc/shadow文件中。这项技术通过将用户信息与密码数据分离而提高了安全性。并且采用了强度更高的加密算法来保存密码。一个映像密码条目的样例如下所示:

 # cat /etc/shadow

 at:!:15200:0:99999:7:::

 bin:*:15200::::::

 cyrus:!:15200:0:99999:7:::

 daemon:*:15200::::::

 dhcpd:!:15200:0:99999:7:::

 ftp:*:15200::::::

 .......

 news:*:15200::::::

 nobody:*:15200::::::

 ntp:!:15200:0:99999:7:::

 postfix:!:15200:0:99999:7:::

 root:$2a$05$KXPwlTHjhgw4w0nY07zHx.6RlOpdmudzlRh6LfUp2tvjwyGglHP5y:15200::::::

 sshd:!:15200:0:99999:7:::

  

 2./etc/shadow 文件 www.2cto.com

 /etc/shadow的格式与/etc/passwd类似,由若干个字段组成,字段之间用“:” 隔开,这些字段格式如下:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间;不活动时间:失效时间:标志每个字段含义如下:

 ◆登录名是与/etc/passwd文件中的登录名相一致的用户账号。

 ◆ 口令字段存放的是加密后的用户口令字。如果为空,则对应用户没有口令,登录时不需要口令;

 ◆ 最后一次修改时间表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。

 ◆ 最小时间间隔指的是两次修改口令之间所需的最小天数。

 ◆ 最大时间间隔指的是口令保持有效的最大天数。

 ◆警告时间字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。

 ◆ 不活动时间表示的是用户没有登录活动但账号仍能保持有效的最大天数。

 ◆ 失效时间字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

 3.系统审计

 Linux的日志文件用来记录整个操作系统使用状况,他们是黑客攻击的重点目标,所以作为一个Linux网络系统管理员要充分用好以下几个日志文件。

 ◆/var/log/lastlog文件

 记录最后进入系统的用户信息,包括登录的时间、登录是否成功等信息。这样用户登录后只要用lastlog命令查看一下/var/log/lastlog文件中记录的所用账号的最后登录时间,再与自己的用机记录对比一下就可以发现该账号是否被黑客盗用。

 可以用以下命令查看其空间占用情况

 #du -h /var/log/lastlog

 有时候需要清空,使用以下命令

 #cat /dev/null >; /var/log/lastlog

 ◆/var/log/secure文件

 记录系统自开通以来所有用户的登录时间和地点,可以给系统管理员提供更多的参考。

 ◆/var/log/wtmp文件

 记录当前和历史上登录到系统的用户的登录时间、地点和注销时间等信息。用last命令可以查看,若想清除系统登录信息,只需删除这个文件,系统会生成新的登录信息。

 用以下命令查看

 #last -f /var/log/wtmp

 以上几个文件都是由系统的klogd和syslogd守护进程进程记录的。通常klogd用来记录系统内核所产生的日志信息,也就是工作在系统内核态的进程所产生的日子记录; 而syslogd用来记录工作在用户态的进程的日志信息,这些程序包括用户进程、网络服务器进程和多数的系统守护进程。因此,对于管理人员而言,通过及时检查syslogd记录的信息能够发现绝大多数的系统异常情况。

     下面介绍一下syslogd进程的记录格式和配置方法。syslogd负责发送、记录系统内核及工具所产生的信息。整个机制由系统调用syslog()、系统守护进程syslogd,以及配置文件/etc/syslog.conf共同组成。当系统内核及工具产生信息时,通过调用syslog(),把信息送往syslogd,它再根据/etc/syslog.conf中的配置要求,、将这些信息分别做如下处理:

 ◆   ?     记录到系统日志中;

 ◆   ?     输出到系统控制台上;

 ◆   ?     转发给指定的用户;

 ◆   ?     通过网络转发给其它主机上的syslogd。

 通过配置syslog.conf,可以灵活地对信息的发送和保存进行控制。

 sys1ogd进程在系统启动时由/etc/rc.d/rc2.d/S12syslog

 启动。如果需要手工启动或停止syslogd,可以使用下面命令:

 # /etc/rc.d/init.d/syslog start | stop

 # cat /etc/syslog.conf

 # Log all kernel messages to the console.

 # Logging much else clutters up the screen.

 #kern.*                                            /dev/console

 # Log anything (except mail)of level info or higher.

 # Don't log private authentication messages!

 *.info;mail.none;authpriv.none;cron.none                /var/log/messages

 # The authpriv file has restricted access.

 authpriv.*                                          /var/log/secure

 # Log all the mail messages in one place.

 mail.*                                             /var/log/maillog

 # Log cron stuff

 cron.*                                             /var/log/cron

 # Everybody gets emergency messages

 *.emerg                                                 *

 # Save news errors of level crit and higher in a special file.

 uucp,news.crit                                          /var/log/spooler

 # Save boot messages also to boot.log

 local7.*                                                /var/log/boot.log

  

 /etc/syslog.conf文件中的一项配置记录由“选项”(Selector)和“动作”(Action)两个部分组成,两者间用Tab制表符进行分隔。而“选项” 又由一个或多个形如“类型.级别”格式的保留字段组合而成,各保留字段问用分号分隔。

 保留字段中的“类型” 代表信息产生的源头,可以是如下字段:

 kern   由Kernel产生的信息。

 user   由用户进程产生的信息,对那些由程序或不在此列出的工具产生的信息,其缺省类型都是“user”。

 mail  邮件系统产生的信息。

 daemon 系统守护进程的信息,如in.ftpd、telnetd。

 auth  由login、su、getty等进行身份认证时产生的信息

 syslog 由syslogd内部产生的信息。

 lpr   行打印spooling系统的信息。

 news USENET网络新闻系统的信息。

 uucp UUCP系统信息。

 cron 和at工具信息。

 local  0-7 保留为local使用。

 mark syslogd 内部产生的时间戳信息。

 *    为通配符,表示除mark之外的所有其它类型(此符号不可用以代表所有级别)。

 保留字段中的“级别” 代表信息的重要性,可以是下面字段:

 emerg 紧急,处于Panic状态,通常应广播到所有用户。

 alert  告警,当前状态必须立即进行纠正,例如系统数据库崩溃。

 crit   关键状态的警告。

 err   表示其它错误。

 warning 警告。

 notice 非错误状态的报告,但应特别处理。

 info  通报信息。

 debug 调试程序时的信息。

 none 通常调试程序时用,指示带有none级别的类型产生的信息无需送出,例如“*.debug;mail.none”表示调试时除邮件信

 息外其它信息都送出。

  “动作”域指示信息发送的目的地,可以是如下参数:

 /filename 日志文件,由绝对路径指出的文件名,此文件必须事先建立。

 @host 远程主机。

 userl,user2 指定用户,如果指定用户已登录,那么他们将收到信息。

 *   表示所有用户, 已登录的用户都将收到信息。

 下面来看一看Linux下的一个实例/etc/syslog.conf文件:

 ..............

 *.err;kern.debug;daemon.notece;mail.crit /var/adm/messages

 ..............

 上面这行中的“action”就是大家关心的/var/adm/messages文件,输出到它的信息源头“selector”为*.err表

 示所有的一般错误信息;kern.debug 表示核心产生的调试信息;daemon.notice表示守护进程的注意信息;mail.crit表示邮件系统的关键警告信息。

 了解了syslog.conf格式之后,再来看/var/adm/messages中所记录的日志信息:

 .....

 Nov l4 l 8:59:05 host sshd(pam_unix)[2l9l3]:authentication failure ; logname= uid=0 euid=0

 tty=NODEVssh ruser= rhost=202.21.60.5 user=root

 Aug 25 1:13:01 host syslogd 1.5.1:restart.

 .....

    由上可以看到每行记录都按照日期、时间、主机名、进程名、进程的PID,以及来自该进程的消息中间用空格分割。两条记录分别记录了一次失败的root登录和一次syslogd进程的重起。系统会使用newsyslog定期检查syslog输出的messages 文件和maillog文件,将旧数据压缩保存为备份文件。

 4.其它日志

     除了系统登录记录和syslog记录之外,在FreeBsd系统里,使用自己的记录方式。系统每天都会自动检查系统的安全设置, 包括对SetUID、SetGID的执行文件的检查,其结果将输出到/var/log/setuid.today文件中,管理员可以与/var/log/security.yesterday文件对比,寻找系统安全设置的变化。

     在系统启动的时候,就将内核的检测信息输出到屏幕上,这些信息可以帮助用户分析系统中的硬件状态。一般使用dmesg命令来查看最后一次启动时输出的这个检测信息,这些信息被系统保存在/var/log/dmesg文件中。

 #cat /var/log/dmesg |more

 Linux version 2.6.18-92.el5 (brewbuilder@hs20-bc2-3.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-41))#1 SMP Tue Apr 29 13:16:1

 2 EDT 2008

 BIOS-provided physical RAM map:

  BIOS-e820: 0000000000000000 - 000000000009f800 (usable)

  BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)

  BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved)

  BIOS-e820: 00000000000dc000 - 00000000000e4000 (reserved)

  BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)

 ............................

 此外,各种Shell还会记录用户使用的命令历史,使用用户主目录下的文件来记录这些命令历史,通常这个文件的名字为.bash-history或.history (csh)等。

     本文讲主介绍了Linux系统的基本安全机制、Linux系统如何对用户和文件进行访问权限的设置,以及linux的日志系统,这些都是一些基本的系统管理和安全管理的知识,希望读者能结合系统的运维工作,从中受到启发,更好的把工作做好。