Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313567
  • 博文数量: 84
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 16:46
文章分类

全部博文(84)

文章存档

2017年(2)

2016年(4)

2015年(78)

我的朋友

分类: LINUX

2015-07-03 15:35:57

手动新增用户

需要了解下面这些文件及目录:
用户账号与密码参数方面的文件:/etc/passwd,/etc/shadow
用户组相关方面文件:/etc/group,/etc/gshadow
用户的组文件夹:/home/账号名称
/etc/default/useradd
/etc/skel/*
/etc/login.defs
/var/spool/mail/*


如果使用useradd可以帮助我们自动设置好UID/GID主文件夹及主文件夹相关的权限设置,(主文件夹下的配置文件,用户的邮箱等),手动增加的时候,要了解整个系统,手动增加的好处是,我们的账号问题可以完全依照自己的意思去修改,而不必迁就于系统默认值。


一些检查工具
pwck
这个命令检查/etc/passwd这个账号配置文件内的信息,与实际的主文件夹是否存在。比较/etc/passwd,/etc/shadow的信息是否一致,另外,如果/etc/passwd内的数据字段错误时,会提示用户修改。
grpck
用户组检查,与pwck意思相同

pwconv
这个命令主要目的是将/etc/passwd内的账号与密码移动到/etc/shadow当中(例如你只手工修改了/etc/passwd文件增加了用户,而shadow中没有对应的用户时)。
一般说,如果你正常使用useradd增加用户时,使用pwconv并不会有任何操作,因为/etc/passwd与/etc/shadow并不会有问题。不过如果手动设置账号,这个pwconv就很重要了。

pwnuconv
相对于pwconv,pwunconv则是将/etc/shadow内的密码列数据写回/etc/passwd,并且删除/etc/shadow文件,这个命令很危险,需要先备份shadow文件,最好不要用

chpasswd
他可以读入未加密前的密码,并且经过加密后,将加密后的密码写入/etc/shadow文件中,这个命令很常被使用在批量新建账号的情况中。他可以有Standard input读入数据,每条数据的格式是“username:password”。举例来说,我的系统当中有个用户账号为awake,我想要更新他的密码(update),假如需要将密码更新为Passw0rd的话,那么可以这样:
  1. [root@RHEL6 mail]# echo "awake:Passw0rd" | chpasswd -m
默认情况中chpasswd使用的是DES加密方法来加密,我们可以使用chpasswd -m 来使用MD5加密方法。这个命令通常是passwd --stdin的备份命令,如有些系统中没有passwd --stdin命令是使用。
  1. [root@RHEL6 mail]# echo "password" | passwd --stdin awake

grpconv
这个命令主要目的是将/etc/group内的用户组与密码移动到/etc/gshadow当中(例如你只手工修改了/etc/group文件增加了用户组,而gshadow中没有对应的用户组时)。 


使用命令新建用户及用户组过程如下
  1. groupadd mygroup1
  2. useradd -G mygroup1 myuser1
  3. useradd -G mygroup1 myuser2
  4. useradd -s /sbin/nologin myuser3

  5. echo "password" | passwd --stdin myuser1
  6. echo "password" | passwd --stdin myuser2

  7. mkdir /srv/projecta
  8. chgrp mygroup1 /srv/projecta
  9. chmod 2770 /srv/projecta //代表用户(myuser1-3)在这个目录下面新建的文件的用户组都会与该目录的用户组相同

手工(修改配置文件)新建用户及用户组过程如下

1、先新建所需要的用户组(vi /etc/group)
2、将/etc/group与/etc/gshadow同步(grpconv,下面有grpconv的实验)
3、新建账号的各个属性(vi /etc/passwd)
4、将/etc/passwd与/etc/shadow同步(pwconv,与grpconv意思相同)
5、新建账号的密码(passwd accountname)
6、新建用户主文件夹(cp -a /etc/skel /home/accountname)
7、更改用户主文件夹的所有者和所有组属性(chown -R accountname.group /home/accountname)
8、更改用户主文件夹的权限属性

实例
新建用户为normal,假设520这个UID/GID没有被占用,新建用户组为normalgroup,并指定用户密码
1、新建组、同步组及组密码
  1. [root@RHEL6 ~]# vi /etc/group //在最后一行加入下面这一行
  2. ......
  3. normalgroup:x:520:
  4. ......
  5. [root@RHEL6 ~]# grep normalgroup /etc/gshadow //查看/etc/gshadow没有这一行
  6. [root@RHEL6 ~]# grpconv ///etc/group内的用户组与密码移动到/etc/gshadow当中
  7. [root@RHEL6 ~]# grep normalgroup /etc/gshadow /etc/group //查看移动情况
  8. /etc/gshadow:normalgroup:x:: //移动完成
  9. /etc/group:normalgroup:x:520:
  10. [root@RHEL6 ~]#

2、新建用户,同步用户与密码

  1. [root@RHEL6 ~]# vi /etc/passwd
  2. 加入如下一行
  3. normaluser:x:520:520::/home/normaluser:/bin/bash
  4. [root@RHEL6 ~]# grep normaluser /etc/shadow //查看/etc/shadow没有这一行
  5. [root@RHEL6 ~]# pwconv //将/etc/passwd内的账号与密码移动到/etc/shadow当中
  6. [root@RHEL6 ~]# grep normaluser /etc/shadow //再次查看,移动完成
  7. normaluser:x:16618:0:99999:7:::
  8. [root@RHEL6 ~]#
  9. [root@RHEL6 ~]# passwd normaluser //设置normaluser的密码
  10. Changing password for user normaluser.
  11. New password: 
  12. BAD PASSWORD: it is based on a dictionary word
  13. Retype new password: 
  14. passwd: all authentication tokens updated successfully.
4、新建用户主文件夹,并且修改权限
  1. [root@RHEL6 ~]# ll -/home/*
  2. drwx------. 3 alex alex 4096 Jun 29 09:25 /home/alex //没有normaluser的家目录
  3. ......
  4. [root@RHEL6 ~]# cp -/etc/skel /home/normaluser //复制/etc/skel下的所有文件到/home/normaluser,看来cp -a有创建目录的能力
  5. [root@RHEL6 ~]# ll -/home/* 
  6. drwx------. 3 alex alex 4096 Jun 29 09:25 /home/alex
  7. drwxr-xr-x. 3 root root 4096 Jun 4 13:58 /home/normaluser
  8. [root@RHEL6 ~]# chown -R normaluser:normalgroup /home/normaluser //更改用户主文件夹的所有者和所有组属性
  9. [root@RHEL6 ~]# ll -/home/normaluser/
  10. drwxr-xr-x. 3 normaluser normalgroup 4096 Jun 4 13:58 /home/normaluser/
  11. [root@RHEL6 ~]# chmod 700 /home/normaluser //更改用户主文件夹的权限属性
  12. [root@RHEL6 ~]# ll -/home/normaluser/ 
  13. drwx------. 3 normaluser normalgroup 4096 Jun 4 13:58 /home/normaluser/
  14. [root@RHEL6 ~]#

验证

  1. [root@RHEL6 ~]# su - awake
  2. [awake@RHEL6 ~]$ su - normaluser
  3. Password: //密码设置正确
  4. [normaluser@RHEL6 ~]$ groups 
  5. normalgroup //用户初始组正确
  6. [normaluser@RHEL6 ~]$ pwd
  7. /home/normaluser //家目录正确
  8. [normaluser@RHEL6 ~]$ umask
  9. 0022 //这一点有点不同,使用useradd新建的用户其umask值为0002

  10. [normaluser@RHEL6 ~]$ mail root //给root写封邮件
  11. Subject: hello
  12. I am here
  13. .
  14. EOT
  15. [normaluser@RHEL6 ~]$ exit
  16. logout
  17. [awake@RHEL6 ~]$ exit //回到超户,提示有封邮件
  18. logout
  19. You have mail in /var/spool/mail/root 
  20. [root@RHEL6 ~]# mail //查看邮件
  21. Heirloom Mail version 12.4 7/29/08. Type ? for help.
  22. "/var/spool/mail/root": 1 message 1 new
  23. >N 1 normaluser@RHEL6.4x6 Thu Jul 2 17:36 18/559 "hello"


  24. [root@RHEL6 ~]# ll /var/spool/mail/normaluser //查看用户normaluser有没有邮箱,发现没有,如果使用useradd创建的,那么这个邮箱也应该创建,用root给normaluser发封邮件试试。
  25. ls: cannot access /var/spool/mail/normaluser: No such file or directory


  26. [root@RHEL6 mail]# mail normaluser
  27. Subject: Aare you there
  28. Are you there?
  29. .
  30. EOT
  31. [root@RHEL6 mail]# 
  32. [root@RHEL6 mail]# su - normaluser
  33. [normaluser@RHEL6 ~]$ mail
  34. Heirloom Mail version 12.4 7/29/08. Type ? for help.
  35. "/var/spool/mail/normaluser": 1 message 1 new
  36. >N 1 root Thu Jul 2 17:39 18/561 "Aare you there"
  37. & 1
  38. Message 1:
  39. From root@RHEL6.4x64 Thu Jul 2 17:39:05 2015
  40. Return-Path: <root@RHEL6.4x64>
  41. X-Original-To: normaluser
  42. Delivered-To: normaluser@RHEL6.4x64
  43. Date: Thu, 02 Jul 2015 17:39:05 +0800
  44. To: normaluser@RHEL6.4x64
  45. Subject: Aare you there
  46. User-Agent: Heirloom mailx 12.4 7/29/08
  47. Content-Type: text/plain; charset=us-ascii
  48. From: root@RHEL6.4x64 (root)
  49. Status: R


  50. Are you there?


  51. & quit
  52. Held 1 message in /var/spool/mail/normaluser
  53. [normaluser@RHEL6 ~]$ ll /var/spool/mail/normaluser //有邮件,并且创建了这个文件
  54. -rw-------. 1 normaluser mail 572 Jul 2 17:39 /var/spool/mail/normaluser

grpconv命令实验

  1. [root@RHEL6 ~]# grep project /etc/group
  2. project:444:706:alex,arod //字符444为手工修改group文件,给project组设置的密码
  3. [root@RHEL6 ~]# grep project /etc/gshadow
  4. project:x::alex,arod //x表示project还没有密码 
  5. [root@RHEL6 ~]# gpasswd project //使用gpasswd设置project的密码
  6. Changing the password for group project
  7. New Password: 
  8. Re-enter new password: 
  9. [root@RHEL6 ~]# grep project /etc/gshadow //查看密码已经设置成功,并为加密方式
  10. project:$6$/FLzki/B$JDOrI8v4FAtTQSuy.682wwlttQyZ120GAk70Se2hT5smhfdOue9ZNj4KtcCI0wXGz1yEBb5TZz6Mp1AN2HBHN/::alex,arod
  11. [root@RHEL6 ~]# grpconv ///etc/group内的用户组与密码移动到/etc/gshadow当中
  12. [root@RHEL6 ~]# grep project /etc/gshadow //密码已经移动过来,覆盖了原有密码,此时为444
  13. project:444::alex,arod
  14. [root@RHEL6 ~]# grep project /etc/group 
  15. project:x:706:alex,arod //x表示密码已经不见了
  16. projecta:x:707:pro1,pro2,pro3
批量新建账号模板。

  1. [root@RHEL6 scripts]# more account1.sh 
  2. #!/bin/bash
  3. #这个程序用来新建账号,功能有:
  4. #1.检查account1.txt是否存在,并将该文件内的账号取出;
  5. #2.新建上述文件的账号;
  6. #3.将上述账号的密码修改成为强制第一次需要修改密码的格式。
  7. #2015/07/02 Awake
  8. export PATH=/bin:/sbin:/usr/bin:/usr/sbin
  9. #检查account1.txt是否存在


  10. #下面是一个单层的条件判断式if [ 条件判断式 ];then fi
  11. if [ ! -f account1.txt ]; then
  12.         echo "所需要的账号文件不存在,请新建account1.txt,每一行一个账号名称"
  13.         exit 1
  14. fi


  15. #下面是一个固定循环for...do...done


  16. username=$(cat account1.txt) #username的变量内容是cat account1.txt的内容


  17. for username in $username #第一次循环时,$username的内容为cat account1.txt的第一个用户名...
  18. do
  19.         useradd $username #添加第一个用户名
  20.         echo $username | passwd --stdin $username #设置用户的密码与用户相同
  21.         chage -d 0 $username #最近一次更改密码的日期为0表示1970/01/01,也就是强制用户登录修改密码
  22. done


  23. [root@RHEL6 scripts]# more account1.txt 
  24. stda
  25. stdb
  26. stdc
  27. [root@RHEL6 scripts]# 
  28. [root@RHEL6 scripts]# sh -n account1.sh //检查script语法
  29. [root@RHEL6 scripts]# sh -x account1.sh //将使用到的script显示在屏幕上,+号后面的数据是命令串。
  30. + export PATH=/bin:/sbin:/usr/bin:/usr/sbin
  31. + PATH=/bin:/sbin:/usr/bin:/usr/sbin
  32. + '[' '!' -f account1.txt ']'
  33. ++ cat account1.txt
  34. + username='stda
  35. stdb
  36. stdc'
  37. + for username in '$username'
  38. + useradd stda
  39. + passwd --stdin stda
  40. + echo stda
  41. Changing password for user stda.
  42. passwd: all authentication tokens updated successfully.
  43. + chage -d 0 stda
  44. + for username in '$username'
  45. + useradd stdb
  46. + passwd --stdin stdb
  47. + echo stdb
  48. Changing password for user stdb.
  49. passwd: all authentication tokens updated successfully.
  50. + chage -d 0 stdb
  51. + for username in '$username'
  52. + useradd stdc
  53. + passwd --stdin stdc
  54. + echo stdc
  55. Changing password for user stdc.
  56. passwd: all authentication tokens updated successfully.
  57. + chage -d 0 stdc
  58. [root@RHEL6 scripts]#
  59. [root@RHEL6 scripts]# grep "std[a-z]" /etc/passwd /etc/shadow //检查用户添加情况,及密码设置情况,密码文件shadow注意第三段的0,表示是1970年1月1日修改的密码,也就是强制用户登录修改密码
  60. /etc/passwd:stda:x:712:714::/home/stda:/bin/bash
  61. /etc/passwd:stdb:x:713:715::/home/stdb:/bin/bash
  62. /etc/passwd:stdc:x:714:716::/home/stdc:/bin/bash
  63. /etc/shadow:stda:$6$DtW1clOT$TNuVmfmg2CeMuHoM2ZgYeKLm5KoYh.yaV6XAKi4CWEHsYyL.sWca02lIzjEpt.uHSKRZA.nzKSEgYA6VmdUCK0:0:0:99999:7:::
  64. /etc/shadow:stdb:$6$CyF3gyHD$qqRQKrCKbe9Dpi4oejJhYW4vrFuhg6WjZGeiAxbkl5LH5pSBTdQL0s0GJa5F3IPOpNocahJ5zL09IoCubosgO0:0:0:99999:7:::
  65. /etc/shadow:stdc:$6$F/7ucLdw$i3QcwEwA8BcMsfT4D5xVBPYWlMjNmWZhbn.ZP2Vq.UOrahhJg4pUlqyPKpUEc5vrxAYqHhuPQyVDh.5TSx4mw.:0:0:99999:7:::
  66. [root@RHEL6 scripts]#

阅读(1256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~