概述
Linux下有三类用户:
- 1.超级用户:root具有操作系统的一切权限,uid为0;
- 2.普通用户:具有操作系统有限的权限,uid 在500-6000之间;
- 3.伪用户:为了方便系统管理,满足相应的系统进程文件属主的要求,不能登录,uid在1-499之间;如ftp用户、apache用户。
Linux用户相关文件:
-
1./etc/passwd:保存用户账号相关信息
在/etc/passwd下,只定义账号不定义口令,在该文件中一行定义一个用户,冒号将每行分七个部分:
账号名称、密码、用户标识码(id)、用户组id、用户相关信息、用户home目录、用户环境; -
2./etc/shadow:保存密码相关信息
在/etc/shadow下,只有root可以读,用冒号将其分成9段:
用户名、口令(加密口令,如果第一个字符为!则不能登录)、最后一次修改时间、最大时间间隔、最小时间间隔(99999表示永不过期)、警告时间、不活动时间、失效时间 -
3./etc/group:保存用户组信息,共有四个部分:分别表示用户组名称、用户组密码、GID、用户组支持的用户。
用户账号管理:
1.创建用户
创建一个用户,一般需要做以下的工作:
- 1.在/etc/passwd中添加一条记录
- 2.创建用户的主文件夹
- 3.在主文件夹中配置默认的配置文件
- 4.设置初始密码
这些工作可使用useradd
来完成,该命令及其参数如下:
useradd [-u uid] [-g 初始用户组] [-mMr] [-d 主文件夹] username
参数说明:
-u UID :指定用户的uid
-g groupname:指定用户初始用户组
-m:强制创建用户主文件夹
-M:强制不创建用户主文件夹
-r:创建一个伪用户账号,uid被限制在1-500之间
如,要创建一个用户名为Tom的用户:
root@ubuntu:/# useradd Tom
查看三个用户相关文件:
root@ubuntu:/# cat /etc/passwd | grep Tom
Tom:x:1004:1004::/home/Tom:
root@ubuntu:/#
root@ubuntu:/# cat /etc/shadow | grep Tom
Tom:!:17730:0:99999:7:::
root@ubuntu:/# cat /etc/group | grep Tom
Tom:x:1004:
如果不加任何参数,则useradd
命令将会使用默认值,查看/home文件夹,你会发现它并没有创建用户主文件夹,这个默认配置有关,其默认值配置在/etc/login.defs
中,如以下这些默认值:
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
GID_MIN 1000
GID_MAX 60000
因此,如果要在创建用户时默认创建文件夹,则在/etc/login.defs
文件中添加配置信息:
CREATE_HOME yes
如果使用useradd -m|M
创建用户,则无论CREATE_HOME
是否配置,将会强制进行主文件夹的创建或不创建。
另外,使用useradd -D
可以查看创建用户的预设值:
jyq@ubuntu:~$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
2.设置密码
当创建好用户后,是否就可以登录了呢?由于没有设置密码,因此此时还不能进行登录,查看/etc/shadow
可看到,创建的用户第二栏为一个感叹号,说明此时密码是被封锁的,因此,还需要对新建用户设置密码。
passwd [options] [LOGIN]
常用options:
-l: 使得LOGIN用户密码失效,锁定用户
-S: 查看当前用户密码状态
-u: 解锁该用户
jyq@ubuntu:~$ sudo passwd jyq
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
jyq@ubuntu:~$
查看/etc/shadow
:
jyq:$6$hMJPDwyq$uSaG3tK.HuC7G0h7gIAPN/xmSujFTlZ6aj.KkcoZ2sDHktDV4b1Dqp0P7jwa3jJMcQoQpSJ0uf0YTk56Ydcwf/:17735:0:99999:7:::
此时,就可以使用用户名jyq
登录使用了。
锁定用户登录密码
如果要禁止某个用户登录,则可以通过passwd -l
锁定该用户:
jyq@ubuntu:~$ sudo passwd -l jyq
passwd: password expiry information changed.
此时查看/etc/shadow
文件,则会在密码栏加入了感叹号:
jyq:!$6$hMJPDwyq$uSaG3tK.HuC7G0h7gIAPN/xmSujFTlZ6aj.KkcoZ2sDHktDV4b1Dqp0P7jwa3jJMcQoQpSJ0uf0YTk56Ydcwf/:17735:0:99999:7:::
此时再使用该用户登录,则登录失败。
解除密码锁定
要解除锁定,则使用passwd -u
命令:
jyq@ubuntu:~$ sudo passwd -u jyq
passwd: password expiry information changed.
jyq@ubuntu:~$
此时查看/etc/shadow
文件,发现感叹号消失:
jyq:$6$hMJPDwyq$uSaG3tK.HuC7G0h7gIAPN/xmSujFTlZ6aj.KkcoZ2sDHktDV4b1Dqp0P7jwa3jJMcQoQpSJ0uf0YTk56Ydcwf/:17735:0:99999:7:::
3.删除用户
删除用户使用userdel
命令,具体参数如下:
userdel [options] LOGIN
options:
-f: 强制删除该用户对应文件
-r: 删除主文件夹目录和邮件目录
-Z: 移除和该用户映射的SElinux用户
如:
$ sudo userdel -fr jyq
此时查看/etc/shadow
文件,对应用户则删除。
4.修改用户
经常需要对创建的账户进行修改,修改账户使用usermod
命令:
usermod [options] LOGIN
options:
-c: 修改账号描述信息,即/etc/passwd第五列内容
-d: 修改主文件夹目录
-g GROUP: 修改用户初始用户组
-G GROUP: 修改用户次要用户组
-a:和-G一起使用,表示添加次要用户组
-l new LOGIN: 修改用户名称
-L: 锁定用户
-U: 解除锁定
用户之间的切换
用户之间进行切换,常用的有两个命令:su
和sudo
.
su的使用
su
可以进行任何用户之间的切换,使用参数如下:
su [-lmpc] [username]
options:
-: 单独使用,表示将以login-shell的方式登录用户
-l: 同-
-m/p: 表示使用当前的环境变量,不会读取新用户的环境变量
-c: 后加一个命令,表示仅仅执行一次命令
使用su
来进行切换用户时,都需要用户密码;如果不指定用户名,则默认切换为root用户,如su
或su -
就表示切换到root用户,但需要root密码:
jyq@ubuntu:~$ su
Password:
root@ubuntu:/home/jyq#
# 查看PATH变量,依旧使用原来用户的配置
root@ubuntu:/home/jyq# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# exit将会退出su的环境
root@ubuntu:/home/jyq# exit
exit
# 使用-或者-l,则表示使用loging-shell的方式登录,因此会重新读取环境变量
jyq@ubuntu:~$ su -
Password:
root@ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@ubuntu:~#
再来看一个和非root用户切换的示例:
# 由jyq切换为jack
jyq@ubuntu:~$ su -l jack
Password:
jack@ubuntu:~$ exit
logout
jyq@ubuntu:~$
su
的优缺点可以总结如下:
- 优点:可以在任意用户之间进行切换。
- 缺点:需要切换用户的密码。
从上面可以看出,由于每次切换都需要密码,如果多人都需要切换root用户进行操作,那么每个人都需要知道root用户的密码,安全性就下降了不少。
sudo的使用
sudo
允许授权用户以超级用户的权限来执行命令。该命令可以说是非常常用了,在上述的示例中都有用到了它,这里就来说下它的具体含义。
相对于su
命令在切换用户时,需要知道用户的密码,sudo
命令则只需要输入当前用户密码就可以了。默认情况下,仅仅root用户可以执行sudo
,因此,这个命令一般用来对普通用户没有权限的命令以root身份进行执行,使用方式如下:
sudo [-u username]
sudo -u username
这种方式不常用,因此这里就不做总结。sudo
经常用来操作root,如:
jyq@ubuntu:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
jyq@ubuntu:~$
当以普通用户查看/etc/shadow
文件时,无法查看,会提示Permission Denied
,那么就可以通过sudo
命令以root身份查看:
jyq@ubuntu:~$ sudo cat -n /etc/shadow | sed -n 1,5p
[sudo] password for jyq:
1 root:$6$7fR3XIQ/$2UTREEJManpDqwi6q47YOgwPIhcQ392Espq6Er/vpYVuT.mLHOdgJ.bWr.QrGDI0EjuG/YVliT508pQmEbt3O0:17730:0:99999:7:::
2 daemon:*:17212:0:99999:7:::
3 bin:*:17212:0:99999:7:::
4 sys:*:17212:0:99999:7:::
5 sync:*:17212:0:99999:7:::
jyq@ubuntu:~$
当通过useradd -m xxx
新添加一个用户后,使用该帐号登录后使用sudo
时,有可能会出现:
xxx is not in the sudoers file. This incident will be reported
此时需要配置/etc/sudoers
文件:
$ sudo vim /etc/sudoers
# 使用者账号 登陆者的来源主机名=(可切换的身份) 可下达的命令,ALL为默认值
xxx ALL=(ALL) ALL