Linux ----用户管理

目录

为什么要学习用户管理

怎样登录Linux主机

认识/etc/passwd文件与/etc/shadow文件

增加用户useradd

建立默认账号

userdel

groupadd添加群组

groupdel删除群组

修改用户账号

密码管理与设定:passwd

用户身份切换

su

sudo和visudo

用户查询

id     查看用户的UID,GID及所拥有的群组;

finger       查看用户的一些相关信息,如电话号码等的说明文字;

手动添加用户

一般用户账号


  1. 为什么要学习用户管理

Linux的用户管理和组管理是Linux安全管理的重要组成部分,特别是Linux的各种服务器在具体应用(如Web、DNS、Samba、邮件、FTP等服务器,及防火墙)中都会涉及到系统安全、用户管理。而管理员的工作中相当重要的一环就是管理账户,因为整个系统都由管理员管理,并且所有用户的申请都必须通过管理员的协助,所以必须了解如何管理好一个网站的账号。

  1. 怎样登录Linux主机

当我们在主机前或以telnet或ssh登录主机时,系统显示一个登录界面让你输入账号,在输入账号与密码之后,Linux会:

    1. 先查找/etc/passwd中是否有账号,如果没有则退出,如果有则将账号对应的UID(User ID)与GID(Group ID)读出来。另外,该账号的根目录与Shell设定也一并读出。
    2. 然后核对密码表。这时Linux会进入/etc/shadow中找出对应的账号与UID,然后核对你刚刚输入的密码与密码是否相符。
    3. 一切妥当之后,进入Shell

大致情况如此。所以,在要登录你的Linux主机时,系统必须读取/etc/passwd和/etc/shadow。

  1. 认识/etc/passwd文件与/etc/shadow文件

这两个文件可以说是Linux中最重要的文件之一,如果没有这两个文件,你无法登录Linux。

  1. passwd的构造:在这个文件中,每一行代表一个账号,有几行就代表在你的系统中有几个账号。不过需要特别注意的是,其中很多账号本来就是系统必要的(如:bin,daemon,adm,nobody等),不要随意删除它们。

/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。

  1. shadow的构造

/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年以来的日期设定方法。表示这个账号在此字段规定的日期之后将无法再使用。这个字段通常用在收费服务系统中,您可以规定一个日期让该账号不能再使用。

第九项:保留,最后一个字段是保留的,看以后有没有新功能加入。

  1. 另自己认识一下/etc/group与/etc/gshadow文件(群组账号与群组密码,因为经常会对账号进行分组) 
  2. 4用户管理的基本操作

在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些由系统本身创建的特殊用户,它们具有特殊的意义。其中最重要的是超级用户,默认为root。

在Linux中管理员可以添加用户、修改用户设置、删除用户、添加组以及删除组。修改用户包括修改用户的组信息、附加组、用户的shell类型、用户的口令等信息。

  1. 增加用户useradd

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     //以自己的设定建立账号

这个指令能够改变的文件很多,包括下面的文件:

    • /etc/passwd
    • /etc/shadow
    • /etc/group
    • /etc/gshadow
    • /etc/skel
    • /etc/default/useradd
    • /etc/login.defs

建立默认账号

建立默认账号时,如果没有特殊要求,通常我们使用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中。

  1. userdel

#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的时机通常是你真的确定不让该用户在主机上使用任何数据。

  1. groupadd添加群组

新增加用户时,如果该用户所属的群组不存在,则先新增加群组,再新增用户账号。当然,如果要删除群组,则必须反过来,先删除用户才能删除群组。这点请大家注意。

#groupadd  [-g GID]groupname            //-g GID表示自行设定GID的大小

如:#groupadd –g 55 testing                  //设定一个群组,GID为55,名称为testing

这个指令用于添加群组,作用到的文件只有/etc/group与/etc/gshadow,其实,你也可以直接修改这两个文件,根本不需要使用这个指令,使用Vi修改上面两个文件更简单。

  1. groupdel删除群组

#groupdel  groupname                  //直接删除群组名为groupname的群组

  1. 修改用户账号

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

⑦ 禁用用户账号:如果只是想暂时禁止某个账号,可以使用下列方法:

    • 使用无效的shell。例如使用usermod  –s  /bin/false  username
    • 使该账号过期。如果使用影子口令,可以使用usermod  -e  MM/DD/YY  username命令
    • 如果想禁止所有账号(root账号当然除外)的访问,可以创建一个名为/etc/nologin的文件,说明系统暂时不允许访问
    • 使用usermod  -L  username,锁定用户。
  1. 密码管理与设定:passwd

再提一下重要的密码概念。要特别注意的是,你的主机若是遭到入侵,对方第一个入侵点就是你主机上账号的密码,所以,如果你的密码定义比较严格,对方自然不容易猜到密码,系统的安全性自然有所提高。

目前,一些黑客较常使用的密码破解软件大多是“字典攻击法”及所谓的“暴力攻击法”,顾名思义,字典攻击法是将字典里查得到的任何单词或词组都输入到程序中,然后使用该程序逐个尝试破解你的密码。

密码设定最好含有字符,数字,特殊字符的组合,长度至少为6~8个字符以上,这样不易猜,即使是猜也要花很大代价的。

修改密码使用passwd命令。这里给大家提供几个重要信息:

      1. 如何寻找passwd指令?

使用which passwd即可。

      1. 如何查看passwd这个文件的属性?并说明它的属性。

使用ls –l `which passwd`即可,它具有SUID的属性。

      1. 什么是SUID?

就是该程序在执行过程中,具有程序拥有者的权限。

      1. 如何查询/etc/passwd与usr/bin/passwd的用法与架构?

分别使用man  passwd及 man5  passwd

 这个指令可以修改用户的密码。要注意的是,这个指令在/bin/passwd中,而账号存放的地方在/etc/passwd中,二者是不一样的两个地方。

      1. 一般用户直接输入passwd即可。
      2. root可以使用passwd  [username]替username账号设置一个新的密码。
  1. 用户身份切换

怎样变换身份?一般而言,我们都不希望以root身份登录主机,以避免被黑客入侵,但是一台主机又不可能完全不进行修改或设定动作,这时如何将一般用户变成root呢?主要有两种方式:

      1. 以su直接将身份变成root。这个指令需要root的密码,也就是说,如果你要以su变成root,你的一般用户必须有root的密码。
      2. 如果多人同时管理一台主机,那么,root的密码就有很多人知道了,这样不好。所以,不想将root密码透露出去,可以使用sudo。
    1. su

语法:#su

举例:#su

password:                                //在此输入root密码就可以切换成root用户,但系统环境变量还是登录用户时的环境。如果经常使用某个一般用户登录又切换到root的情况下,可以将这个用户的系统环境设置和root一样。这样切换时少了很多麻烦事。

    1. sudo和visudo

语法: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可以用sudo来执行root的命令 。

xag     ALL=(ALL) ALL                                

# Uncomment to allow people in group wheel to run all commands

//也可以将#去掉,使wheel群组中的用户可以用sudo来执行root的命令 。

# %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的命令的权力。

  1. 用户查询

知道了UID,GID及与账号有关的一些信息之后,我们看看如何知道用户的UID与GID,以及他们所属的群组。可以直接到/etc/passwd及/etc/group中查看,但还有更简单的方法,就是使用简单的指令工具。如下:

  1. id     查看用户的UID,GID及所拥有的群组;

语法:#id  [username]

直接输入id就可以知道当前账号的UID,GID与所属的群组。当然,如果想知道某个用户的相关信息,直接使用id  username,例如,id  xag可以知道test用户的相关信息,不需要查看/etc/passwd及/etc/group。

  1. finger       查看用户的一些相关信息,如电话号码等的说明文字;

语法:#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.

  1. groups    查看用户能够支持的群组;

直接输入groups就可以显示当前用户所属的群组。

  1. 手动添加用户

我们已经知道如何新增账号与删除或修改账号,现在,假设你今天要新增的是数字账号,那么,是否可以使用useradd指令新增账号呢?例如:

#useradd  1234567

很抱歉,useradd不允许这样的账号设定。所以只能通过修改/etc/passwd及/etc/shadow这几个文件来设定账号。下面介绍手工添加账号的步骤:

    1. 一般用户账号

①先建立需要的群组(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,GID为520 。

1234:x:520:1234 

建立1234的各个属性

#vi  /etc/passwd

//建立各个属性。

1234:x:520:520:username:/home/1234:bin/bash

//将passwd的资料转入/etc/shadow。

同步/etc/passwd与/etc/shadow

#pwconv

建立密码

#passwd  1234

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值