Linux用户管理详解(中)
在我的上一篇
《Linux中用户管理详解(上)》
我们已经明白通过命令
useradd
每创建一个用户都会在相应的配置文件中添加相关的信息和创建用户的宿主目录。其实今天要和大家说的是和用户相关的
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 �C 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 �Cr 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 �Ce 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:
我们会创建组了,但是如何将用户添加到相应的组呢?一般有以下几种情况?
Linux用户管理详解(下)
我们已经可以通过创建不同的用户来防止其他人使用自己的账号,之后每个账户对应一个单独的用户密码,构成了一个基本的用户管理思路。为了方便管理还可以使用组来设置相同属性的用户。那么设置这些到底是为了什么呢?今天就揭开它的面纱。
Linux
系统是一个典型的多用户操作系统,不同的用户处于不同的地位,为了保护系统的安全性,
linux
系统对于不同用户访问同一个文件或目录做了不同的访问权限控制。
我们是否还记得查看文件权限的命令,为了便于大家理解首先我创建如下所示文件和目录并查看相应的权限。
[user@qiuri ~]$ mkdir qiuri
[user@qiuri ~]$ touch xifeng
[user@qiuri ~]$ ls -l
总计
4
drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[user@qiuri ~]$
我们拿
qiuri
这个目录分析一下输出的结果的含义,首先将它从左边开始分为
7
个部分,如下图所示:
第一个部分:文件类型和文件权限,其中第一个字符是文件的类型标志,后
9
个为权限标志。通过第一位确认文件属于那种类型。说道文件类型在
Windows
中,常见的文件类型有
file.txt
、
file.doc
、
file.mp3
等,根据文件的后缀名判断该文件的类型,在
Linux
中,一个文件主要看他是否能够执行与后缀没有太大的关系,主要看文件的属性有关。
在
linux
中常见的文件类型有:
“―”表示普通文件,例如:
[root@qiuri ~]# ls -l install.log
-rw-r--r-- 1 root root 41727 07-13 02:56 install.log
输出的第一个标志位是“
-
”,这样的文件在
Linux
中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具
... ....
或
cp
工具等。这类文件的删除方式是用
rm
命令。
“
d
”表示目录,例如:
[root@qiuri ~]# ls -l /root
总计
84
-rw------- 1 root root 882 07-13 02:56 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 07-13 03:18 Desktop
-rw-r--r-- 1 root root 41727 07-13 02:56 install.log
-rw-r--r-- 1 root root 4182 07-13 02:50 install.log.syslog
-rw-r--r-- 1 root root 209 07-13 03:14 scsrun.log
“
b
”表示块设备文件,例如:
[root@qiuri ~]# ls -l /dev/sda
brw-r----- 1 root disk 8, 0 07-13 05:57 /dev/sda
“
c
”表示字符设备文件
[root@qiuri ~]# ls -l /dev/tty
crw-rw-rw- 1 root tty 5, 0 07-13 05:58 /dev/tty
“
l
”
表示符号链接
[root@qiuri ~]# ls -l /etc/rc.local
lrwxrwxrwx 1 root root 13 07-13 02:09 /etc/rc.local -> rc.d/rc.local
查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。这和Windows 操作系统中的快捷方式有点相似。一般链接有两种:硬连接和符号链接。
首先我们要明白,在
Linux
系统中每一个存储设备(硬盘、
U
盘),格式化后,分为
Inode
和
Block
两个部分。内核为每一个新建的文件分配一个
Inode(
索引结点
),
每个文件都有一个惟一的
inode
号。文件属性(文件的所有者、存取模式、类型、创建或修改时间、文件真正内容的指向等)保存在索引结点里,在访问文件时,索引结点值被复制到内存中,快速找到真正内容指向(
pointer)
指向数据内容放置的区块(
Block)
之中,从而实现文件快速的找到该文件。
硬链接是直接指向索引结点(
Inode)
的指针,系统不会重新分配给它新的
Inode
。但是创建时需注意:链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。默认情况下,
ln
名称创建的便是硬链接。命令格式:
ln source
(源文件名)dist
(目的文件名)
例如:
[user@qiuri ~]$ ls -il #查看文件属性并显示文件lnode号
total 4
354552 drwxrwxr-x 2 user user 4096 07-13 17:34 qiuri
354553 -rw-rw-r-- 1 user user 0 07-13 17:34 xifeng
[user@qiuri ~]$ ln xifeng qiurixifeng #创建文件xifeng的硬链接qiurixifeng
[user@qiuri ~]$ ls -il #验证结果,结果表明创建硬链接系统没有分配新的lndoe
total 4
354552 drwxrwxr-x 2 user user 4096 07-13 17:34 qiuri
354553 -rw-rw-r-- 2 user user 0 07-13 17:34 qiurixifeng
354553 -rw-rw-r-- 2 user user 0 07-13 17:34 xifeng
[user@qiuri ~]$ ln qiuri qiurixifeng #创建目录qiuri的硬链接,提示不允许硬链接指向目录
ln: `qiuri': hard link not allowed for directory
[user@qiuri ~]$
例如:
[root@qiuri ~]# ln -s /home/user/qiuri qiuri #给root用户创建符号链接qiuri,链接到/home/user/qiuri
[root@qiuri ~]# ln -s /home/user/xifeng xifeng #创建符号链接xifeng,提示“文件已存在”的错误信息。
ln: creating symbolic link `xifeng' to `/home/user/xifeng': File exists
[root@qiuri ~]# ls -l #查看一下当前目录下的文件,发现当前目录下已存在一个同名文件。
total 80
-rw------- 1 root root 882 Jul 13 02:56 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 Jul 13 03:18 Desktop
-rw-r--r-- 1 root root 41727 Jul 13 02:56 install.log
-rw-r--r-- 1 root root 4182 Jul 13 02:50 install.log.syslog
lrwxrwxrwx 1 root root 16 Jul 13 17:48 qiuri -> /home/user/qiuri
-rw-r--r-- 1 root root 209 Jul 13 03:14 scsrun.log
-rw-r--r-- 1 root root 0 Jul 11 07:51 xifeng
[root@qiuri ~]# ln -sf /home/user/xifeng xifeng
#我们可以使用-f选项忽略目标文件的存在并强制做链接文件。
[root@qiuri ~]# ls -li #验证结果,发现创建成功。
total 80
580109 -rw------- 1 root root 882 Jul 13 02:56 anaconda-ks.cfg
128925 drwxr-xr-x 2 root root 4096 Jul 13 03:18 Desktop
1031170 -rw-r--r-- 1 root root 41727 Jul 13 02:56 install.log
1031171 -rw-r--r-- 1 root root 4182 Jul 13 02:50 install.log.syslog
1031178 lrwxrwxrwx 1 root root 16 Jul 13 17:48 qiuri -> /home/user/qiuri
580110 -rw-r--r-- 1 root root 209 Jul 13 03:14 scsrun.log
1031176 lrwxrwxrwx 1 root root 17 Jul 13 17:53 xifeng -> /home/user/xifeng
[root@qiuri ~]#
对文件类型有了一个了解之后,我们接着说文件权限,linux文件的权限标志位共九个,分为3组,分别代表文件拥有者的权限,文件所属用户组的权限和其它用户的权限,如下图所示:
Linux 文件的权限有三种:
²
可读(
r)
:意味着我们可以查看阅读;
²
可写(
w)
:意味着,可以修改
或删除(不过删除或修改
的权限受父目录上的权限控制);
²
可执行(
x)
:意味着如果是文件就可以运行,比如二进制文件(比如命令),或脚本(要用脚本语言解释器来解释运行)。
如果权限位不可读、不可写、不可执行,是用“
-
”来表示。对于目录来说,执行(
x)
权限表示可以使用
cd
命令进入该目录,可以读出该目录下的文件的内容。如果某用户对目录只有读取权限,而没有执行权限,那么该用户只能使用
ls
命令列出目录下的文件,而不能读取该目录内的文件。
当一个文件的权限不符合我们使用的要求我们可以使用命令chmod来设置和改变,改变目录和文件权限的方法有两种,一种是通过八进制的语法,另一种是助记语法。
八进制的语法使用数字表示各个权限分别是r(4)、w(2)、x(1)、-(0)。例如目录qiuri的权限如何使用八进制来表示:
drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri
属主的权限用数字表达:属主的那三个权限位的数字加起来的总和。比如上面的例子中属主的权限是rwx ,也就是4+2+1 ,应该是7;
属组的权限用数字表达:属组的那个权限位数字的相加的总和。比如上面的例子中的rwx ,也就是4+2+1 ,应该是7;
其它用户的权限数字表达:其它用户权限位的数字相加的总和。比如上面例子中是 r-x ,也就是4+0+1,应该是5;
也就是说,如果使用八进制数来表示该文件的权限,应该是
775
。
明白了数值表示权限的方法,例如将目录
qiuri
的权限修改为:属主对目录
qiuri
有可读可写可执行权限,属组和其他人有可读和可执行权限。
[root@qiuri ~]# ls -l #修改前查看一下
total 4
drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[root@qiuri ~]#chmod 755 qiuri #修改权限为755
[root@qiuri ~]# ls -l #修改后验证
total 4
drwxr-xr-x 2 user user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[root@qiuri ~]#chmod �CR 755 qiuri
助记语法中将属主(user)
使用u
表示、属组(group)
使用g
表示、其它用户(other)
使用o
来表示,而所有人(all)
使用a
来表示。使用“
+
”来表示添加权限、“-”表示减少权限、“
=
”表示授予的权限。当然使用r、w、x来表示权限。在使用的时候,可以组合使用。例如:
[root@qiuri tmp]# touch xifeng #
创建空文件
[root@qiuri tmp]# chmod u+x xifeng #
给文件的拥有者添加执行权限
[root@qiuri tmp]# chmod go-r xifeng #
给文件的属组和其它用户减去读取权限
[root@qiuri tmp]# chmod a-rwx xifeng #
所有人都拒绝访问
[root@qiuri tmp]# chmod a+rw xifeng #
所有人都具有读写权限
[root@qiuri tmp]# chmod o=rw #其它人的权限为读写
注意:每修改一次,别忘了使用
ls -l
命令查看权限的变化。
第二个部分:硬链接数
一般文件创建硬链接的时候这个数值会发生变化。
第三个部分:文件的属主,就是说这个文件是那个用户的。这里是
user
用户的目录。我们可以通过
chown
来修改文件或文件夹的所有者。例如:
[root@qiuri ~]# ls -l /home/user #修改前查看一下属性
total 4
drwxrwxr-x 2 user user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[root@qiuri ~]#chown root /home/user/qiuri #使用命令修改属主
[root@qiuri ~]# ls -l /home/user #验证修改结果
Total 4
drwxrwxr-x 2 root user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
第四个部分:文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是
user
用户组。可以通过命令
chgrp
修改文件或文件夹组用户。例如:
[root@qiuri ~]# ls -l /home/user #修改前查看一下属性
total 4
drwxrwxr-x 2 root user 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[root@qiuri ~]#chgrp root /home/user/qiuri
#修改文件属组,同理如果想修改当前目录和子目录的话,使用选项-R。
[root@qiuri ~]# ls -l /home/user #验证结果
total 4
drwxrwxr-x 2 root root 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
第五个部分:文件的大小,这里是
4096
个字节。
第六个部分:创建或修改时间,这里是
7
月
13
号
15
:
17
。这个值的变化和修改或访问文件有关。
第七个部分:文件或目录的名称。这里是
qiuri
这个目录。
另外我们在修改文件的属主和属组的时候可以使用一下命令同时修改:
[root@qiuri ~]# ls -l /home/user #修改前查看一下属性
total 4
drwxrwxr-x 2 root root 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 user user 0 07-13 15:17 xifeng
[root@qiuri ~]#chown root.root /home/user/xifeng
#同时修改文件的属主和属组,如果想修改目录和子目录下的所有文件属性使用选项-R。
[root@qiuri ~]# ls -l /home/user #验证结果
total 4
drwxrwxr-x 2 root root 4096 07-13 15:17 qiuri
-rw-rw-r-- 1 root root 0 07-13 15:17 xifeng
如果想同时修改目录和子目录中所有文件的权限执行如下命令:
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 �Cg
来更新组的名称,这里我们将
test
用户从
qiuri
组更改到
xifeng
组。命令格式:
uermod �Cg 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 �CG
命令来实现。注意:这条命令执行的前提条件是确认该用户是否存在,也就是说是将已有用户添加到相应的组。命令格式:
usermod �CG 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 �Ca 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 �Cl修改用户名称,命令格式如下:
usermod �Cl 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 ~]#
|