Linux 是一个多用户的系统,我们可以多个用户同时登陆 Linux,在 Linux 中用户有三种角色:
root
拥有对系统的最高的管理权限 ID=0每个用户有三个信息可以证明自己: 一个是 配置文件,一个是 用户组文件,一个是 用户对应的密码信息。
/etc/passwd
:记录了每个用户的基本属性,并且对所有用户可读,每一行记录一个用户,每行记录用冒号分割。/etc/group
:用户组的所有信息存放地。/etc/shadow
:用户密码单独分离出来放在了 shadow
下,该文件只有 root
用户拥有读的权限。使用方法:
useradd -d -u [UID] -g [初始组] -s [/bin/bash] 用户
参数如下:
-c comment 给新用户添加备注
-d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话)
-e expire_date 用 YYYYY-MM-DD 格式指定一个账户过期的日期
-f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用;0 表示密码一过期就立即禁用,-1 表示禁用这个功能
-g initial_group 指定用户登录组的 GID 或组名
-G group ... 指定用户除登录组之外所属的一个或多个附加组
-k 必须和 -m 一起使用,将 /etc/skel 目录的内容复制到用户的 HOME 目录
-m 创建用户的 HOME 目录
-M 不创建用户的 HOME 目录(当默认设置里指定创建时,才用到)
-n 创建一个同用户登录名同名的新组
-r 创建系统账户
-p passwd 为用户账户指定默认密码
-s shell 指定默认登录 shell ,有时候禁止登录使用 /sbin/nologin
-u uid 为账户指定一个唯一的 UID
useradd
命令背后发生了什么?
UID
GID
,并将用户设置为该组/home
目录下创建一个与用户同名的目录/bin/bash
passwd
命令为新用户设置密码使用举例:
添加一个名为 gaosh
的用户,并使用 bash
作为登陆的 shell。
[root@zmgaosh ~]# useradd gaosh
[root@zmgaosh ~]# tail -1 /etc/passwd
gaosh:x:1000:1000::/home/gaosh:/bin/bash
字段 | 含义 |
---|---|
gaosh | 用户名 |
x | 密码占位符 |
1001 | 用户的 UID,它都是用数字来表示的 |
1001 | 用户所属组的 GID,它都是用数字来表示的 |
用户描述信息 | 对用户的功能或其它来进行一个简要的描述 |
/home/goash | 用户主目录(shell 提示符中 ~ 代表的那个) |
/bin/bash | 用户登录系统后使用的 shell,默认是 /bin/bash |
[root@zmgaosh ~]# useradd -u 1111 xinsz08 # 创建用户指定 UID 为 1111
[root@zmgaosh ~]# id xinsz08 # 查看用户所属组,及 UID 和组 ID 信息
uid=1111(xinsz08) gid=1111(xinsz08) 组=1111(xinsz08)
[root@zmgaosh ~]# tail -1 /etc/passwd # 查看 /etc/passwd 新建用户
xinsz08:x:1111:1111::/home/xinsz08:/bin/bash
[root@zmgaosh ~]# ls /home/xinsz08/ -a # 查看家目录默认模板
. .. .bash_logout .bash_profile .bashrc
[root@zmgaosh ~]# useradd -d /opt/xinsz xinsz
[root@zmgaosh ~]# ls -a /opt/xinsz/ # 可以看到家目录跑 /opt/xinsz 下了
. .. .bash_logout .bash_profile .bashrc
[root@zmgaosh ~]# tail -1 /etc/passwd
xinsz:x:1112:1112::/opt/xinsz:/bin/bash
就相当于一个财务加到前台组,让财务偶尔也干前台。
[root@zmgaosh ~]# useradd qiantai # 创建了一个前台
[root@zmgaosh ~]# id qiantai
uid=1113(qiantai) gid=1113(qiantai) 组=1113(qiantai)
[root@zmgaosh ~]# useradd -g qiantai caiwu # 把财务放在前台的组里
[root@zmgaosh ~]# id caiwu
uid=1114(caiwu) gid=1113(qiantai) 组=1113(qiantai) # 可以看到财务属于前台组,万一前台请假,财务顶上干前台
adduser
是创建用户的另外一个命令,使用方法相同。
[root@zmgaosh ~]# which adduser
/usr/sbin/adduser
[root@zmgaosh ~]# ll /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 4月 27 22:17 /usr/sbin/adduser -> useradd
由此可见,adduser
是 useradd
的软连接。
-r
:会连同家目录和 /var/mail
的目录一同删除
userdel 用户名
:皇帝下令斩立决userdel -r 用户名
:皇帝下令斩立决并抄家灭族[root@zmgaosh ~]# userdel -r xinsz08
密码文件放在 /etc/shadow
下。
[root@zmgaosh ~]# head -3 /etc/shadow
root:$6$SlVomD$EBjlGVUUOnCCk.lupiqnL58ESGeVJBNCvIc7IE6LNQ9J66OEhNSvlZQvk8EJkx6laSHDeDnuVN3NnJgqZxZid.:18430:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
同 /etc/passwd
文件一样,文件中每行代表一个用户,同样使用 :
作为分隔符,不同之处在于,每行用户信息被划分为
9
9
9 个字段。每个字段的含义如下:
1-用户名 : 2-加密密码 : 3-最后一次修改时间 : 4-最小修改时间间隔 : 5-密码有效期 : 6-密码需要变更前的警告天数 : 7-密码过期后的宽限时间 : 8-账号失效时间 : 9-保留字段
!
或者 *
的话,说明这是一个不能登录的账户,从上面可以看出,ubuntu
默认的就不启用 root
账户。方法1:
[root@zmgaosh ~]# useradd gaosh1
[root@zmgaosh ~]# passwd gaosh1
更改用户 gaosh1 的密码
新的密码:
无效的密码: 密码未通过字典检查 - 它没有包含足够的不同字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新
[root@zmgaosh ~]#
方法2:使用 echo
命令,可以实现很方便、快捷地修改用户密码。
# echo password | passwd --stdin username
[root@zmgaosh ~]# echo 123456 | passwd --stdin gaosh2
更改用户 gaosh2 的密码
passwd:所有的身份验证令牌已经成功更新。
[root@zmgaosh ~]#
这里有个问题,如果两个不同的用户,他们的密码一样,在 /etc/shadow
中加密的 hash
值一样吗?答案是不一样,要不然太容易破解了。
命令 | 作用 |
---|---|
id | 用户和组的信息 |
whoami | 查看当前有效用户名 |
who | 显示目前登入系统的用户信息 |
w | 显示已经登陆系统的用户列表 |
users | 用于显示当前登录系统的所有用户的用户列表 |
usermod [参数] 用户名
常用参数:
-u UID
-d 宿主目录
-g 起始组
-G 附加组
-s 登录 shell
-L 锁定
[root@zmgaosh ~]# id xinsz
uid=1112(xinsz) gid=1112(xinsz) 组=1112(xinsz)
[root@zmgaosh ~]# usermod -u 2222 xinsz
[root@zmgaosh ~]# id xinsz
uid=2222(xinsz) gid=1112(xinsz) 组=1112(xinsz)
[root@zmgaosh ~]#
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz:/bin/bash
[root@zmgaosh ~]# usermod -s /sbin/nologin xinsz
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz:/sbin/nologin # 可以看到变成了 nologin
[root@zmgaosh ~]#
[root@zmgaosh ~]# usermod -m -d /opt/xinsz1 xinsz
[root@zmgaosh ~]# grep xinsz /etc/passwd
xinsz:x:2222:1112::/opt/xinsz1:/sbin/nologin # 可以看到家目录变成了 /opt/xinsz1
[root@zmgaosh ~]# grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
gaosh:x:1000:1000::/home/gaosh:/bin/bash
qiantai:x:1113:1113::/home/qiantai:/bin/bash
caiwu:x:1114:1113::/home/caiwu:/bin/bash
sanwu:x:1115:1115::/home/sanwu:/bin/bash
sanwu1:x:1116:1116::/home/sanwu1:/bin/bash
gaosh1:x:1117:1117::/home/gaosh1:/bin/bash
gaosh2:x:1118:1118::/home/gaosh2:/bin/bash
[root@zmgaosh ~]#
[root@zmgaosh ~]# grep /bin/bash /etc/passwd | wc -l
其实是在统计 /etc/passwd
文件中有多少包含 bash
的行。
[root@zmgaosh ~]# useradd -u 0 -o admin
[root@zmgaosh ~]# grep admin /etc/passwd
admin:x:0:1119::/home/admin:/bin/bash
当你使用 -u
选项指定 UID 时,-o
选项允许你创建具有非唯一 ID 的用户,例如:
# useradd -o huey -u 501
# useradd -o dewey -u 501
# useradd -o louie -u 501
简而言之,这允许设置多个用户具有相同的权限和特权,但具有不同的主目录和密码。