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

Linux用户和组管理

时间:2016-07-03 23:48:20      阅读:407      评论:0      收藏:0      [点我收藏+]

标签:linux用户和组

Linux安全上下文:进程所能够访问资源的权限取决于进程运行者的身份

Tips:想要阻止一个用户登录的方法有很多种

a)passwd -l user / usermod -L user 这种方法是在/etc/shadow的密码字段的最前面加!!或!,使用户不能登录

b)只有在7上才可以,可以创建/run/nologin文件(原理参见Centos7中shutdown man手册)或/etc/nologin(误打误撞出来的,记错了前面nologin的路径)

If the time argument is used, 5 minutes before the system goes down the /run/nologin file is created to

        ensure that further logins shall not be allowed.

        

        如果使用了时间参数,那么在系统关闭前的5min,系统会创建/run/nologin文件来确保禁止更多的登录活动

        

1.Linux用户

Linux用户有两个名字,一个是Username,便于人类记忆的,另一个是UID,是系统辨识用户的唯一编号。

Linux用户分为:管理员和普通用户,普通用户又分为系统用户和登录用户

管理员:username是root,uid=0

普通用户:1-65535

系统用户:1-499(Centos6),1-999(Centos7) 用于标识守护进程可以获取的资源

登录用户:500+(Centos6),1000+(Centos7) 用于交互式登录

  

  Attention:多个用户可以使用同一个UID,但系统识别用户只是看uid,遇到uid相同的,系统就认为是同一用户

  登录后,现在提示符前显示用户的username,对于同一个uid系统该采用哪个username呢?系统会去查询/etc/passwd中username和uid的映射关系,找到第一个和当前用户uid相同的条目就退出,此时这个条目中对应的username就是要显示的username。因此,排在文件前面的映射会生效。

  


2.Linux组

Linux组跟用于一样也有两个名字,groupname和gid 系统辨识组是用gid

Linux组分为:管理员组和普通组,普通组又分为系统组和普通组

管理员组:groupname=root gid=0

普通组:

系统组:1-499(CentOS6),1-999(CentOS7)

普通组:500+(Centos6),1000+(Centos7)


3.Linux用户和组之间的关系

  1)按照用户的角度将Linux组进行划分:

 a)主要组 primary group:

  用户必须有且只属于一个主要组

   

 b)私有组

  组名和用户名相同,且仅包含一个用户:称为私有组

   

 c)辅助组 secondary group

    一个用户可以属于0个或多个辅助组

2)一个组可以有多个成员,也可以有多个组管理员,组管理员可以改变组密码,添加或删除组成员


4.跟用户相关的两个文件/etc/passwd和/etc/shadow


Attention:1)这两个文件一个是存储用户信息,一个是存储密码的,早期是放在一起的,不过现在也可以将这两个文件进行合并

#pwunconv 将密码填入/etc/passwd的x位置,并重命名/etc/shadow文件为/etc/shadow-,相关的密码策略不会显示在/etc/passwd中

#pwconv 恢复成两个文件

2)查看/etc/passwd和/etc/shadow中某个特定用户的信息,有专门的工具

getent passwd 用户名

getent shadow 用户名

也可以用来查询组和组的密码,后面说

/etc/passwd 用于存储用户的相关信息,格式如下:

这个文件以:分隔的多个字段

(1)login name:登录用户名

(2)passwd:密码(有的是X,是占位符)

(3)UID:用户ID

(4)GID:基本组ID

(5)Comment:用户全名或注释

(6)home directory:用户家目录

(7)shell:用户默认shell

/etc/shadow 用于存储用户的密码信息,格式如下:

以冒号分隔的多个字段

(1)用户名

(2)用户密码:现在一般用sha512加密

以!或!!或*,表示系统用户

以!或!!后面跟$开头的字符串:表示被锁定的用户,$开头的字符串表示加密过的字符串

Attention:passwd -l user 在密码前加!!

usermod -L user 在密码前加一个!

usermod -U user 执行一次在密码前减去一个!

$开头的字符串表示加密过的字符串,表示用户密码,如:

$6$7thv7bZB$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81

以上字符串可以看作是$分隔的三个字符串,其中

$6代表加密算法 sha512 $1代表md5(128位的)

Attention:#authconfig --passalgo=md5 --update,此后使用passwd加密过的密码,此处都显示$1

同时会修改/etc/login.defs文件

# Use SHA512 to encrypt password.

ENCRYPT_METHOD MD5

MD5_CRYPT_ENAB yes

$7thv7bZB 代表salt,是系统自动加的随机数,会影响加密结果。在没有salt的情况下,通过比对加密结果,如果一样,那么密码就是相同的,这样可以破解密码。为了避免这种情况,系统会自己加一个salt

如果是$1,可以通过这样的方式生成带salt的密码加密之后的结果,

openssl passwd -1 -salt 12345678 code

$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81

是对salt和密码执行加密算法后的结果

sha1,md5,sha512都是单向加密算法,称为哈希算法,有这样的特点:

sha1: secure has algorithm 160bits

md5:message digest, 128bits

1)明文不同,密文必然不同,反之亦然

2)相同算法定长输出,理论上,密文不可逆推出原始数据,但有例外 Md5、SHA1算法,据说被山东大学教授王小云(女)破解

3)雪崩效应:

  初始条件的微小改变,必然引起结果的巨大变化

  

(3)上次修改时间:从1970年1月1日起到密码最近一次被更改的时间

(4)最小使用时间:密码再过几天才可以变更(0表示随时可以变更)

(5)最大使用时间:密码再过几天必须变更(99999表示永不过期)

(6)密码警告时间:密码过期前几天系统提醒用户(默认为一周)

(7)密码失效时间:密码过期几天后账号会被锁定

(8)账号过期时间:从1970年1月1日起,多少天后账号失效

(9)保留(reserved field)

5.跟组相关的两个文件/etc/group和/etc/gshadow

  Attention:1)groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group

  groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念

 

  2)getent group groupname 在/etc/group中查看groupname的相关信息

  getent gshadow groupname  在/etc/gshadow中查看groupname的相关信息

/etc/group存储的是组相关信息

也是以:分隔的多个字段

(1)组名

(2)组密码 通常不需要设定,密码是被记录在/etc/gshadow

(3)GID:组ID

(4)以当前组为附加组(辅助组)的用户列表(以逗号分隔)

/etc/gshadow存储的是与组密码的相关信息

(1)组名

(2)组密码:跟/etc/shadow的密码构造一样

当一个不隶属于这个组的成员想获取这个组的权限时,就需要输入这个密码

如果组密码为空,那么只有组成员才能获取组的权限

Attention:newgrp可将当前用户的基本组切换成设定的组group,成功后,再创建出的文件的的属组都是group

1)如果group是当前用户的附加组,即当前用户隶属于group,这样,依据上面的说明,有没有设置密码都可以进行切换

#/$ newgrp group //不会提示输入密码的

2)如果group不是当前用户的附加组,即当前用户不隶属于group,那么在键入

 newgrp group

 之后,会提示要求输入密码,这个密码是组密码,当前没有密码就一定不能切换成功喽,所以要这样切换,就必须设置密码

另外,设置之后,立即有效,登出时就失效,并且只在设置的那个终端有效,而非对其他终端的同一用户有效

redhat:newgrp gentoo

groups redhat

redhat : redhat 发现用户的属组没变

但 id redhat 

uid=1000(redhat) gid=1009(gentoo) groups=1000(redhat),1009(gentoo) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

在其他终端上同样也是redhat用户执行 id redhat

uid=1000(redhat) gid=1000(redhat) groups=1000(redhat)

在原有终端上退出再登入,发现加入的组改回原来了。

 

(3)组管理员:逗号分隔的用户列表,这些用户都是组管理员

组管理员可以修改密码,增删组成员

组管理员可以不隶属于这个组,但他依然拥有和组成员一样的权限

   Attention:#gpasswd -A redhat gentoo 将redhat用户设为gentoo的组的管理员

    redhat可以不是gentoo组的成员

   

(4)组成员:逗号分隔的用户列表,这些用户都是组成员

Attention:#gpasswd -a redhat gentoo 将redhat用户加入gentoo组

Attention:有时这些命令虽然设置成功了,但是需要登入登出在能生效

6.专业用来修改/etc/passwd和/etc/group的工具

修改且带有语法检查:vipw和vigr

只有语法检查功能:pwck和grpck

7.用户管理命令

1)创建用户

useradd [options] username

-u UID  UID的范围在/etc/login.defs中定义

-u -o 不检查UID的唯一性

-g GID  指明要加入的基本组,如果不指定,则创建一个与用户名相同的组,并将其作为用户的基本组

-c "Comment" 用户的注释信息

-d HOME_DIR 以指定的路径为家目录 此处指定的路径必须不能是个已存在的目录

-s SHELL 指明用户的默认shell

-G GP1[,GP2,...] 为用户指明附加组,组必须事先存在

-N 不创建私有组作为基本组,使用users组(Gid=100)作为基本组

   Attention:在/etc/default/useadd中规定了这一项

    GROUP=100  //如果不创建私有组,就将GID为100的组(即users组)作为基本组

-r 创建系统用户

-M 不创建家目录

  -D 显示默认配置

  -D -s /path/to/shell 修改默认配置中的shell类型

   Attention:使用useradd命令创建用户,一般遵循的默认配置在/etc/default/useradd

    GROUP=100   //如果不创建私有组,就将GID为100的组(即users组)作为基本组

HOME=/home  //普通用户家目录的父目录,系统用户一般不创建家目录

INACTIVE=-1  //用户永不失效

EXPIRE=      //用户永不过期

SHELL=/bin/bash  //默认shell

SKEL=/etc/skel    //用户家目录的基本框架(skeleton),通常是隐藏文件

CREATE_MAIL_SPOOL=yes //是否创建邮箱,其实就是在/var/spool/mail下创建一个以用户名的名字的目录

在/etc/default/下还有一个跟useradd相关的文件是useradd-,这个文件是存储上一次的默认配置(修改之前的)

看到-就可以想到上一次的含义,比如 cd - 就是回到上一次的工作目录

/etc/skel下存放的文件:.bash_logout  .bash_profile  .bashrc  .gnome2(跟安装的图形模块有关,不安装则没有)  .mozilla

2)创建用户口令

passwd可以用于创建用于口令但不至于创建用户口令

passwd:权限-rwsr-xr-x. 其中s代表,任何运行此程序用户都是以属主也就是root身份来运行

passwd [options] username

-l 锁定用户   

Attention:passwd -l user 在密码前加!!

usermod -L user 在密码前加一个!

usermod -U user 执行一次在密码前减去一个!

-U 解锁用户

-e 使用户的密码立即过期,强制用户下次登录时修改密码

此命令的应用场景:root创建了一些账号,并赋予了一些简单密码,使用这个命令可以让密码立即失效,这样在用户第一次登录时,就必须修改密码,我在实验时,登录时,确实提示需要设置密码,但密码总也设置不成功,这是因为Linux对于普通用户设置的密码要求比较严苛,并非不能实现这个需求。

-n mindays    指定最短使用期限 对应/etc/shadow 第4个字段

-x maxdays 指定最大使用期限 对应/etc/shadow 第5个字段

-w warndays       密码失效前多少天开始警告 对应/etc/shadow 第6个字段

-i inactivedays   密码过期几天后会锁定账户 对应/etc/shadow 第7个字段

--stdin 从标准输入接收用户密码

    e.g. echo "passwd" | passwd --stdin username

Attention:在为账号设置密码时,不会指定密码的各种期限,但系统会帮助我们来设置,这些期限称之为密码策略

在windows中查看密码策略的命令是 net account

在Linux中查看密码策略的命令是 chage(change age) -l

其中,默认的密码策略存储在/etc/login.defs,当然不只是有密码策略

以下是省去了注释信息的/etc/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     //用户和组 ID的限制

UID_MAX 60000

GID_MIN  500

GID_MAX 60000

CREATE_HOME yes       //是否创建家目录

 

UMASK           077    //UMASK ,具体参加有注释信息的此文件

USERGROUPS_ENAB yes    //如果用户组中没有成员了,userdel可以删除用户组

ENCRYPT_METHOD SHA512  //密码使用的加密算法 使用authconfig --passalgo=Md5 --update可以修改这里

MD5_CRYPT_ENAB no

3)批量创建用户和修改用户口令

(1)newusers file 批量创建用户

file是满足/etc/passwd格式的文件

(2)chpasswd 从标准输出读入user:passwd的格式的多行文本,以此来批量修改用户口令

vim batchpasswd

user1:明文口令

user2:明文口令

...

cat batchpasswd | chpasswd

4)用户属性修改

usermod [option] username

-u UID: 指定用户新的UID

-g GID:指明用户新的基本组

-G GP1[,gp2,..gpm] 指明新的附加组,原来的附加组会被覆盖

Attenton:若要保留原有附加组,则要使用-aG(-Ga 不可) GP1[,gp2,..gpm]

若要清空附加组,-G "" 即可

 

-s SHELL 新的默认SHELL

-c ‘COMMENT‘ 新的注释信息

-d HOME 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,必须使用-md /path/to/newhome或-m -d /path/to/newhome,总之m选项要在前面

 

-l login_name 新用户名

-L 锁定用户 在/etc/shadow密码前加一个!

  -U 解锁用户 执行一次在密码前减去一个! 直到没有为止

  -e yyyy-MM-DD 指明用户账号的过期日期

  -f INACTIVE:设定非活动期限

  -r 删除用户家目录

5)查看用户相关信息

(1) id [options]  [user]   查看用户相关的信息 不指明用户查看的是当前用户

-u:UID

-g:GID

-G:groups 附加组

 -n:显示id对应的名字,通常和-u和-g连用

   id -un  或 id -gn

(2) finger 打印登录到Linux系统的所有用户的信息

finger user 查看跟user相关的一些信息,比如家目录 shell类型、邮件等

  

  6)在/etc/passwd中家目录字段必须不能为空

  如果为空,则登录这个用户时,键入用户和密码之后,会不出现提示符,不能输入任何命令,等待超时之后(提示:/usr/bin/xauth:  timeout in locking authority file /.Xauthority),进入/

  若su - user完全切换或不完全切换 su user, 则会显示su: user user does not exist

   

  如果不空,但目录不存在,则登录这个用户时,会直接进入/,

  若su - user完全切换 会直接进入/

  若不完全切换 su user 会进入执行 su user的目录

  

  7) 切换用户或以其它用户身份执行命令

  su [options] [-] [user [args...]]

  切换用户的方式:

  su user:非登录式切换,不会读取目标用户的配置文件,不改变当前工作目录,也称之为不完全切换

  su - user 登录式切换,会读取目标用户的配置文件,切换至其家目录,也称之为完全切换

  Attention:root执行su至其他用户无需密码,非root用户切换时需要密码

 

  切换身份执行命令

  su [-] user -c ‘cmd‘

  选项 -l --login

  su -l user 相当于 su - user

  

  8)修改用户相关信息的其他命令

  chfn 指定个人信息

  chsh 指定shell

  

  9)修改用户密码策略

  chage [option]  user

  -d last_day 修改最后修改时间 对应于/etc/shadow的第3个字段

  -m --mindays Min_days 修改最小使用时间 对应于/etc/shadow的第4个字段 过多少时间可以修改

  -M --maxdays Max_days 修改最大使用时间 对应于/etc/shadow的第5个字段

  -W --warndays Warn_days 修改警告时间 对应于/etc/shadow的第6个字段

-I --inactive Inactive 修改账户失效时间 对应于/etc/shadow的第7个字段    

-E --expiredate Expire_Date 修改账户过期时间 对应于/etc/shadow的第8个字段

-l 显示密码策略

下次登录强制重设密码

chage -d 0 tom 等价于 passwd -e tom

e.g. chage -m 0 -M 42 -W 14   -I 7 tom

chage -E 2016-09-10 tom 

10)删除用户

userdel user 不会删除用户家目录

 -r user 才会删除用户的同时删除家目录

在/etc/login.defs中,有这样的描述

# This enables userdel to remove user groups if no members exist.

#

USERGROUPS_ENAB yes


8. 组管理命令

  1)创建组

  groupadd [option] groupname

  -g gid 指明GID 范围在/etc/login.defs中指定

  -r 创建系统组

   

  2)修改组

  groupmod [OPTION] group

  -n groupname :组的新名字

  -g GID :新的GID

  

  3)组删除

  groupdel group

  

  4)更改组密码

    gpasswd [option] group

            -a user 将user加入到指定组中

            -M user1,user2...指定组成员列表

            -d user 从指定组中删除user

            -A user1,user2,... 设置有管理权限的用户列表,即设置组管理员

    

    newgrp命令:临时切换基本组

    如果用户不属于此组,则需要组密码

    Attention:具体参见本文档/etc/gshadow部分

   

   5)更改组成员

    groupmems [options] [action]

    options:

    -g /--group groupname 更改为指定组(只有root可用)

   

    action:

       -a /--add username 指定加入组的用户

       -d / --delete username 指定从组删除的用户

       -p / --purge 从组中清除所有成员

       -l / --list 显示组中成员

   

    e.g. groupmems -g bin -a wang 将wang用户加入bin组

    groupmems -g bin -l 查看bin组中的所有成员,似乎是查看以bin组为附加组的成员列表

    groupmems -g bin -p 清除所有bin组中的成员

   

    6)查看组成员

      groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group

  groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念

      

      

      

       


Linux用户和组管理

标签:linux用户和组

原文地址:http://bloodhero.blog.51cto.com/4496010/1795311

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