赞
踩
目录
finger 查看用户的一些相关信息,如电话号码等的说明文字;
Linux的用户管理和组管理是Linux安全管理的重要组成部分,特别是Linux的各种服务器在具体应用(如Web、DNS、Samba、邮件、FTP等服务器,及防火墙)中都会涉及到系统安全、用户管理。而管理员的工作中相当重要的一环就是管理账户,因为整个系统都由管理员管理,并且所有用户的申请都必须通过管理员的协助,所以必须了解如何管理好一个网站的账号。
当我们在主机前或以telnet或ssh登录主机时,系统显示一个登录界面让你输入账号,在输入账号与密码之后,Linux会:
大致情况如此。所以,在要登录你的Linux主机时,系统必须读取/etc/passwd和/etc/shadow。
这两个文件可以说是Linux中最重要的文件之一,如果没有这两个文件,你无法登录Linux。
/etc/passwd的部分行如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/sh
daemon:x:2:2:daemon:/sbin:/bin/sh
…
test:x:501:501:test user:/home/test:/bin/bash
先来看一下root这一行,每一行用“:”符号分隔各项,共有七项,分别是:
root | x | 0 | 0 | root | /root | /bin/bash |
一 | 二 | 三 | 四 | 五 | 六 | 七 |
第一项:账号名,用于对应UID,例如root就是默认的系统管理员的账号名。
第二项:密码,数据放在/etc/shadow这个加密文件中。
第三项:UID,就是用户识别码(ID),通常Linux对于UID有几个限制,如下:
0 | 系统管理员。所以当你要设立另一个系统管理员账号时,将该账号的UID改成0即可 |
1~500 | 系统预留的ID。其实,1~65535之间账号并没有什么不同,也就是说,除了0之外,其他UID并没有不一样,预设1~500给系统作为保留账号只是一个习惯。这样的好外是,以为了自己定义账号时避免与系统的几个特殊账号重的UID而带来一些问题。 |
500~65535 | 供一般用户使用 |
第四项:GID,它与/etc/group有关,每一个用户必须属于一个群组,用来作群组识别码(ID)。
第五项:说明,这个字段基本上没有什么用途,只是服务业解释这个账号的意义。
第六项:用户根目录,root用户根目录为/root,一般用户根目录中/home/username
第七项:Shell,可以指定用户登录系统后所使用的Shell,默认为/bin/bash,有一个shell可以让账号无法登录,那就是/bin/false。
/etc/shadow的部分行如下:
root:$1$XkigRT1lfgw4rhrm5NwQN:13555:0:99999:7:::
bin:*:11979:0:99999:7:::
…
同样以“:”作为分隔符,共有9个字段,分别说明如下:
root | $1$XkigRT1lfgw4rhrm5NwQN | 13556 | 0 | 99999 | 7 | |||
一 | 二 | 三 | 四 | 五 | 六 | 七 | 八 | 九 |
第一项:账号名,这与passwd相对应,意义也一样。
第二项:密码,这才是真正的密码,而且是经过加密的密码,你只能看到一些特殊符号。需要特别留意的是,虽然这些加密密码很难破解,但是很难不等于不会,所以,这个文件的默认属性是-rw-------,只有root才可以读写。注意,不要改变这个文件的属性,另外,如果密码样的第一个字符为“*”,表示这个账号不会被用来登录。所以万一有天你的某个用户不乖时,可以先在这个文件中将他的密码多加一个“*”,这样他就无法使用该账号了。
注意事项:密码忘记或者被更改了,怎么办?
有时候会发生这样的情况,你忘记的root的密码,怎么办?重新安装?另外,有时候是被入侵了,root密码被人更改了,该如何是好?这时就必须使用/etc/shadow。密码是存在这个文件中,所以只要你能够以软盘启动,进入单人维护系统。就可以不用输入密码就以root身份登录(通常在boot:时输入linux single就可以)。然后进入/etc/shadow文件中,将root的密码这一栏全部清空,然后再次登录Linux,这时root将不需要密码(有时候需要输入空格符)就可以登录了。此时请赶快以passwd设定root密码。
或者见:ftp://192.168.3.222上的“技术文档”中的“忘记root密码怎么办?”一文。
第三项:上次更改密码的日期:这个字段记录了更改密码的最后日期。计算Linux日期的方法是以1970年1月1日作为1,日期是累加的,指经过的天数。因此2007年2月12日就是:13556。
第四项:密码不可被更改的天数,该字段记录了这个账号的密码需要经过几天才可以变更。如果是0,表示密码随时可以更改。这个限制是为了怕密码被某些人一改再改。如果设定为20天,当你设定了密码之后,20天之内都无法改变这个密码。
第五项:密码需要重新变更的天数,必须在这个时间内重新设定密码,否则这个账号将会暂时失效。如果象上面的99999,那就表示密码不需要重新设定。不过,为了安全,最好设定一段时间之后严格要求用户变更密码。
第六项:密码变更期限快到前的警告期,当账号的密码失效期限快到的时候,系统依据这个字段的设定发出警告,提醒用户“再过几天您的密码就要失效,请尽快重新设定您的密码”。
第七项:账号失效期限,如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有跟root反映,让账号重新启用,那么这个账号将暂时失效。
第八项:账号取消日期,这个日期与第三个字段一样,都是使用1970年以来的日期设定方法。表示这个账号在此字段规定的日期之后将无法再使用。这个字段通常用在收费服务系统中,您可以规定一个日期让该账号不能再使用。
第九项:保留,最后一个字段是保留的,看以后有没有新功能加入。
在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些由系统本身创建的特殊用户,它们具有特殊的意义。其中最重要的是超级用户,默认为root。
在Linux中管理员可以添加用户、修改用户设置、删除用户、添加组以及删除组。修改用户包括修改用户的组信息、附加组、用户的shell类型、用户的口令等信息。
useradd [-u UID] [-g GID] [-d HOME][-mM][-s shell] username
参数说明:
-u :直接给出一个UID
-g :直接给出一个GID(此GID必须已经存在于/etc/group中)
-d :直接将其根目录指向已经存在的目录(系统不会再建立)
-m :如果用户目录不存在,则自动创建
-M :不创建用户目录
-s :定义其使用的shell
举例:
#useradd testing //直接以默认数据建立一个名为testing的账号
#useradd –u 720 –g 100 –M –s /bin/bash testing //以自己的设定建立账号
这个指令能够改变的文件很多,包括下面的文件:
建立默认账号时,如果没有特殊要求,通常我们使用useradd username就可以建立一个名为username的账号。不过如何设定默认账号呢?基本设定就在/etc/login.defs与/etc/default/useradd这两个文件中,login.defs中的设定类似如下:
MAIL_DIR /var/spool/mail //邮件默认目录存放处
PASS_MAX_DAYS 99999 //密码需要变更的时间
PASS_MIN_DAYS 0 //密码多久需要变更
PASS_MIN_LEN 5 //密码的最小长度(这个可以改大一些)
PASS_WARN_AGE 7 //密码快要失效之前几天警告信息
UID_MIN 500 //默认账号起算的最小UDI数(最小为500)
UID_MAX 60000 //最大的UDI限制
GID_MIN 500 //默认账号起算的最小GDI数(最小为500)
GID_MAX 60000 //最大的GDI限制
CREATE_HOME yes //是否建立根目录,默认要建立根目录(如果你不想让用户具有根目录,可以选择no)
useradd的内容如下:
GROUP=100 //默认用户群组为100,查看/etc/group时,这个群组名为user
HOME=/home //默认用户的根目录建立的目录
INACTIVE=-1 //是否启动,为-1时表示启动
EXPIRE= //是否设定到期时间。如果你希望该用户到期后就不许登录,此项可以设定天数
SHELL=/bin/bash //默认shell是什么
SKEL=/etc/skel //用户根目录的内容
在上面这些项中,我们最需要了解的是SKEL。当你建立一个名为testing的账号时,默认根目录是/home/testing,而这个目录的内容是由/etc/skel复制过去的。所以当你想让用户的默认根目录内容更改时,可以直接将要更改的数据写在/etc/skel中。
#userdel [-r] username //删除账号,-r表示将该账号的[home directory]与[/var/spool/mail/username]一并删除
举例:
#userdel testing //只删除该账号的/etc/passwd与/etc/shadow中该账号的内容
#userdel -r testing //连同该账号的/home/testing与/var/spool/mail/testing一起删除
输入这个指令时要小心,我们要移除一个账号,可以手动取消/etc/passwd与/etc/shadow中的该账号。一般而言,如果该账号只是暂时不启用,那么将/etc/shadow中倒数第一个字段设为0就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来。使用userdel的时机通常是你真的确定不让该用户在主机上使用任何数据。
新增加用户时,如果该用户所属的群组不存在,则先新增加群组,再新增用户账号。当然,如果要删除群组,则必须反过来,先删除用户才能删除群组。这点请大家注意。
#groupadd [-g GID]groupname //-g GID表示自行设定GID的大小
如:#groupadd –g 55 testing //设定一个群组,GID为55,名称为testing
这个指令用于添加群组,作用到的文件只有/etc/group与/etc/gshadow,其实,你也可以直接修改这两个文件,根本不需要使用这个指令,使用Vi修改上面两个文件更简单。
#groupdel groupname //直接删除群组名为groupname的群组
usermod命令的大多数选项与useradd命令相同,下表说明usermod命令特有的选项:
选项 | 意义 |
-l login_name | 将用户的账号名更改为login_name。其他属性不变。特别的,用户目录名应该也会跟着更改成与新用户名同名的目录 |
-p passwd | 指定加密后的口令值,它是使用crypt命令加密后的结果 |
-L | 锁定用户的口令,这将在加密的口令之前加一个感叹号(!),它有效禁用了口令,它不能与-p或者-U一起使用 |
-U | 解锁用户的口令,这将在加密的口令之前去掉一个感叹号!,它也不能与-p或者-L一起使用 |
① 修改密码:普通用户可以用passwd修改自己的密码,只有管理员root才能用passwd username为其他用户修改密码。
② 修改用户shell设置:chsh命令可以修改自己的shell,只有管理员才能用chsh username为其他用户修改shell设置。(注意:指定的shell必须是列入/etc/shells文件中的shell,否则该用户将不能登录。)
用户可以使用usermod命令修改shell信息,命令如下:
#usermod –s [new_shell_path] username //其中new_shell_path和username应取相应的值。
例:将用户xag的shell改为csh。命令如下:
#usermod -s /bin/csh xag
③ 修改主目录:#usermod -d [new_home_directory] username
将用户xag的主目录更改为/home/xag,命令如下:
#usermod -d /home/xag xag
如果想将现在的主目录的主要内容转移到新的目录,应该使用-m选项,如下所示:
# usermod -d /new_home -m username
④ 修改UID:#usermod -u UID username
该用户主目录中所有拥有的文件和目录都将自动修改UID设置。但是,对于主目录外所拥有的文件,只能手工用chown命令修改所有权设置。
⑤ 修改默认组设置:#usermod -g GID username
⑥ 修改账号的有效期:如果使用了影子口令,则可以使用如下命令来修改一个账号的有效期:
#usermod -e MM/DD/YY username
例如:把用户xag的有效期定为12/31/07,命令如下:
#usermod -e 12/31/07 xag
⑦ 禁用用户账号:如果只是想暂时禁止某个账号,可以使用下列方法:
再提一下重要的密码概念。要特别注意的是,你的主机若是遭到入侵,对方第一个入侵点就是你主机上账号的密码,所以,如果你的密码定义比较严格,对方自然不容易猜到密码,系统的安全性自然有所提高。
目前,一些黑客较常使用的密码破解软件大多是“字典攻击法”及所谓的“暴力攻击法”,顾名思义,字典攻击法是将字典里查得到的任何单词或词组都输入到程序中,然后使用该程序逐个尝试破解你的密码。
密码设定最好含有字符,数字,特殊字符的组合,长度至少为6~8个字符以上,这样不易猜,即使是猜也要花很大代价的。
修改密码使用passwd命令。这里给大家提供几个重要信息:
使用which passwd即可。
使用ls –l `which passwd`即可,它具有SUID的属性。
就是该程序在执行过程中,具有程序拥有者的权限。
分别使用man passwd及 man5 passwd
这个指令可以修改用户的密码。要注意的是,这个指令在/bin/passwd中,而账号存放的地方在/etc/passwd中,二者是不一样的两个地方。
怎样变换身份?一般而言,我们都不希望以root身份登录主机,以避免被黑客入侵,但是一台主机又不可能完全不进行修改或设定动作,这时如何将一般用户变成root呢?主要有两种方式:
语法:#su
举例:#su
password: //在此输入root密码就可以切换成root用户,但系统环境变量还是登录用户时的环境。如果经常使用某个一般用户登录又切换到root的情况下,可以将这个用户的系统环境设置和root一样。这样切换时少了很多麻烦事。
语法:sudo [-u username] [command]
说明:
-u:将身份变成username的身份
举例:
$ sudo mkdir /root/testing //一般用户在root目录下建一个目录,本来是没有权限的
passwd: //输入一般用户密码
#sudo -u xag touch xag.txt //root可以执行test用户的指令,建立xag.txt的文件,建立的文件的拥有者和组都是xag用户和xag用户所在组
在默认情况下,只有root才能使用sudo,这对于一般用户来说,作用不大,因为一般用户是想用sudo变成root身份没关系,可以使用visudo编辑/etc/sudoers文件。在默认情况下,使用visudo才能编辑/etc/sudoers这个文件,此外,编辑者的身份必须时root。如何编辑?在默认情况下,我们先将希望可以执行root动作的人的group设为wheel,然后:
#visudo
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
|
xag ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
|
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
这是/etc/sudoers文件中的内容,可以通过编辑以上两行使一般用户(不属于wheel组)和wheel组中的用户拥有使用sudo来执行root的命令的权力。
知道了UID,GID及与账号有关的一些信息之后,我们看看如何知道用户的UID与GID,以及他们所属的群组。可以直接到/etc/passwd及/etc/group中查看,但还有更简单的方法,就是使用简单的指令工具。如下:
语法:#id [username]
直接输入id就可以知道当前账号的UID,GID与所属的群组。当然,如果想知道某个用户的相关信息,直接使用id username,例如,id xag可以知道test用户的相关信息,不需要查看/etc/passwd及/etc/group。
语法:#finger [-s] username
说明:-s 为完事列出
举例:
# finger xag
Login: xag Name: (null)
Directory: /home/xag Shell: /bin/bash
On since Thu May 31 11:48 (CST) on pts/1 from 192.168.3.114
18 minutes 12 seconds idle
No mail.
No Plan.
直接输入groups就可以显示当前用户所属的群组。
我们已经知道如何新增账号与删除或修改账号,现在,假设你今天要新增的是数字账号,那么,是否可以使用useradd指令新增账号呢?例如:
#useradd 1234567
很抱歉,useradd不允许这样的账号设定。所以只能通过修改/etc/passwd及/etc/shadow这几个文件来设定账号。下面介绍手工添加账号的步骤:
①先建立需要的群组(vi /etc/group)
②建立账号的各个属性(vi /etc/passwd)
③将passwd与shadow同步(pwconv)
④建立该账号的密码(passwd username)
⑤建立用户根目录(cp -r /etc/skel /home/username)
⑥更改根目录属性(chown -R username.group /home/username)
下面举例:新增一个1234群组与账号
建立新的群组1234,设其GID为520
#vi /etc/group
…
|
1234:x:520:1234
建立1234的各个属性
#vi /etc/passwd
…
|
1234:x:520:520:username:/home/1234:bin/bash
|
同步/etc/passwd与/etc/shadow
#pwconv
建立密码
#passwd 1234
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。