[用户管理]——用户与组管理的文件、命令

Linux登录主机取得shel的流程?

image


用户和用户组相关的4个重要文件

(1) /etc/passwd 存放用户信息的文件
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
--->以【:】为分隔符,共7个字段
字段1:用户名
字段2:密码占位符
字段3:用户帐号的UID号
字段4:用户所属组的GID号
字段5:用户描述信息
字段6:用户的宿主目录
字段7:用户登录后用到的shell(/sbin/nologin表示用户以任何方式都不可登录)

 
(2) /etc/shadow 存放用户密码信息的文件
root:$6$XHwHKv5C$1.Q2A9E71ps5SaBE1BSy85/XbMp7CJpb3R7kFMSSkCx6l7zbYKyPH4yZjEsS3yCcbcY4ih5Ykx3GStTtKQJV81:15112:0:99999:7:::
adm:*:15422:0:99999:7:::
--->以【:】为分隔符,共9个字段
字段1:用户名
字段2:已加密的密码字段【*:表示加密后的密码;!!:表示用户被锁定】
字段3:最近密码改动的日期
字段4:密码不可被改动的天数(与第3个字段相比)【默认0:表示随时可以改】
字段5:密码需要更改的天数(与第3个字段相比)【默认99999:表示永不过期】
字段6:需要更改密码期限前几天提醒【默认为7】
字段7:密码过期后的宽限日期
字段8:帐号失效日期【默认为空】
字段9:保留字段【未使用】

(3) /etc/group 存放用户组信息的文件
root:x:0:
bin:x:1:bin,daemon
--->以【:】为分隔符,共4个字段
字段1:组名
字段2:密码占位符
字段3:GID
字段4:组成员列表(用“,”隔开)

(4) /etc/gshadow 存放用户组密码信息的文件

root:::
bin:::bin,daemon
utmp:!::
——>以【:】为分隔符分为4个字段
字段1:用户组名
字段2:密码列(开头为!表示无合法密码,所以无用户组管理员)
字段3:用户组管理员帐号
字段4:属于该用户组的用户


有效用户组与初始用户组

创建一个用户test(同时会新建一个同名的用户组)
# useradd test
将test用户加入到用户组users中
# usermod -G users test
查看test用户在三个文件中的体现
# grep test /etc/passwd /etc/group /etc/gshadow
/etc/passwd:test:x:502:502::/home/test:/bin/bash --->所属GID502
/etc/group:users:x:100:test
/etc/group:test:x:502:  --->502是用户组test,即为test用户的初始用户组,是用户一登录就会取得的,所以第4字段就不需要写了
/etc/gshadow:users:::test
/etc/gshadow:test:!::

切换到test用户
# su - test

使用groups命令查看test用户支持的用户组 $
groups test users ------>第一个输出的用户组即为有效用户组
所以此时新建的文件其所属用户组为test(有效用户组) $
touch file $ ll file -rw-rw-r--. 1 test test 0 8月 2 03:49 file 使用newgrp命令切换有效用户组 $ newgrp users
$
groups users test
$
touch file2 $ ll file2 -rw-r--r--. 1 test users 0 8月 2 03:50 file2

用户管理相关命令

useradd创建用户
-c “描述信息”
-u 指定UID
-d 指定宿主目录【实际上如果这个目录没有修改过属主属组的话,并没有什么卵用】
-g 指定主要组(组名/GID)
-G 指定附属组(组名/GID)
-s 指定用户登录shell
-e 指定密码失效时间(格式为MM/DD/YY)
-M 指定默认不创建宿主目录
-r 添加系统账户。因为这样这种方式不会自动创建家目录,所以常配合 -m选项支持创建家目录
useradd -r user10 -m

passwd 设置密码
-d 清空用户的密码,使之无需密码即可登录
-l 锁定用户帐号(锁定后/etc/shadow密码字段前会多出!!字样)
-S 查看用户帐号的状态(是否被锁定)
-u 解锁用户帐号

usermod 用户相关修改
-l 更改用户帐号的登录名称
-L 锁定用户账户
-U 解锁用户账户
-u、-d、-e、-g、-G、-s 这些选项与useradd命令中的含义相同

userdel删除用户
userdel -r 表示连用户的宿主目录、账户信息、密码信息、同名组帐号、邮件记录等信息一并删除

goupadd创建用户组
groupadd [-g GID] 组名
-r 创建系统用户组

goupmod用户组相关修改
-g 修改组id
-n 修改组名(不建议修改)

groupdel删除用户组
groupdel 组名

gpasswd 添加/删除组成员
gpasswd  -a  用户名 组名             //将用户add添加到该组
Adding user root to group emei
gpasswd  -d  用户名 组名            //将用户delete移除该组
Removing user root from group emei
gpasswd  -M  root,zwj emei        //把多个用户加入到组

chage命令
选项参数:
-l :列出该账号的详细密码参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(密码失效日期)
-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
-M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

创建一用户test
# useradd test

为test用户创建一密码
# echo "123456" |passwd --stdin test
更改用户 test 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

修改该用户的创建时间
# chage -d 0 test

这时候我们发现用户test第一次登录会被强制要求该密码(很有趣和实用的命令)
$ su - test
密码:
您需要立即更改密码(root 强制)
为 test 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:

用户管理的3个相关文件

(1) /etc/default/useradd   
GROUP=100
HOME=/home        //默认的家目录位置
INACTIVE=-1         //密码失效日
EXPIRE=                //帐号失效日
SHELL=/bin/bash  //默认的shell
SKEL=/etc/skel      //用户家目录的内容数据的参考目录
CREATE_MAIL_SPOOL=yes   //是否主动帮用户创建邮件信箱

 
(2) /etc/skel/*
宿主目录的模板目录(新建用户时会默认自动拷贝到宿主目录下的)
其中三个重要的必须文件
.bash_profile:用户每次登录时执行这个文件的内容
.bashrc:用户每次登录shell时执行这个文件的内容
.bash_logout:用户每次退出登录时执行这个文件的内容
--->由于其特性,可以添加一些命令或设置(如alias)实现用户登录时自动运行,/root/.bashrc就可以很好的运用
--->缺少这三个文件用户也可以验证,但无法登录,su切换时出现-bash-4.1#

(3) /etc/login.defs
这个文件记录的是用户创建时所遵循的一些设置与规则
MAIL_DIR /var/spool/mail      //创建用户时在此目录中新建用户的mail文件
PASS_MAX_DAYS 99999   //密码需要被更改的天数(/etc/shadow文件中的第5字段)
PASS_MIN_DAYS 0             //密码不可被改动的天数(/etc/shadow文件中的第4字段)
PASS_MIN_LEN 5               //密码最小长度 ,已被pam模块替代,失去效用
[在root下给用户设置密码并不受这个约束]
[普通用户若要给自己修改密码,其密码长度要符合/etc/login.defs内部的约束,而且要符合复杂性要求(小写字母,大写字母,数字,特殊字符必须要包含三类)]
PASS_WARN_AGE 7
UID_MIN 500                   //UID的最小值
UID_MAX 60000            //UID的最大值
GID_MIN 500                  //GID的最小值
GID_MAX 60000            //GID的最大值
CREATE_HOME yes    //useradd创建用户时是否默认创建宿主目录
UMASK 077                   //宿主目录默认的权限为700
USERGROUPS_ENAB yes          //新建用户时如果没有指定组,默认新建一个同名的组
ENCRYPT_METHOD SHA512    //密码加密的方式


通过一个手工创建用户的例子理解“用户创建流程”               

手工添加用户qtds,该用户的uid=510,gid=510,GID=0,home=/qtds,shell=/bin/sh,到期时间为:2015-12-12,密码:aixcom,并能实现登录。

1. 根据要求,先生成到期时间值和密码加密值 

# echo $(($(date --date="2015/12/12" +%s)/86400+1))
16782

# grub-md5-crypt 
Password: 
Retype password: 
$1$fZseL$wzg7vzg7jO8XLRmo18rdB.

2. "写"相关文件

# echo 'qtds:x:510:510::/qtds:/bin/sh' >> /etc/passwd
# tail -n 1 /etc/passwd
qtds:x:510:510::/qtds:/bin/sh

# echo 'qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7:::' >>/etc/shadow
# tail -n 1 /etc/shadow
qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7:::

# echo 'qtds:x:510:' >> /etc/group
# tail -n 1 /etc/group
qtds:x:510:

3. 因为qtds这个用户的附属组为GID=0(即root组),所以在/etc/group这个文件中root那行字段4的组成员列表中添加qtds

# head -n 1 /etc/group
root:x:0:
# sed  '1,1c root:x:0:qtds'   -i   /etc/group   -i选项保存
# head -n 1 /etc/group
root:x:0:qtds

4. 新建家目录,修改属主属组和权限,拷贝必须的三个文件

# mkdir /qtds
# ll -d /qtds/
drwxr-xr-x. 2 root root 4096 7月  24 09:40 /qtds/
# chown qtds:qtds  /qtds/
# chmod 700   /qtds
# ll -d /qtds/
drwx------. 2 qtds qtds 4096 7月  24 09:40 /qtds/
# cp /etc/skel/.bash*  /qtds/
# ls -a /qtds/
.  ..  .bash_logout  .bash_profile  .bashrc
原文地址:https://www.cnblogs.com/snsdzjlz320/p/5727050.html