一、/etc/passwd文件详解
二、/etc/shadow文件详解
三、新增/删除用户和组
四、创建、修改用户密码
五、用户身份切换
六、应用技巧


1. /etc/passwd
由 : 分隔成7个字段
(1) 用户名   命名规则:大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法 
(2) x 放密码,安全起见放到 /etc/shadow
(3) uid 用户的uid号   范围(0-4294967294=2^32-2)            root uid=0 
          1-499系统保留 
          普通账户是从500开始
(4) gid  组ID号

          对应 /etc/group 的gid
(5) 注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等  用 chfn 用户名 更改
(6) 用户家目录
(7) shell  /bin/bash, /bin/false, /sbin/nologin     这个用户所使用的shell
2. /etc/shadow
$6  sha-512 加密
$5  sha-256
$1  md5
使用 : 分隔9个字段
(1) 用户名
(2) 密码     
          如$6$为SHA-512加密;如$5$为SHA-256加密;如$1$为MD5加密
(3)上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是 ‘365 x (2012-1970) + 10 + 1= 15341’. 
(4)要过多少天才可以更改密码, 0 不限制
(5)密码多少天后到期,默认是99999,可以理解为永远不需要改 
(6)密码到期前的警告期限 
(7)账号失效期限,到期后过多少天锁定帐号 
(8)账号的生命周期
(9)作为保留用的,没有什么意义
注意:此项内容工作中的操作较少,面试不会问到以上这些


3. 新增/删除用户和组
groupadd 组名     添加组
groupadd -g gid号  组名     给添加组指定gid号(如不指定,递增创建gid)
groupdel  组名     (如果组内有用户,不能删除)
useradd -u uid号 用户名      指定uid号
useradd -g gid号 用户名     给新建用户指定gid号(gid必须之前就存在)
useradd -G gid号 用户名     添加附属组
useradd -d 路径 用户名     指定家目录
useradd -M 用户名     不建立家目录  (会指定家目录,但没有创建)
     如需要手动创建家目录,需要往家目录拷贝一些文件:
     cp /etc/skel/.b* /home/用户名     手动将环境变量文件拷贝到用户家目录中
useradd -s shell路径 用户名     指定shell
userdel  -r 删除用户的家目录
usermod -u  更改用户的uid
-s        更改shell
-d     更改家目录
  -L     锁定账户
-U     解锁账户
-g     指定gid
-G   添加附属组


chfn 用户名    输入用户个人信息
chfn  finger
另:如需要查看用户的属性信息,输入chfn 用户名  即可。  


4. 创建、修改用户密码
passwd  
创建密码的规则:长度大于10;含大小写字母数字以及特殊字符 ;不规则性;不要带有自己名字、公司名字、自己电话、自己生日等。

mkpasswd  生成密码的工具,
安装 expect包 

mkpasswd -l 15 -s 0     
-l 指定密码长度    
-s 指定密码中特殊字符最少位数,默认是1位

5. 用户身份切换
su 用户名     半切换账户     (不会切换环境变量)
su - 用户名     全切换账户
su   -  用来初始化环境变量 $PATH $HOME等


小技巧:su -c "touch /tmp/user4.txt" -user4     用user4  执行“”里面的命令

普通用户如果想要用su -命令切换到root账户下,需输入root用户的密码,这样普通用户就会获得root的所有权限,很不安全,所以我们可以用sudo命令解决这个难题。

sudo   可以让普通用户临时获得另外一个用户的权限执行一些命令。
普通用户使用sudo命令需要编辑文件 
输入visudo 编辑/etc/sudoers 配置文件 (没有命令需安装 yum install -y sudo)
     root          ALL=ALL          ALL  
     xiaoqi     ALL(root)     /bin/ls     (手动输入,即时生效)   此处也可以填写用户组
(上面这行命令的意思是 允许xiaoqi临时使用root账户的/bin/ls命令)
[xiaoqi@laoqi ~]$ sudo /bin/ls /root/                    //在xiaoqi账户输入sudo命令,查看/root/下的文件
[sudo] password for xiaoqi:                                    [url=]//提示要输入密码[/url]       再用这个命令,密码会被记住
123  1.txt  anaconda-ks.cfg  install.log  install.log.syslog  test2.txt  test3.txt                [url=]//密码输入正确后,正常显示了/root/下的文件内容。[/url]
也可以visudo后,输入下面的指令:
xiaoqi       all=(root)        NOPASSWD: /bin/ls,  /bin/su
普通用户输入 sudo  bin/su -   即可切换到root账号下
或输入sudo su -亦可

怎么样限制让root不能登录系统?
vi /etc/ssh/sshd_config
文本文件找到这一行:PermitRootLogin Yes 改成PermitRootLogin no
重启一下服务 /etc/init.d/sshd restart        

格式: user   host=(as_user)  commands
比如:  aming  ALL=(root)   /bin/ls    //它的意思是,让aming这个普通用户,拥有root的权限,针对ls这个命令。

应用:只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户 
User_Alias USER_SU = test, test1, aming   //做用户的别名,可以写多个用户
Cmnd_Alias SU = /bin/su        //做命令的别名,可以写多个命令
USER_SU ALL=(ALL) NOPASSWD: SU   //其中NOPASSWD的意思是,普通用户使用sudo的时候,不需要输入自己的密码。