用户组管理系列(一):增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dmzing/article/details/52404469

1、什么是用户和组

   每个用户都拥有一个唯一的用户名和一个与之相关联的数值型的用户标识UID,用户可以隶属于一个或多个组,而每个组也都拥有唯一的一个名称和一个组标识符GID,对于进程和内核来说,只识别UID和GID,用户名和组名最终都会通过/etc/passwd和/etc/group这俩个数据库转换为UID和GID来标识。这两个ID的主要用途如下:

    ● 确定各种系统资源的所有权

    ● 对赋予进程访问上述资源的权限加以控制




2、用户管理

    <1>用户文件

文件 内容
/etc/passwd 用户名,空密码,UID,GID,注释信息,家目录,登陆shell
/etc/shadow 用户名,加密密码,各密码时间设置
/etc/group 组名,空组密码,GID,组中用户
/etc/gshadow 组名,加密密码,组管理员列表,组中用户

  注:可执行getent passwd USERNAME查看/etc/passwd的特定行,和cat /etc/passwd | grep USERNAME功能相同。

      可执行pwunconv移动/etc/shadow中的加密密码至/etc/passwd中

      可执行vipw直接打开/etc/passwd文件,vigr直接打开/etc/group文件

      可执行pwck和grpck分别检查/etc/passwd文件和/etc/group文件

  /etc/shadow中密码设置如下图

wKiom1egDnLAqFJXAAARONLjjW4585.png

  注:可使用usermod -L USERNAME锁定用户,此时用户将无法登陆,这也是空密码无法登陆用户的原因。但不允许无限解锁,否则用户无密码即可登陆。(centos6以后的版本已弥补次缺陷)

      可使用chage -d0 USERNAME和passwd -e使得用户密码过期而无法登陆

        注:chage USERNAME:可修改用户的/etc/shadow中的时间

            chfn:交互式修改用户的注释信息

            finger USER:查看用户的详细信息

      可创建文件touch /etc/nologin使得用户下次无法登陆系统

   <2>用户分类(CentOS 7)

UID 用户 功能
0 超级管理员 管理计算机的全部权限
1-999 系统用户 执行某些服务,不用做登陆系统
1000-60000 普通用户 管理计算机的部分权限

   <3>用户创建

      语法格式

        useradd [options] LOGIN

      常用选项

1     -u USERNAME:指定用户UID
2     -g GROUPNAME:指定用户主组(基本组),也可以是GID
3     -G GROUPNAME..:指定用户的附加组
4     -c "COMMENT":指明用户的注释信息
5     -d HOMEDIR:指明用户的家目录
6     -s SHELL:指定用户的登陆shell
7     -r:添加系统用户
8     -o: 忽略UID添加用户

  注:系统用户默认无家目录和邮箱,登陆系统显示无环境变量。如果要让其拥有环境变量,可创建其家目录并复制/etc/skel/下文件到其家目录中。如果要求其不可登陆,可设置其shell为/bin/nologin

      用户邮箱地址:/etc/spool/mail/USERNAME

[root@centos7/home/rr]#cp /etc/skel/.[^.]* /home/rr/ -rv


[root@centos7 ~]# useradd conver -r
[root@centos7 ~]# su conver
bash-4.2$ su
Password: 
[root@centos7 ~]# cd /home/
[root@centos7 home]# mkdir conver
[root@centos7 home]# cd conver/
[root@centos7 conver]# cp /etc/skel/.[^.]* ./ -r
[root@centos7 conver]# su conver
[conver@centos7 ~]$ su root
Password:
[root@centos7 conver]#
[root@centos7 conver]# usermod conver -s /bin/nologin
[root@centos7 conver]# su conver
su: failed to execute /bin/nologin: No such file or directory

   <4>用户属性修改     

      语法格式

        usermod [options] LOGIN

      常用选项(-u、-g、-s、-c与useradd相似,此处不予列出)

1     -aG GROUPNAME:为用户添加附加组
2     -md HOMEDIR:移动家目录
3     -l NEWNAME:指定新名字
4     -L,--lock:锁定用户
    -U,--ulock:解锁用户
6     -e YYYY-MM-DD USERNAME:指定用户密码过期日期
7     -f INACTIVE USERNAME: 设定非活动期限
[root@centos7 ~]# getent shadow user
user:$6$1pOy1/nZEpZrwMwa$IBG2aqz0RvHyWuIcOJ62cPWP9eRJga4CHFrbu/MQTHdlWNmw9TTfq673vDdq3XgV2TSNO.l88vjhDumU8aSoE0:17014:0:99999:7:::
[root@centos7 ~]# usermod -L user
[root@centos7 ~]# getent shadow user
user:!$6$1pOy1/nZEpZrwMwa$IBG2aqz0RvHyWuIcOJ62cPWP9eRJga4CHFrbu/MQTHdlWNmw9TTfq673vDdq3XgV2TSNO.l88vjhDumU8aSoE0:17014:0:99999:7:::

 注:也可使用chsh -s SHELLTYPE USERNME指定用户shell类型

[root@centos7 ~]# chsh -s /bin/bash user
Changing shell for user.
Shell changed.

      *用户配置文件属性修改,用户的默认属性保存在2个文件中

文件 内容
/etc/login.defs 用户范围,密码期限设、加密算法等
/etc/default/useradd 用户登陆默认shell、默认家目录等

   useradd -D:查看/etc/default/useradd信息

   useradd -D -s SHELLTYPE:修改默认shell

   useradd -D -d HOMEDIR:修改默认家目录

[root@centos7 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@centos7 ~]# useradd -D -s /bin/bash
[root@centos7 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

  注:可使用authconfig --passalgo=ALGORITHM --update更改系统的加密机制

[root@centos7 ~]# getent shadow user
user:$6$FTA6U0nc$BGoO2MC7ziXOG871bsp.jbbg25lEtcF0BWt8sRNY66n.P9npsvvIOp1L1Vx9poVuWdPJaR.7/0RyvZxmwn8EB0:17015:0:99999:7:::
[root@centos7 ~]# authconfig --passalgo=sha256 --update
[root@centos7 ~]# passwd user
Changing password for user user.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# getent shadow user
user:$5$3sxrgtHo$fD3Kiyus2N2NOQMijCdV6f6kII1bWbis4evht71ISOA:17015:0:99999:7:::

   <5>用户删除

      语法格式

        userdel [options] LOGIN   

  -r USERNAME:删除用户及其家目录   

   <6>用户查看

       语法格式

         id [OPTION]... [USER]  

       常用选项    

1     -u USERNAME:显示用户的UID
2     -g USERNAME:显示用户的GID
3     -G USERNAME:显示用户所属组的所有ID

  *也可以使用finger命令查看

[root@centos7 ~]# id -u user
1000
[root@centos7 ~]# is -G user
bash: is: command not found...
[root@centos7 ~]# id -u user
1000
[root@centos7 ~]# id -G user
1000 4325
[root@centos7 ~]# id user
uid=1000(user) gid=1000(user) groups=1000(user),4325(admins)
[root@centos7 ~]# finger user
Login: user           			Name: user
Directory: /home/user               	Shell: /bin/bash
On since Thu Jul 21 14:55 (CST) on :0 from :0 (messages off)
On since Fri Jul 29 10:32 (CST) on pts/0 from :0
   20 hours 26 minutes idle
Last login Mon Aug  1 17:56 (CST) on pts/2
Mail last read Mon Aug  1 14:02 2016 (CST)




3、组管理

   <1>创建组

      语法格式

        groupadd [options] group

      常用选项

        -g GID GROUPNAME:创建指定组号的组

   <2>删除组  

      语法格式

        groupdel group

   <3>改变组属性

      语法格式

        groupmod [options] GROUP

      常用选项

1     -n NEW_GROUPNAME:修改组名
2     -g GID GROUPNAME:新的组ID
3     -A USERNAME.. GROUPNAME:设置组的的管理权限列表
[root@centos7 zhao]# groupadd team
[root@centos7 zhao]# getent group team
team:x:4451:
[root@centos7 zhao]# groupmod -g 4452 team
[root@centos7 zhao]# getent group team
team:x:4452:
[root@centos7 zhao]# groupmod -n team1 team
[root@centos7 zhao]# getent group team1
team1:x:4452:

   <4>更改和查看组成员 

       语法格式  

         groupmems [options] [-g GROUPNAME] 

       命令功能:查看组内成员             

1     -a,--add USERNAME:指定用户加入组
2     -g,--group groupname:更改为指定GID
2     -d,--delete USERNAME:从组中删除用户
3     -l,--list:显示组成员列表
[root@centos7 ~]# groupmems -a conver -g user
[root@centos7 ~]# groupadd -g 4444 content
[root@centos7 ~]# getent group content
content:x:4444:
[root@centos7 ~]# groupmod -n context -g 4445 content
[root@centos7 ~]# groupmems -a aa -g context
[root@centos7 ~]# groupmems -l -g context
aa 
[root@centos7 ~]# groupmems -d aa -g context
[root@centos7 ~]# groupmems -l -g context
[root@centos7 ~]#

       语法格式

         groups [OPTION]... [USERNAME]..

       命令功能:查看成员所属组

[root@centos7 ~]# getent group admins
admins:x:4325:natasha,harry,user
[root@centos7 ~]# groups user
user : user admins
[root@centos7 ~]#

   <5>组切换     

       语法格式

         newgrp [GROUPNAME]

       命令功能:切换当前用户的属组,只对当前shell有效

[user@centos7 ~]$ newgrp aa
Password: 
[user@centos7 ~]$ touch 1
[user@centos7 ~]$ ll 1
-rw-r--r--. 1 user aa 0 Aug  2 21:12 1

   <6>组密码管理

       ● 更改用户密码:passwd GROOUPNAM

         可执行echo USERNAME:PASSWORD | chpasswd 更换用户密码

       ● gpasswd [OPTION] GROUP


1     -a USERNAME:将用户添加至组中
2     -d USERNAME:将用户从组中删除
3     -A USER... :设置管理组的用户列表      




4、用户切换 

  su USERNAME su - USERNAME
切换类型 非登陆式切换 登陆式切换
是否重读配置文件
是否改变当前目录

 注:root su至其他用户无须密码,非root用户切换时需要密码

     只执行su表示切换root用户




     
强化练习

1、创建testuser uid:1234 主组:bin 辅助组:root,ftp shell:/bin/csh home:/testdir/testuser

[root@centos7 ~]# useradd testuser -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser
[root@centos7 ~]# getent passwd testuser
testuser:x:1234:1::/testdir/testuser:/bin/csh
[root@centos7 ~]# groups testuser
testuser : bin root ftp
[root@centos7 ~]# id testuser
uid=1234(testuser) gid=1(bin) groups=1(bin),0(root),50(ftp)

2、修改testuser uid:4321 主组:root 辅助组:nobody loginname:test home:/home/test

   要求:家数据迁移

[root@centos7 ~]# usermod -u 4321 -g root -G nobody -l test -md /home/test testuser
[root@centos7 ~]# getent passwd test
test:x:4321:0::/home/test:/bin/csh
[root@centos7 ~]# groups test
test : root nobody
[root@centos7 ~]# id test
uid=4321(test) gid=0(root) groups=0(root),99(nobody)

3、批量创建帐号:user1...user10

   要求:passwd:usernamepass uid:3001-3010 home:/testdir/username shell:/bin/csh 

   注意家目录相关配置,使用户正常登录   

  <1>创建俩个文件
[root@centos7 ~]# cat user
user1:x:3001:3001::/testdir/user1:/bin/csh
user2:x:3002:3002::/testdir/user2:/bin/csh
user3:x:3003:3003::/testdir/user3:/bin/csh
user4:x:3004:3004::/testdir/user4:/bin/csh
user5:x:3005:3005::/testdir/user5:/bin/csh
user6:x:3006:3006::/testdir/user6:/bin/csh
user7:x:3007:3007::/testdir/user7:/bin/csh
user8:x:3008:3008::/testdir/user8:/bin/csh
user9:x:3009:3009::/testdir/user9:/bin/csh
user10:x:3010:3010::/testdir/user10:/bin/csh
[root@centos7 ~]# cat passwd
user1:user1pass
user2:user2pass
user3:user3pass
user4:user4pass
user5:user5pass
user6:user6pass
user7:user7pass
user8:user8pass
user9:user9pass
user10:user10pass 
  <2>读取这俩个文件
[root@centos7 ~]# newusers user
[root@centos7 ~]# cat passwd | chpasswd
  <3>查看用户是否添加
[root@centos7 ~]# tail /etc/passwd
test:x:4321:0::/home/test:/bin/csh
user1:x:3001:3001::/testdir/user1:/bin/csh
user2:x:3002:3002::/testdir/user2:/bin/csh
user3:x:3003:3003::/testdir/user3:/bin/csh
user4:x:3004:3004::/testdir/user4:/bin/csh
user6:x:3006:3006::/testdir/user6:/bin/csh
user7:x:3007:3007::/testdir/user7:/bin/csh
user8:x:3008:3008::/testdir/user8:/bin/csh
user9:x:3009:3009::/testdir/user9:/bin/csh
user10:x:3010:3010::/testdir/user10:/bin/csh
  <4>复制家目录文件
[root@centos7 ~]# cp -r /etc/skel/.[^.]* /testdir/user1      
[root@centos7 ~]# ls -a /testdir/user1
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla 
注:因为用户的shell是csh,此步骤省略也可正常登陆
  <5>用户登陆
[user1@centos7 ~]$ ls

4、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"

[root@centos7 ~]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
[root@centos7 ~]# getent passwd gentoo
gentoo:x:4324:4324:Gentoo Distribution:/home/gentoo:/bin/csh

5、创建下面的用户、组和组成员关系

   名字为admins的组

   用户natasha,使用admins作为附属组

   用户harry,也使用admins作为附属组

   用户sarah,不可交互登录系统,且不是admins 的成员

   natasha,harry,sarah密码都是centos

[root@centos7 ~]# groupadd admins
[root@centos7 ~]# useradd natasha -G admins
[root@centos7 ~]# useradd harry -G admins
[root@centos7 ~]# useradd sarah -s /bin/nologin
[root@centos7 ~]# id natasha
uid=4325(natasha) gid=4326(natasha) groups=4326(natasha),4325(admins)
[root@centos7 ~]# id harry
uid=4326(harry) gid=4327(harry) groups=4327(harry),4325(admins)
[root@centos7 ~]# getent passwd sarah
sarah:x:4327:4328::/home/sarah:/bin/nologin
[root@centos7 ~]# echo centos | passwd --stdin natasha
Changing password for user natasha.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# echo centos | passwd --stdin harry
Changing password for user harry.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# echo centos | passwd --stdin sarah
Changing password for user sarah.
passwd: all authentication tokens updated successfully.

   

 

展开阅读全文

没有更多推荐了,返回首页