在
Linux
系统中,所有的用户和组像一个国家。如果国家要繁荣昌盛的话,需要治理得当,需要有主席或者总统,以及地方官员和老百姓组成。在
linux
中如果你对安全需求比较苛刻,完全可以限制用户的各种行为,不同用户的权限是不同的。
在
linux
中系统中,它并不认识帐号名称。它认识的是我们的帐号
ID
,帐号
ID
保存在
/etc/passwd
文件中。我们在登录
linux
主机时,在输入完帐号和密码时,
linux
会先查找
/etc/passwd
文件中是否有这个帐号,如果没有则跳出,如果有的话,他会读取该帐号的
user ID
和
group ID
同时该帐号的根目录和
shell
也读了出来。然后在去核对密码表,在
/etc/shadow
中找出我们刚刚输入的帐号和
userID,
核对我们输入密码是否正确。一切正确我们可以登录到当前用户
shell
。那么,我们首先了解一下用户帐号文件。
1./etc/passwd我们使用more查看一下这个文件
我们首先看第一行
root
这一行,一共有七项,每一项使用:分开,他们代表的意思如下:
帐号名称:帐号名称由于对应用户
ID
,这个是系统默认用户
root
超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的
linux
系统而定,一般是
8
位。
密码:由于系统中还有一个
/etc/shadow
文件用于存放加密后的口令,所以在这里这一项是“
x
”来表示,如果用户没有设置口令,则该项为空。
如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。
用户
ID:
这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户ID有以下几种:
0
代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户
ID
改为
0
即可。
1-500
系统预留的
ID
,
500
以上是普通用户使用。
组
ID:
其实这个和用户ID差不多,用来规范群组,他与/etc/group有关。
描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。一般常见的是用户全名信息。-
用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。
root
用户默认的是
/root
,普通用户的是
/home/
用户名。
用户登录
shell:
就是用户登录系统时使用的shell,关于shell我们会在以后专门的研究一下。
通常我们可以使用vi编辑这个文件,也可以使用vipw命令对/etc/passwd对这个用户帐户文件进行编辑,使用的编辑器是vi。
2./etc/shadow
在早期的
unix
操作系统中,用户的帐号信息和口令信息都保存在
passwd
文件中,尽管系统已经对口令进行了加密,并且以密文的方式保存在
passwd
文件中,但是由于
passwd
文件对于系统中的所有用户是可读的,口令比较容易破解,存在较大的安全隐患。现在使用“
shadow
”文件保存密文的用户口令,使用
passwd
文件保存用户帐号其它信息。“
shadow
”文件只有管理员用户才可以读取其中的内容。由于这个文件可能被破解,所以一定不要将该文件内容泄露给他人,保证系统安全。
同样,我们还是分析第一行,一共有九项,分别说明一下:
帐户名称:和
passwd
对应,和
passwd
的意思相同。
密码:这才是真正的密码,并且已经加密过了,只能看到一些特殊符号。需要注意的是这些密码很难破解,但是不等于不能。还有密码栏的第一个字符为“
*
”表示这个用户不用来登录,如果那个用户不想让他登录了,可以在他前面加个星;第一个字符为“!”号表示该用户被禁用,一般新创建的账号后还未设置密码该账号就是禁用状态,使用“!!”表示;第一个字符为“空”的话,代表该用户没有口令,登录时不需要口令。
上次改动密码的日期:这段记录了改动密码的最后日期,为什么是
13798
呢?这是因为
linux
计算日期的方法是以
1970
年
1
月
1
日
作为
1
,
1971
年
1
月
1
日
就是
366
,依次类推到我修改密码的日期表示为
13798
了。
密码不可被改动的天数:这个字段代表要经过多久才可以更改密码。如果是“0”代表密码可以随时更改。
密码需要重新更改天数:由于害怕密码被人盗取而危害到整个系统的安全,所以安排了这个字段,你必须在这个时间内重新修改密码,否则这个帐号将暂时失效。上面的99999,表示密码不需要重新输入,最好设定一段时间修改密码。确保系统安全。
密码变更期期限快到前的警告期:当帐号的密码失效期限快到时,系统依据这个字段的设定发出警告,提醒用户“再过
n
天您的密码将过期,请尽快重新设定密码。默认的是七天。
帐号失效期:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有向管理员反映,让帐号重新启用,那么这个帐号将暂时失效。
帐号取消日期:这个日期跟第三个字段一样,都是使用
1970
年以来的日期设定方法。这个字段表示:这个帐号在此字段规定的日期之后将无法再使用。这个字段通常用于收费服务系统中,可以规定一个日期让该帐号不能再使用。
保留:最后一个字段是保留的,看以后有没有新功能加入。
3. /etc/group查看一下这个文件
我们还是分析第一行,一共有四项,依次为:
群组名称:就是群组的名称了。
群组密码:通常不需设定,因为我们很少使用群组登录。不过这个密码也被记录在
/etc/shadow
中了。
群组ID
:也就是组
ID
了。
支持帐号的名称:这个群组的所有帐号。如果你想让用户
qiuri
也属于
root
这个群组,就在第一行最后加上“,
qiuri
”注意添加的时候没有空格。
通常我们使用vi编辑这个文件,也可以使用vigr这个命令编辑,等同于使用vi /etc/group编辑。
4. adduser添加用户
如果没有特殊的要求,通常我们使用
adduser
用户名称直接创建用户帐号。例如我们创建
qiuri
帐户:
由于一般新创建的帐号都会在刚才我们说的三个文件的最后一行添加一行内容,我们验证一下:
我们使用这条命令是通过
/etc/login.defs
和
/etc/default/useradd
这两个默认帐号设定文件来实现创建用户时用户的基本设置的。
/etc/login.defs
文件内容如下:
/etc/default/useradd
文件内容如下:
这个文件中我们有必要了解一下,
SKEL
这个选项,用户的根目录内容是从
/etc/skel
这个目录下复制过去的。在手动添加用户的时候有用。查看一下这个目录下的内容:
这条命令还有好多的参数举例几个,供大家参考一下:
adduser [-u uid][-g group][-d home][-s shell]
-u:直接给出userID -g:直接给出GID
-d:直接将根目录建立在已存在目录 -s:定义shell
5.passwd设置用户密码
默认的情况下,在添加完用户后并没有设置用户的密码,因此建立的用户帐号即使存在也不能登陆系统。需要使用
passwd
命令对用户帐号设置密码才可以用于登陆系统。这条命令分为管理员给用户修改密码和用户自己登录系统自己修改密码。
管理员
root
给用户修改密码,例如:创建用户
qiuri
,然后设置密码
管理员给用户设置密码以命令passwd [用户名]来设置密码,在输入密码的过程中为了避免输入错误,将连续输入两次。如果两次输入的密码相同,表示输入的密码正确,同时将密码以加密的方式保存到了shadow文件中。设置完以后我们可以使用用户qiuri登录。qiuri用户自己修改一下密码:
其实今天要和大家说的是和用户相关的linux安全问题,在安全中有一种技术人们称它为“后门”技术,其实就是说一些“小黑”,入侵到服务器后得到root权限,最常见的就是添加一个用户方便日后来访。虽然这是一个初级的技术,但是这个能够看出你对/etc/passwd和/etc/shadow文件的熟悉程度。
如果你是黑客的话,入侵到一个系统后,你为了防止管理员修改密码导致你不能登录,而你去修改密码,这不是明摆着要通知管理员他的系统已近被入侵了,所以这个时候可以通过编辑
passwd和
shadow文件来实现如下内容:
[root@qiuri ~]#echo "admin:x:0:0::/usr/src:/bin/bash" >> /etc/passwd
[root@qiuri ~]#echo "admin:*:14143:0:99999:7::: " >> /etc/shadow
通过以上两条命令可以添加一个
UID为
0的具有管理员权限的账户,也可以编辑配置文件手工输入,当然,这里小黑们会尽量的掩盖自己创建的这个账户,首先用户名称一般会选择一个类似系统应用程序的账户,用户的主目录也不会和其它账户一样放在
/home下。总之尽量的逃过哪些粗心的管理员。
当然,还没有设置密码是不能够通过远程可以连接上服务器的,这个时候用
passwd来设置一下:输入要设置的密码,之后查看
/etc/shadow配置文件后密码位已近成为
md5加密的乱码。
[root@qiuri ~]# passwd admin
[root@qiuri ~]# grep admin /etc/shadow
admin:$1$1IoPDSJW$3NxLHwcXeutWT1lIMb4Zy1:14163:0:99999:7:::
这个时候我们可以测试一下登录,这个时候我们没有必要退出后再登录,我们可以使用
su命令切换用户,大家在使用这条命令的时候最常见的问题如下:
[root@qiuri ~]# su admin
bash-3.1#
[root@qiuri ~]# su – admin
bash-3.1#
[root@qiuri ~]# su admin
bash-3.1# pwd
/root
bash-3.1# su - admin
-bash-3.1# pwd
/usr/src
[root@qiuri ~]# ls -al /etc/skel/
total 48
drwxr-xr-x 2 root root 4096 09-18 21:26 .
drwxr-xr-x 94 root root 12288 10-11 20:27 ..
-rw-r--r-- 1 root root 24 2006-07-12 .bash_logout
-rw-r--r-- 1 root root 176 2006-07-12 .bash_profile
-rw-r--r-- 1 root root 124 2006-07-12 .bashrc
[root@qiuri ~]#
那我们就将这些文件复制过去看看:
[root@qiuri ~]# cp -r /etc/skel/.* /usr/src
[root@qiuri ~]# su - admin
[root@qiuri ~]# pwd
/usr/admin
当发现这样的用户,我们需要做的是将其删除,删除用户的命令是
userdel。
1)userdel命令用于删除
linux系统中的用户账号,命令格式如下:
userdel [-r] user_name
一般,在使用这条命令的时候,如果不添加
”-r”的话,不会删除用户的宿主目录,这样就可以保存该用户在系统中的文件,要是想删除的话我们可以手工的去删除该目录。但是你已经确认该宿主目录中的文件可以删除,直接使用
”-r”这样就可以一次性的删除用户操作。
[root@qiuri ~]#userdel –r admin
2)手工删除用户
手工删除一个用户需要执行如下步骤:
从
/etc/passwd、
/etc/shadow、
/etc/group配置文件中删除该用户的相关条目,之后删除该用户的宿主目录。
但是,在我们工作的过程中,为了提高系统的安全性最常用的就是禁用和启用账户。可以使用
usermod命令来禁用账号:
[root@qiuri ~]# grep u1 /etc/shadow #禁用前查看一下
u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::
[root@qiuri ~]# usermod -L u1 #禁用账号
[root@qiuri ~]# grep u1 /etc/shadow #再次查看一下,发现多出一个"!",表明用户已禁用
u1:!$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::
[root@qiuri ~]#
[root@qiuri ~]# usermod -U u1 #重新启用账号
[root@qiuri ~]# grep u1 /etc/shadow #发现"!"已经移除,表明用户已启用
u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7:::
[root@qiuri ~]#
从上边的操作可以看出
usermod命令禁用和启用账号功能是通过在
/etc/shadow 配置文件中,在用户密码位之前添加和删除"!"实现的。当然也可以使用手工添加或删除"!"来实现效果。
不知道大家还记不记得我在上一篇文章中提到可以通过设置
shadow文件中的“账号失效期”来设置账号的有效期限。这里也可以使用
usermod命令实现,命令格式如下:
usermod –e YYYY-MM-DD name
通过这个命令可以设置用户账号的过期时间,就是说在此日期之前用户账户生效,过了这个日期后用户将禁止登录。设置后如下所示:
[root@qiuri ~]# usermod -e 2008-10-18 u1 #设置账号过期时间
[root@qiuri ~]# grep u1 /etc/shadow #验证结果
u1:$1$66svsu0z$9yg1bwziK2rXvnYiUH9HB1:14163:0:99999:7::14170:
[root@qiuri ~]#
在实际的管理工作中,如果我们一个一个的去管理账号的话,无形中会增加我们大量的管理负担和造成不必要的错误。可以使用“用户组”来解决这些问题。那么什么是“用户组”呢?用户组就是一个具有相同特性的用户集合,在同一个组中的所有用户具有相同的组权限。一般情况下我们使用useradd创建用户的时候会创建和用户同名的用户组,但是有些时候我们需要单独的创建用户组,可以使用groupadd命令实现?命令格式如下:
groupadd [-g gid [-o]] [-r] [-f] group
我们创建一个qiuri组为例:
[root@qiuri ~]# groupadd qiuri #添加用户组
[root@qiuri~]# grep qiuri /etc/group #验证是否创建成功
qiuri:x:501:
如果我们要创建一个xifeng组同时组ID为1000
[root@qiuri ~]# groupadd -g 1000 xifeng #添加组ID为1000的用户组
[root@qiuri ~]# grep xifeng /etc/group #验证结果
xifeng:x:1000:
我们会创建组了,但是如何将用户添加到相应的组呢?一般有以下几种情况?
1) 创建用户的时候指定用户属于那个用户组
例如:我们创建一个
test用户,同时这个用户属于
qiuri组,这个时候系统就不会再建立与用户名同名的用户组账号了。命令格式:
uersadd -g group_name user_name
创建过程:
[root@qiuri ~]# grep qiuri /etc/group #确认用户组qiuri是否存在
qiuri:x:1001:
[root@qiuri ~]# useradd -g qiuri test #将创建用户指定到qiuri组
[root@qiuri ~]# grep test /etc/passwd #查看用户是否创建成功,是否属于组qiuri。
test:x:510:1001::/home/test:/bin/bash
[root@qiuri ~]# grep qiuri /etc/group
qiuri:x:1001:
2)更改用户的用户组
一般什么时候需要更改用户组呢?例如:我们在创建用户的时候忘记指定用户属于那个用户组,这个时候我们执行此命令。可以使用
usermod –g来更新组的名称,这里我们将
test用户从
qiuri组更改到
xifeng组。命令格式:
uermod –g group_name user_name
更改过程:
[root@qiuri ~]# usermod -g xifeng test #更改用户所属于的组
[root@qiuri ~]# grep test /etc/passwd #确认用户组ID是否发生变化
test:x:510:1000::/home/test:/bin/bash
[root@qiuri ~]# grep xifeng /etc/group #确认组ID为1000的组是否是xifeng。
xifeng:x:1000:
[root@qiuri ~]#
一个用户可以同时属于多个组,例如:
test用户同时属于
qiuri和
xifeng组,可以通过
usermod –G命令来实现。注意:这条命令执行的前提条件是确认该用户是否存在,也就是说是将已有用户添加到相应的组。命令格式:
usermod –G group_name user_name
方法一、添加过程:
[root@qiuri ~]# usermod -G qiuri test #让用户test同时属于qiuri组
[root@qiuri ~]# grep test /etc/passwd #查看一下用户配置文件,无变化
test:x:510:1000::/home/test:/bin/bash
[root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group
#查看一下用户组配置文件中关于xifeng和qiuri组。个人认为使用groups test命令查看更方便些。
xifeng:x:1000:
qiuri:x:1001:test
[root@qiuri ~]#
或者使用
gpasswd命令,命令格式如下:
gpasswd –a user_name group_name
方法二、添加过程:
[root@qiuri ~]# gpasswd -a test qiuri #让用户test同时属于qiuri组
Adding user test to group qiuri
[root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group #验证结果
xifeng:x:1000:
qiuri:x:1001:test
[root@qiuri ~]# grep test /etc/passwd
test:x:510:1000::/home/test:/bin/bash
[root@qiuri ~]#
当我们需要修改组的名称的时候可以使用groupmod -n实现,命令格式:
groupmod -n new_group_name old_ group_name
例如:将组
qiuri更改为
qiurixifeng
[root@qiuri ~]# groupmod -n qiurixifeng qiuri #修改组名称
[root@qiuri ~]# grep qiuri /etc/group #确认结果
qiurixifeng:x:1001:test
[root@qiuri ~]#
和组名称对应的就是用户名称,我们可以
usermod –l修改用户名称,命令格式如下:
usermod –l new_user_name old_ user_name
[root@qiuri ~]# usermod -l qiuri test
#修改用户名称
[root@qiuri ~]# grep qiuri /etc/passwd
#验证结果
qiuri:x:501:501::/home/test:/bin/bash
最后要介绍删除组的命令
groupdel,命令格式如下:
groupdel group_name
[root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group #查看一下qiuri和xifeng组是否存在
qiuri:x:1001:
xifeng:x:1000:
[root@qiuri ~]# groupdel qiuri #删除qiuri组
[root@qiuri ~]# groupdel xifeng #删除xifeng组
[root@qiuri ~]# egrep 'qiuri|xifeng' /etc/group #确认结果
[root@qiuri ~]#