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