Linux用户
Linux用户介绍
Linux用户通常分为两类:
- 管理员用户(
root); - 普通用户(类似
Windows上的普通用户)。
Linux登录系统后,默认当前所在目录为用户主目录,类似Windows登录系统后,默认的所在目录为桌面。
- 管理员(
root)登录系统后默认目录为/root; - 普通用户登录系统后默认目录为
/home/username,username为用户名。 例如:普通用户fzm登录系统后,那么当前所在目录为。/home/fzm。
Linux创建用户命令
Linux中使用useradd命令来创建一个新用户。
命令格式格式:useradd [命令参数] 参数
常见命令参数:
- -d<登入目录>:指定用户登入时的启始目录;
- -D:查看或变更预设值;
- -g<群组>:指定用户所属的群组;
- -m:自动建立用户的登入目录;
- -M:不要自动建立用户的登入目录;
- -s:指定用户登入后所使用的
shell。
useradd必须以root权限才能执行,如果是普通用户想创建一个新用户时,需要在命令前加sudo命令来提升权限为root权限。
案例演示
1 . 查看useradd系统默认属性值,使用命令useradd -D。
笔者使用的系统是Ubuntu16.04,useradd系统默认值如下所示:
| 参数 | 说明 |
|---|---|
| GROUP | 指新创建的用户将被添加到用户组ID为100的公共用户组中 |
| HOME | 指新创建的用户将在/home目录下创建一个HOME账户 |
| INACTIVE | 指当密码逾期时,用户将不会被禁用 |
| EXPIRE | 指新创建的用户不会在设定日期被设置为逾期 |
| SHELL | 指新创建的用户使用/bin/sh(也就是bash)作为默认shell |
| SKEL | 指系统会将/etc/skel目录中的内容复制到新创建的用户的HOME目录 |
| CREATE_MAIL_SPOOL | 指系统不会在邮件目录中创建一个文件用于新创建用户账户接受邮件 |
2 . 使用useradd命令新创建一个用户test,并且自动建立用户的登入目录。
在背景介绍中,我们了解到,Linux中用户信息是保存在/etc/passwd文件中,我们可以使用命令tail /etc/passwd命令查看/etc/passwd文件最后10行中是否存在刚刚新创建的test用户信息。
Linux删除用户命令
Linux中使用userdel命令来删除一个已经存在的用户。
命令格式:userdel [命令参数] 参数
常见命令参数:
- -f:强制删除用户,即使用户当前已登录;
- -r:删除用户的同时,删除与用户相关的所有文件。
userdel必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。
案例演示
1 . 使用userdel命令删除一个已经存在的用户test,并且自动删除其家目录文件。
因为系统默认是不会给新创建的用户自动创建一个文件夹用于用户账户接收邮件,所以在使用userdel -r命令删除的时候会提醒/var/mail/test文件夹不存在。
用户密码存放地及方式
Linux中用户的登录密码是存放在/etc/shadow文件中,/etc/shadow文件中存放的是加密过后的密码,所以在/etc/shadow文件中看到的密码是加密过后的密文。
看下笔者的电脑中/etc/shadow文件存放的内容格式。
可以看到第一个冒号前是用户名,用户名是以明文的方式存放。
在第一个冒号和第二个冒号之间存放的是加密过后的密码,密码是以密文的方式存放,其中密文是由用户密码和其它信息加密后组成的,这里不做详细讲解,我们只需要知道如果第一个冒号和第二个冒号之间是*或者!或者空,则表示该用户没有密码,否则,则表示该用户是有密码。
例如:用户名fzm是存在密码,而mysql是不存在密码的。
使用passwd命令修改用户密码
命令格式:passwd [命令参数] 参数
常见命令参数:
- -d 删除密码;
- -l 停止账号使用;
- -S 显示密码信息。
passwd必须以root权限才能执行,如果是普通用户想执行passwd时,需要在命令前加sudo命令来提升权限为root权限。
案例演示
1: 使用useradd命令来新创建一个用户,使用passwd命令来设置登录密码。
使用useradd命令创建一个新用户(test),此时test用户是没有密码的,所以使用tail -n 1 /etc/shadow命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为!。
使用passwd命令为test用户设置密码时,可以看到需要输入两次密码,目的是为了确保两次输入的密码一致。当设置完密码后,可以看到/etc/shadow文件中test用户的密码部分已经为加密过后的密文。
2: 使用passwd命令来清除用户的密码。
使用passwd命令清除用户test的登录密码,使用tail -n 1 /etc/shadow命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为空,此时test用户是没有密码的。
使用chpasswd命令修改用户密码
chpasswd命令通常是用于批量修改用户密码,从标准输入批量读取成对的用户名和密码,其中输入的用户名和密码的格式为 用户名:密码 。
例如要批量更新用户密码,将用户名和密码写入到一个文件中,格式如下所示:
然后执行执行如下命令来更新密码:
sudo chpasswd < batch.txt
<符号表示输入重定向,接下来的实训中我们会详细的介绍。
命令格式:chpasswd [命令参数] 参数
常见命令参数
- -e:输入的密码是加密后的密文;
- -h:显示帮助信息并退出。
chpasswd必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。
案例演示
1: 使用chpasswd命令来更新用户登录密码。
chpasswd是从键盘不断的读入指令,我们可以使用Ctrl+D组合键来结束键盘输入。
图形化界面登录
Linux中添加用户后,用户在图形界面登录系统的方式和Windows一样,都是选择要登录的用户后直接输入登录密码即可。
案例演示
1: 添加一个新用户,并且设置登录密码,然后在图形界面登录。
使用login命令登录
login命令是让用户登录系统,可通过它的功能随时更换登入身份。当/etc目录里含名称为nologin的文件时,系统只允许root帐号登入系统,其他用户一律不准登入。
当使用login命令登录系统后,可以使用logout命令或者exit命令来退出当前用户登录,返回到登录前的用户状态。
命令格式:login [命令参数] 参数
参数为登录的用户名,可以不输入登录的用户名,直接输入login命令后回车,然后根据提示再输入用户名和密码。
常见命令参数
- -p:告诉login指令不销毁环境变量;
- -h:指定远程服务器的主机名。
login必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。
案例演示
1: 使用login命令来登录系统(文件/etc/nologin不存在)。
首先查看当前登录的用户名是fzm。
使用newUser用户来登录系统,然后查看当前登录的用户名。
使用logout或者exit命令退出newUser用户,然后在查看当前登录用户是否为fzm。
2: 使用login命令来登录系统(文件/etc/nologin存在)。
首先查看当前登录的用户名是fzm。
在/etc目录下新创建一个nologin文件,使用如下命令创建:
sudo touch /etc/nologin
使用普通用户newUser来登录系统,查看是否可以登录成功。
发现使用newUser用户是无法登录系统的,只有使用root用户才能登录系统。
使用su命令切换用户身份
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号的密码。
当使用su命令切换用户后,使用exit命令退出当前身份,返回原有登录用户身份。
注:如果当前用户身份是root,则使用su命令切换到其他用户的时候不需要相应用户的密码
命令格式:su [命令参数] 参数
参数为登录的用户名,如果没有参数,则默认切换为root用户。
常见命令参数
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;-l或--login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;-m,-p或--preserve-environment:变更身份时,不要变更环境变量;-s<shell>或--shell=<shell>:指定要执行的shell。
su命令所有使用者都可以执行。
案例演示
1: 使用su命令切换当前用户身份(不改变当前工作目录)。
首先查看当前登录的用户名是fzm,当前工作目录是/home/fzm。
切换当前用户为newUser用户,然后查看当前用户身份和当前工作目录。
使用exit命令退出newUser用户,然后在查看当前登录用户身份和当前工作目录。
2: 使用su命令切换当前用户身份(改变当前工作目录)。
首先查看当前登录的用户名是fzm,当前工作目录是/home/fzm。
切换当前用户为newUser用户,然后查看当前用户身份和当前工作目录。
使用exit命令退出newUser用户,然后在查看当前登录用户身份和当前工作目录。
Linux创建用户组命令
Linux 中使用groupadd命令来创建一个新用户组。
命令格式:groupadd [命令参数] 参数
常见命令参数:
- -g:指定新建工作组的id;
- -r:创建系统工作组,系统工作组的组ID小于500;
groupadd必须以root权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo命令来提升权限为root权限。
案例演示一
使用groupadd命令新创建一个用户组testGroup
在背景介绍中,我们了解到,Linux中用户组信息是保存在/etc/group文件中,我们可以使用命令tail /etc/group命令查看/etc/group文件最后10行中是否存在刚刚新创建的testGroup用户信息。
案例演示二
使用groupadd命令新创建一个用户组testGroupID,并且指定组的ID
注意:我们可以看到有时执行sudo命令就不需要输入密码,这是因为每次都输入密码比较麻烦,所以Linux会设置一个sudo的会话时间,就是说我们在第一次执行sudo的时候是要输入密码,那么在接下来的一段时间内在执行sudo的时候就不需要输入密码,这个会话时间默认是5分钟,用户也可以通过编辑/etc/sudoers来修改这个会话时间的大小。
同样我们可以使用命令tail /etc/group命令查看/etc/group文件最后10行中是否存在刚刚新创建的testGroupID用户信息。
Linux删除用户组命令
Linux 中使用groupdel命令来删除一个已经存在的用户组。
命令格式:groupdel 参数
参数为要删除的用户组名
groupdel必须以root权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo命令来提升权限为root权限。
案例演示一
使用groupdel命令删除上面创建的testGroup和testGroupID组
Linux查看用户所属组
Linux中查看一个用户所属的组两种方法。
使用id命令查看。
命令格式:id [命令参数] 参数
参数为要查询的用户名,默认是当前登录用户。
常见命令参数:
-g或--group:显示用户所属群组的ID;-G或--groups:显示用户所属附加群组的ID;-n或--name:显示用户,所属群组或附加群组的名称。
id命令的执行权限是面向所有用户。
案例演示:
使用id命令查看用户fzm所属组。
使用groups命令查看。
命令格式:groups 参数
参数为要查询的用户名,默认是当前登录用户。
执行权限:groups命令的执行权限是面向所有用户。
案例演示:
使用groups命令查看用户fzm所属组。
一个用户是可以属于多个组的。
Linux修改用户所属组
使用usermod命令修改用户组
如果要一个用户仅仅属于某一个组,而不是同时属于多个组,则使用如下命令:
命令格式:usermod -g 组名 用户名
如果要给一个用户添加一个新的组,同时保留原来有所的组,则使用如下命令:
命令格式:usermod -a -G 组名 用户名
usermod必须以root权限才能执行,如果是普通用户想执行usermod时,需要在命令前加sudo命令来提升权限为root权限。
案例演示一:
新创建一个用户newUser和新创建一个用户组newGroup,使用usermod命令将newUser用户所属组修改为newGroup。
首先,创建用户newUser和组newGroup,使用groups命令查看用户newUser所属的组,因为默认情况下新创建用户的时候会默认创建一个与用户名同名的私有组,并将新创建的用户所属组设置为私有组。接下来使用usermod命令来修改用户所属组,最后查看修改是否成功。
案例演示二:
新创建一个用户newUser和新创建一个用户组newGroup,使用usermod命令为newUser用户新添加一个组newGroup。
首先,创建用户newUser和组newGroup,使用groups命令查看用户newUser所属的组。接下来使用usermod命令来为用户添加一个新的组,最后查看添加是否成功。
使用useradd命令创建用户的时候指定用户组
在创建新用户的同时可以修改默认用户所属组,如果想在创建的时候直接将用户所属组修改成系统中已经存在的一个组,而不是使用默认私有组,则使用如下命令:
命令格式:useradd -g 组名 用户名
在创建新用户的同时可以为用户添加其它组,如果想在创建新用户的时候为用户添加一个已经存在的组,而不仅只属于默认创建的私有组,则使用如下命令:
命令格式:useradd -G 组名 用户名
useradd必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。
案例演示一:
新创建一个用户组newGroup,并且使用useradd命令新创建用户newUser同时将其所属组修改为newGroup。
首先,创建用户组newGroup,使用useradd命令创建新用户newUser,同时将其所属组修改为newGroup,最后查看修改是否成功。
案例演示二:
新创建一个用户组newGroup,并且使用useradd命令新创建用户newUser同时为其添加一个新的用户组newGroup。
首先,创建用户组newGroup,使用useradd命令创建新用户newUser,同时为其添加一个新的用户组newGroup,最后查看添加是否成功。
Linux查看用户属性命令
Linux中使用id命令可以查看用户的大多数信息。具体使用方法请参看上一关的实训。
Linux中还可以通过查看/etc/passwd文件来获取用户的信息。具体方法可以参考背景知识。
Linux中还可以使用finger命令来查询用户的信息。
注意:Ubuntu系统中默认没有安装finger命令,用户可以通过以下命令来安装finger,然后就可以使用finger。
sudo apt-get install finger
具体使用方法如下:
命令格式:finger [命令参数] 参数
常见命令参数
- -l:多行显示;
- -s:单行显示。这个选项只显示登入名称、真实姓名、终端机名称、闲置时间、登入时间、办公室号码及电话号码。如果所查询的使用者是远端服务器的使用者,这个选项无效。
案例演示:
使用finger命令查看用户信息。
例如,查看系统中已经存在的用户newUser信息。
Linux用户信息修改命令
Linux 中usermod命令是最强大的用户账户修改实用工具。
usermod命令我们在上一关只是简单的用到其-g、-G参数对用户的所属组进行修改,本关我们将进一步使用usermod命令的其它属性进行修改更多的属性。
命令格式:usermod [命令参数] 参数
常见命令参数:
- -c<备注>:修改用户帐号的备注文字;
- -d<登入目录>:修改用户登入时的目录;
- -e<有效期限>:修改帐号的有效期限;
- -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
- -g<群组>:修改用户所属的群组;
- -G<群组>;修改用户所属的附加群组;
- -l<帐号名称>:修改用户帐号名称;
- -L:锁定用户密码,使密码无效;
- -s:修改用户登入后所使用的
shell; - -u:修改用户
ID; - -U:解除密码锁定。
usermod必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。
案例演示一:
使用usermod命令修改用户名。
例如,在系统中已经存在一个用户名为oldUser的用户,由于某种原因,现在必须将其修改成newUser。
案例演示二:
使用usermod命令修改用户登录目录。
首先使用finger命令查看用户newUser的登录目录为/home/oldUser,然后新创建一个/home/newUser,使用usermod将用户newUser的登录目录修改成/home/newUser,最后使用finger命令查看是否修改成功。
Linux用户组信息修改命令
Linux 中使用groupmod命令来修改用户组信息。
命令格式:groupmod [命令参数] 参数
常见命令参数:
- -g<群组识别码>:设置欲使用的群组识别码;
- -n<新群组名称>:设置欲使用的群组名称。
groupmod必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。
案例演示:
使用groupmod命令修改已有用户组名称。
首先通过tail命令查看一个已有用户组信息,可以看到该用户组名为oldUser,并且组ID为1004,通过groupmod命令将其名由oldUser修改成renameOldUser,最后使用再查看是否修改成功。