1 用户账号
① 我们在登录Linux时候 系统都做了哪些事情?
- 先 /etc/password 检查是否有输入的账号,如果有则找出对应的UID(用户ID)GID(组ID),另外 该账号的主文件夹与对应shell设置一起读出
- 核对密码表;这时Linux进去/etc/shadow里面找到对应的UID 然后核对刚刚输入的密码与这个文件的密码是否相同;
- 都OK,就进入 shell掌控阶段
- (如果要备份Linux系统账号的话 一定要备份这两个文件 /etc/password /etc/shadow )
② /etc/password 文件结构
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
每一行代表一个用户; : 把一行分成了7段,他们分别代表着
1.账号名称 比如 root
2 密码 早期UNIX系统密码就是放在这个字段,但是这个文件特效是所有的程序都能读取,会造成密码容易被窃取,因为后来密码的字段放到
/etc/shadow中了,所以这里默认填写了X
3.UID 用户标识符 UID=0表示系统管理员;可以设置多个系统管理员 但是不建议这样做;
1~499(系统账号)这个范围是保留给系统使用的ID ;
这个范围会有 /nologin 的情况,那么nologin是什么意思呢?
系统账号的shell使用 /sbin/nologin ,此时无法登陆系统,即使给了密码也不行。
所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理, www 服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
有时候有些服务,比如邮件服务,大部分都是用来接收主机的邮件而已,并不需要登陆。假如有账号试图连接我的主机取得shell,我们就可以拒绝。
另外,如果我想要让某个具有 /sbin/nologin 的用户知道,他们不能登陆主机时,可以新建 /etc/nologin.txt 这个文件,在文件内面写上不能登陆的原因,当用户登录时,屏幕上就会 出现这个文件里面的内容。
细分1~99:由distributions自行创建的系统账号
100~499:若用户有系统账号的需求时候,可以使用的账号UID
500以上 (可登录账号)给一般用户用的
4.GID(GroupID 组ID) /etc/group 文件与/etc/passwd 差不多的 就是让 组名 跟这个GID对于起来;
5.用户基本信息说名列 ,没啥特别的 解释这个账号的意义
6.主文件夹 ,比如root账号是 /root ;用户登录会默认跑到这个文件夹;如果想修改主文件夹 那么修改这个字段就行了;默认的用户主文件夹是/home/yourIDname
7.Shell ;默认使用的shell
③ /etc/shadow文件结构
我们知道很多程序的运行都与权限有关,而权限与UDI/GID有关,所以各个程序都需要读取 /etc/passwd 来了解不同账号的权限 ;那么这个文件的权限设置为了 -rw-r--r--;密码放在passwd的第二个字段很不安全;会被别人获取;所以后来发展出将密码移动到了 /etc/shadow里面;
:分割 有9个字段;
1.账号名称
2.密码 经过加密的密码 ;虽然加密了 但是还是有可能被破解,所以这个文件只有root才能够读取;
3.最近改动密码的日期
4.密码不可被更改的天数(与第三个相比)
5.密码需要重新更改的天数
6.密码需要更改旗下钱的警告天数
7.密码过期后台的账号宽限时间
8.账号失效日期
9.保留字段
root密码忘记了怎么办?
④/etc/group /etc/gshadow (省略)
2 账号管理
2.1 新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel
1.新增用户 adduser 用户名 ; 这样会默认创建跟用户名一样的 用户组;
adduser -u 700 -g users test3
-u 自定义UID
-g 自定义用户组
-r 创建系统账号 ;不会主动创建主文件夹
我们在用 adduser 用户名 ; 的时候 会默认创建修改很多文件; 这些默认的数据从哪里来呢?
用命令 useradd -D 查看默认值
上面的数据在文件 /etc/default/useradd中查出来的;
(略过)
- 设置密码 passwd 用户名
passwd [-l] [-u] [-S]
[-l] lock锁定用户密码 在/etc/shadow 的密码字段前面加上了!
[-u] unlock 用户
[-S] 查看密码相关参数 ;比如刚刚 -l 了;test LK 2017-01-04 0 99999 7 -1 (Password locked.) 显示被锁定了;
查看密码详细参数的命令还有 chage -l 用户名
root 用户注意 passwd 修改别人的密码一定要加上用户名 否则 就是修改root的密码了
- 修改用户一些参数 usermod [-cdegGlsuLU] username
usermod -L username 锁定用户 == passwd -l username
usermod -U username 解锁用户 == passwd -u username
usermod -c username 修改用户描述信息 /etc/passwd 第五列信息
-g :后面接初始用户组;
-G :后面接次要用户组
-l: 修改账号名称
- userdel 删除用户
userdel -r username 连同主文件夹也一起删除
5 id 查询用户相关ID信息
2.2 新增与删除用户组
id 查看用户信息
1. groupadd [-g gid] [-r] 用户组名
-g 指定GID
-r 新建系统用户组。
2. groupmod [-g gid] [-n group_name] 用户组
-g 修改GID -n 修改用户组名
最好不要随意改动GID
3. groupdel [groupname]
4.gpasswd:用户组管理员功能
作用是 让某个用户组具有一个管理员,这个使用后管理员可以管理哪些账号可以加入/移除 该用户组
范例:
groupadd testgroup 新建用户组
gpasswd testgroup 给用户组一个密码
gpasswd -A test testgroup 将用户组的管理员为test
gpasswd -a test testgroup 登录test用户; 将test 或其他用户加入到testgroup组中
登录到src用户 执行这个语句就提示没有权限
gpasswd [-A user1, ....] [-M user3, ...] groupname
下面是 root用户有权限执行的
如果没有参数 表示给与groupname一个密码 在 /etc/gshadow
-A 将groupname 的主控权交给后面的用户去管理(该用户组的管理员)
-M 将某些账号加入这个用户组中
-r 删除这个组的密码
-R 让密码失效
下面是用户组管理员有权限执行的
-a 将某位用户加入到这个组中
-d 将某位用户删除出groupname 这个用户组中
5 newgrp [groupname]
上面的测试中 我们将用户test 也加入到新创建的testgroup1中
test就有2个组;我们可以用newgrp来切换当前的组;来获取对应组的权限
newgrp testgroup1
切换成功 我们用 id 看看
第一个出现的就是当前所在的组; 可以看到 有一个组名是test ;那是因为 centos adduser 的时候会默认创建同用户名的用户组