码迷,mamicode.com
首页 > 系统相关 > 详细

linux用户与组管理

时间:2015-10-07 06:25:18      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:用户   useradd   sudo      groupadd   

     linux安全系统的核心是用户账户,每个使用者使用一个账户名及与该账户关联的密码登入linux系统。使用者对系统资源的访问权限取决于其登录时所用的账户。

     每个账户在创建时会被分配一个惟一的标识UID,用户权限便是根据UID来跟踪的。每个账户可以选择加入某些个群组以方便统一管理,每个群组也对应一个惟一标识GID。所有账户名、UID、GID等信息都保存于/etc/passwd文件中,所有群组信息都保存于/etc/group文件中,而账户密码则以加密方式保存于/etc/shadow中


一、/etc/{passwd,shadow,group}解析

     1、/etc/passwd

         该文件存放着与所有用户相关的信息,每行包含7个字段,其格式为:

              用户名:密码占位符:UID:基本组GID:注释信息:家目录:shell

         例 wittgenstein:x:500:500:wittgenstein:/home/wittgenstein:/bin/bash

         1)第二字段是以x表示的密码占位符,因/etc/passwd默认是对所有用户开放读权限的,为安全起见,实际密码是存放于只有管理员能访问的/etc/shadow文件中的。

[root@localhost ~]# ls -l /etc/{passwd,shadow}
-rw-r--r-- 1 root root 1594 Oct  5 13:00 /etc/passwd
---------- 1 root root 1032 Oct  5 13:00 /etc/shadow

         2)系统账户默认的shell为/sbin/nologin,这是一个无法登入主机的特殊shell,系统用户不需也不宜取得shell交互环境。其它用户默认为/bin/bash

     2、/etc/shadow

         该文件以加密的方式存放着各用户的密码,每行9个字段,其格式为:

              用户名:加密的密码:最近一次修改密码的时间:密码最短使用期限:密码最长使用期限:密码过期警告区间:非活动期限:账号过期期限:保留字段

         例 wittgenstein:$6$dHcMR77ZSJgbb...:16652:0:99999:7:::

         1)密码是以加密方式存放的,还未创建密码的新用户该字段用!!表示

         2)密码最短使用期限,意即在此期限内密码不可更改。如果是0,则表示可随时改动

         3)密码最长使用期限,意即在此期限内密码必须更改,逾期密码会变成过期属性

         3)密码过期警告区间,意即密码过期后的宽限时间

     3、/etc/group

         该文件存放着与群组相关的信息,每行4个字段,其格式为:

              群组名:群组密码占位符:GID:群组支持的用户名

         例 wittgenstein:x:500:davinci,tesla

         1)群组密码实际存放于/etc/gshadow中,通常不需设定

         2)最后一个字段实质上是以该群组为附加组的用户列表,以该群组为基本组的用户名不会自动被添加到此处。

         将用户加入群组的方法

              a.在使用useradd或usermod命令时,指定-g或-G选项将其加入某个群组

              b.直接编辑/etc/group文件,在目标群组行的末尾添加用户名,用户名之间以逗号相隔


二、用户管理

     1、用户分类

         linux用户由一个管理员账户(root)以及若干系统用户和普通用户组成。通常,三类用户被分配的UID是:root为0,系统用户为(1-499),普通用户为500+。root用户的家目录为/root,普通用户的家目录默认为/home/username系统用户默认不会主动建立家目录.

         root用户拥有几乎一切权限,能够操作各种系统资源及控制其它用户的创建、删除、权限等。为安全起见,linux服务器上每个在后台运行的服务都对应一个系统账户,这样即使攻击者攻破某个服务,也无法访问整个系统。


     2、useradd:创建用户

        用法:useradd [-u UID] [-g 基本组GID/群组名] [-G 附加组GID/群组名]... username

        其它常用选项:

             -c:加上注释,注释会保存于/etc/passwd文件的注释段中

             -d:指定家目录,若指定目录已存在,会有警告信息

             -s SHELL:指定shell,必须是/etc/shells中存在的shell,默认为/bin/bash

             -m:自动建立用户家目录(默认)

             -M:不给用户创建家目录

             -e:指定用户的过期日期,格式为YYYY-MM-DD,此设定值会被写入shadow文件第8段

             -f:指定账户过期几天后永久停权,设定值为0表示立即停权,为-1则表示关闭此功能,默认为-1。设定值会被写入shadow文件第7段

         可指定多个附加组,以逗号相隔

         使用示例:useradd -u 505 -g wittgenstein -G 502,davinci tesla

         注意:在useradd中指定群组时不能指定当前并不存在的群组;每个用户必对应一个基本组(但一个群组可作为多个用户的基本组),无论是随用户一起创建还是指定的,但用户可以选择是否加入或加入哪些附加组         

         当我们不指定任何选项,以预设方式useradd username创建用户时:

              1)该用户的UID为当前最大UID加1,并且会创建一个群组名与用户名相同的基本组,其GID默认与UID相同,但若该GID已存在,则会在当前最大GID基础上加1

              2)在/etc/passwd里会新建一行与该用户相关的信息,包括用户名、UID、GID、shell等

              3)在/etc/shadow里会新建一行与该用户密码相关的参数,此时还没有密码,需要使用passwd命令创建密码后才会生成

              4)在/etc/group里会新建一行群组名同用户名的群组信息(若创建用户时指定其基本组为已存在的群组,则不会新建)

              5)在/home下面会建立一个名为username权限为700的家目录,即只有该用户自己与管理员能够进入该目录。

[root@localhost ~]# useradd tesla
[root@localhost ~]# tail -2 /etc/passwd
wittgenstein:x:500:500:wittgenstein:/home/wittgenstein:/bin/bash
tesla:x:501:501::/home/tesla:/bin/bash
[root@localhost ~]# groupadd sience
[root@localhost ~]# groupadd -g 505 movie
[root@localhost ~]# tail -3 /etc/group
tesla:x:501:
sience:x:502:
movie:x:505:
[root@localhost ~]# useradd -c super davinci
[root@localhost ~]# tail -2 /etc/passwd
tesla:x:501:501::/home/tesla:/bin/bash
davinci:x:502:506:super:/home/davinci:/bin/bash
[root@localhost ~]# useradd -u 503 -G movie kubrick
[root@localhost ~]# id kubrick
uid=503(kubrick) gid=503(kubrick) groups=503(kubrick),505(movie)


     3、passwd:创建或修改密码

        用法:passwd [option]... [username]

        常用选项:

             -d:删除密码

             -l:lock,锁住密码,只有root用户能执行

             -u:unlock,解锁密码,只有root用户能执行

             --stdin:以管道前的数据作为密码输入,这样就不用交互式进行。例如echo "password" | passwd --stdin username

         注意:passwd命令后带有username参数表示处理其它用户密码,不带则是修改当前用户自己的密码。只有root用户能给其它用户创建密码并执行修改、删除、锁定密码等操作,普通用户只能修改自己的密码

     4、usermod:修改用户信息,但不允许修改正在被使用的账户

        用法:usermod [option]... username

        常用选项:

             -c:修改用户的注释信息,即/etc/passwd文件中第5段内容

             -d:修改用户家目录

             -u:修改UID

             -g:修改基本组

             -G:修改附加组

             -s:修改shell

             -L:锁定密码,使用户无法登录

             -U:解锁密码

             ...   

          例 usermod -L tesla

     5、userdel:删除用户

        用法:userdel [-r] [-f] username

        常用选项:

             -r:与该用户相关的所有资料也一并删除,包括家目录及/etc/{passwd,shadow,group}内的对应信息

             -f:强制删除,即使该用户在线

         例 userdel -r tesla

     6、chage:修改密码的有效期,即/etc/shadow文件中的一些参数

         用法:chage [option]... username

         常用选项:

              -m:密码最短使用期限

              -M:密码过期期限

              -W:密码过期后宽限的天数

              -l:查看当前的设置

              ...

         例 chage -W 10 tesla 

     7、chfn:修改用户的finger信息

         chfn [option]... [username]

         不指定任何选项则进入交互模式,不指定用户名则修改当前用户自身信息

         只有root能够设置所有用户finger信息,其它用户只能设置自身finger信息

[nolan@localhost ~]$ chfn
Changing finger information for nolan.
Password: 
Name []: nolan
Office []: 2046
Office Phone []: 2222
Home Phone []: 3333

Finger information changed.

[nolan@localhost ~]$ finger nolan
Login: nolan          			Name: nolan
Directory: /home/nolan              	Shell: /bin/bash
Office: 2046, x2222			Home Phone: x3333
Never logged in.
No mail.
No Plan.
[nolan@localhost ~]$ chfn -h 8888 #单独修改home phone


三、用户信息的查看

     1、id:显示用户的UID、GID、所属的组

         用法:id [option]... [用户名]

         -u:仅显示UID

         -g:仅显示GID

         -un:仅显示用户名

         -gn:仅显示基本群组名

         不带参数则显示当前用户的UID等信息

[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@localhost ~]# id tesla
uid=502(tesla) gid=502(tesla) groups=502(tesla),501(davinci)
[root@localhost ~]# id -gn  tesla
tesla

      2、who或w:显示当前登录系统的用户信息

[root@localhost ~]# w
 19:07:07 up  7:25,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Wed21    1:51m  0.04s  0.04s -bash
root     pts/0    192.168.30.1     17:17    0.00s  0.24s  0.00s w
tesla    pts/1    192.168.30.1     19:03    3:31   0.00s  0.00s -bash
[root@localhost ~]# who
root     tty1         2015-09-30 21:21
root     pts/0        2015-10-05 17:17 (192.168.30.1)
tesla    pts/1        2015-10-05 19:03 (192.168.30.1)

        3、last:显示用户最近登录信息

         用法:last [option]... [用户名/终端]

         常用选项:

              -n #或-#:指定显示#条记录

              -d:将IP地址转换成主机名

[root@localhost ~]# last -3
tesla    pts/1        192.168.30.1     Mon Oct  5 19:03   still logged in   
tesla    pts/2        192.168.30.1     Mon Oct  5 17:17    gone - no logout 
root     pts/0        192.168.30.1     Mon Oct  5 17:17   still logged in   

wtmp begins Thu Aug  6 05:14:00 2015
[root@localhost ~]# last tesla
tesla    pts/1        192.168.30.1     Mon Oct  5 19:03   still logged in   
tesla    pts/2        192.168.30.1     Mon Oct  5 17:17    gone - no logout 
tesla    pts/2        192.168.30.1     Mon Oct  5 17:16 - 17:16  (00:00)    
...    

wtmp begins Thu Aug  6 05:14:00 2015
[root@localhost ~]# last -3 tty1
root     tty1                          Wed Sep 30 21:21   still logged in   
root     tty1                          Mon Aug 10 13:49 - 21:19 (51+07:30)  
root     tty1                          Mon Aug 10 13:42 - down   (00:04)    

wtmp begins Thu Aug  6 05:14:00 2015

     4、lastlog:显示系统中所有用户最近一次的登录信息

        用法:lastlog  [option]...

        常用选项:

             -u username:显示指定用户的最近一次登录信息

             -t 天数:显示指定天数以内的登录信息

             -b 天数:显示指定天数以前的登录信息

[root@localhost ~]# lastlog
Username         Port     From             Latest
root             pts/0    192.168.30.1     Mon Oct  5 17:17:05 +0800 2015
bin                                        **Never logged in**
daemon                                     **Never logged in**
...
tesla            pts/1    192.168.30.1     Mon Oct  5 19:03:36 +0800 2015

      5、finger:查看用户信息,包括登录信息、真实名称、家目录等;该命令需额外安装

         用法:finger [option]... [本地用户]... [远程用户@主机]

         不指定任何选项和参数则显示本地用户登录信息

         该命令可查看远程主机用户信息,前提是远程主机上已运行finger服务进程

[root@localhost ~]# finger
Login     Name       Tty      Idle  Login Time   Office     Office Phone
root      root       tty1    14:54  Sep 30 21:21
root      root       pts/0    1:28  Oct  6 05:18 (192.168.30.1)
root      root       pts/2          Oct  6 07:51 (192.168.30.1)
tesla                pts/1    1:28  Oct  6 06:40 (192.168.30.1)
[root@localhost ~]# finger root
Login: root           			Name: root
Directory: /root                    	Shell: /bin/bash
On since Wed Sep 30 21:21 (CST) on tty1    14 hours 54 minutes idle
On since Tue Oct  6 05:18 (CST) on pts/0 from 192.168.30.1
   1 hour 28 minutes idle
On since Tue Oct  6 07:51 (CST) on pts/2 from 192.168.30.1
No mail.
No Plan.


四、用户之间的切换(su和sudo)

     1、su:切换至其它用户

        用法:su [-] [-c] [-m] [username]

        选项:

              -c:执行完指定的指令后恢复原来身份,如su - -c "userdel pulak" root

              -m:变更身份时不变更环境变量

        不指定目标用户时,则为切换到root用户

         root切换到其它用户不需输入密码,其它用户切到root或其它用户之间切换需输入密码

         su username与su - username的区别

             su命令后是否有-选项差别很大,su username是以非交互式登录的方式取得shell(no-login shell),这种方式很多变量仍保留原值,如下,当在当前用户wittgenstein下使用mail命令查看邮件时,实际上查看的却是原来用户tesla的邮件。退出no-login shell使用exit命令。

             而su - username属于交互式登录(login shell),会完全取得新用户的环境。退出login shell使用logout命令

[tesla@localhost ~]$ su wittgenstein
Password:
[wittgenstein@localhost tesla]$ env | grep ‘tesla‘
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tesla/bin
MAIL=/var/spool/mail/tesla
PWD=/home/tesla
[wittgenstein@localhost tesla]$ exit
exit
[tesla@localhost ~]$ su - wittgenstein
Password: 
[wittgenstein@localhost ~]$ env | grep ‘tesla‘
[wittgenstein@localhost ~]$ env | grep ‘wittgenstein‘
USER=wittgenstein
MAIL=/var/spool/mail/wittgenstein
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wittgenstein/bin
PWD=/home/wittgenstein
HOME=/home/wittgenstein
LOGNAME=wittgenstein
[wittgenstein@localhost ~]$ logout
[tesla@localhost ~]$ su - -c "tail -1  /etc/shadow" root 
Password: 
pulak:!!:16713:0:99999:7:2:16714:

     2、sudo:以其它用户身份来执行命令,预设为root

          由于root权力太过强大,基于安全和防止误操作考虑,root密码宜尽量减少传播,使用者多以普通用户身份登录。但有时候又需要临时执行一些只有root才有权限执行的操作,这时候就可以用到sudo了

          1)suso能做什么?

                a.限定指定用户在指定主机上运行指定的管理命令,减少了用户因为错误或恶意执行命令损坏系统的可能性

                b.详细记录用户基于sudo执行的命令的相关日志信息

                c.“检查系统”:用户第一次执行sudo会要求输入自己的密码,用户会获得一个有固定存活时长的“入场券”(默认为5分钟),逾期后若想再次执行sudo命令需要重新输入密码

          2)sudo执行流程

                 当用户执行sudo时,系统根据/etc/sudoers文件检查其是否有相应权限

                 若有相应权限,要求用户输入自己的密码以确认

                 认证通过后用户便可执行指定的命令

          3)某用户若想使用sudo执行其它用户才能执行的命令,则需要root用户先使用专用编辑命令visudo编辑/etc/sudoers文件,授予该用户所需要的权限。/etc/sudoers是有特定语法的,故需使用visudo命令编辑

              /etc/sudoer语法:

                  [%]WHO HOST=(WHOM) [NOPASSWD:] COMMAND

                  ①WHO表示用户,前面若有%表示群组

                  ②HOST表示登录者的来源主机

                  ③WHOM表示可切换的身份

                  ④NOPASSWD表示免除密码输入,可选项,一般用于信任的用户

                  ⑤COMMAND表示可执行的命令          

                   例 gentoo ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

               当要指定的参数太长时,可使用别名,格式为:

                      Alias_Type NAME = item1, item2...

                  其中Alias_Type可以是User_Alias(用户别名)、Runas_Alias(可切换成的身份别名)Host_Alias(主机别名)Cmnd_Alias(命令别名);别名列表中可再嵌套别名

                   注意:别名本身必须使用全大写字母

                   用户别名:

                        可用项:USERNAME,%GROUPNAME,#UID,#GID,User_Alias

                        格式:User_Alias NAME1 = item1,item2 : NAME2 = item3,item4                

                   主机别名:

                        可用项:hostname,ip,network_address,host_alias

                        格式:Host_Alias NAME = item1,item2

                    命令别名:

                         可用项:命令名,目录(目录下的所有命令),"sudoedit",Cmnd_Alias

                         格式:Cmnd_Alias NAME = item1,item2

                 /etc/sudoers编辑示例:

                    User_Alias GENIUS = davinci,tesla,wittgenstein,%director

                    Cmnd_Alias CHANGE = /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

                    GENIUS ALL=(root) Cmnd_Alias CHANGE

          4)sudo命令的用法

              sudo [option]... [-u username]

              常用选项:

                   -b 命令:在后台执行命令

                   -l:列出目前用户可执行与无法执行的命令

                   -e 文件路径:编辑文件而非执行命令

                   -k:清除“入场券”

                   -u 用户名:指定切换到哪个用户,如不指定,默认为root

                   -p 提示语:可以更改询问密码的提示语,其可用%u变量来替换为用户名,%h替换为主机名

[root@localhost ~]# visudo
#includedir /etc/sudoers.d
User_Alias GENIUS = tesla,davinci,%director
Cmnd_Alias CHANGE = /usr/sbin/useradd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
GENIUS ALL=(ALL) CHANGE
[root@localhost ~]# su - tesla
[tesla@localhost ~]$ sudo useradd super
[sudo] password for tesla: 
[tesla@localhost ~]$ tail -2 /etc/passwd
kubrick:x:504:504::/home/kubrick:/bin/bash
super:x:505:506::/home/super:/bin/bash
[tesla@localhost ~]$ sudo passwd super
Changing password for user super.
New password:
[tesla@localhost ~]$ sudo -l
...
User tesla may run the following commands on this host:
    (ALL) /usr/sbin/useradd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
[tesla@localhost ~]$ sudo -k
[tesla@localhost ~]$ sudo userdel super
[sudo] password for tesla: 
Sorry, user tesla is not allowed to execute ‘/usr/sbin/userdel super‘ as root on localhost.localdomain.


五、群组管理

     1、groupadd:创建群组

        用法:groupadd [-g GID] [-r] groupname

         -r:创建系统组,若不指定-g GID,会自动指定一个小于500的GID

         例groupadd science

     2、groups显示用户所在的组

        用法:groups [username]

        不带参数则直接显示当前用户所在的组

[tesla@localhost ~]$ groups
tesla wittgenstein
[tesla@localhost ~]$ groups wittgenstein
wittgenstein : wittgenstein

        结果中的第一个为用户的有效群组,默认为用户的基本组。如上,用户tesla属于组tesla、wittgenstein,其有效组为tesla。该用户创建的新文件的默认属组即为有效属组,若想更改用户的有效组,可使用newgrp命令

      3、newgrp切换用户的有效群组

          用法:newgrp [groupname]

          不指定参数则为切换为基本组

[tesla@localhost ~]$ newgrp wittgenstein
[tesla@localhost ~]$ groups
wittgenstein tesla
[tesla@localhost ~]$ touch abc
[tesla@localhost ~]$ ls -l abc
-rw-r--r-- 1 tesla wittgenstein 0 Oct  5 15:03 abc

       4、groupmod:修改群组

          用法:groupmod [-g GID] [-n newname] groupname

          常用选项:

               -g:修改群组的GID

               -n:修改群组名

       5、groupdel:删除群组

          用法:groupdel groupname

          若目标群组为某用户的基本组,则不能被删除,除非先删除关联的用户;若只为其它用户的附加组,则可以删除

       6、gpasswd:设置或修改组密码,设置群组管理员

          群组通常不设密码,该命令主要用来设置群组管理员。因为默认只有root才能管理群组,但有时用户申请加入某群组时root太忙而无暇处理,这种情况下root就可以设定某个用户作为该群组的管理员来帮其管理

          root能做的动作:

              gpasswd  [-A user...[-M user...] [-r] [-R] groupname

                -A:指定群组的管理员

                -M:将用户加入群组

                -r:删除群组密码

                -R:失群组密码失效

                不指定任何选项则表示给群组设置密码

           群组管理员能做的动作:

               passwd [-a user...] [-d user...] groupname

                 -a:将用户加入群组

                 -d:将用户移出群组

[root@localhost ~]# tail -2 /etc/group
director:x:505:kubrick,nolan
hitchcock:x:506:
[root@localhost ~]# gpasswd -A kubrick director
[root@localhost ~]# su - kubrick
[kubrick@localhost ~]$ gpasswd -a hitchcock director
Adding user hitchcock to group director
[kubrick@localhost ~]$ tail -2 /etc/group
director:x:505:kubrick,nolan,hitchcock
hitchcock:x:506:


linux用户与组管理

标签:用户   useradd   sudo      groupadd   

原文地址:http://9124573.blog.51cto.com/9114573/1700512

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!