账户和组
用户和组的简介
Linux系统对账号与组的管理是通过ID号来实现的。用户ID号叫UID
,组ID号叫GID
。其中:
- UID=0是超级管理员,也就是root账号
- UID=1~499被系统所预留
- 个人创建的用户的UID会从500开始算起
Linux操作系统中的组分为基本组和附加组,一个用户同一时刻只能加入同一个基本组,但可以同时加入多个附加组。默认在创建用户时,系统会自动创建同名的组,并设置用户加入该组。
查看用户ID的命令是:id
用法:id 用户名
创建用户和组
创建用户命令:useradd
常用选项:
-
-c
设置账号描述信息,一般为账号全称 -
-d
设置用户家目录,默认/home/用户名 -
-g
设置账户基本组 -
-G
设置账户附加组,多个附加组之间用逗号隔开 -
-s
设置账户登录Shell,默认为bash -
-M
不创建用户家目录,一般与-s
连用 -
-u
指定账号UID
示例1:创建普通用户mori,以及对应的组
$ useradd mori
$ id mori
uid=1003(mori) gid=1003(mori) 组=1003(mori)
示例2:创建普通用户syushin,账户家目录为/home/syushin,账户基本组为root,附加组为mori
$ useradd -d /home/syushin -g root -G mori syushin
$ id syushin
uid=1004(syushin) gid=0(root) 组=0(root),1003(mori)
示例3:创建无法登录系统,且没有家目录的用户user1
$ useradd -s /sbin/nologin -M user1
创建组命令:groupadd
选项:-g
设置组ID号
示例:
$ groupadd laowan #创建组laowan
$ groupadd -g 2000 xiaoming #创建xiaoming组,组ID为2000的
修改用户和组
修改用户密码命令:passwd
常用选项:
-
-l
锁定账户,仅root用户可用 -
--stdin
从文件或者管道读取密码 -
-u
解锁账户 -
-d
快速清空用户密码,仅root可用
示例:
$ passwd mori
更改用户 mori 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
$ echo “1234qwer” | passwd --stdin mori #通过管道指定用户mori的密码
$ passwd -l mori #锁定用户mori
$ passwd -u mori #解锁用户mori
修改用户信息命令:usermod
选项:
-
-d
修改用户家目录 -
-e
修改用户失效日期 -
-g
修改用户所属基本组 -
-G
修改用户所属附加组 -
-s
修改用户登录shell -
-u
修改用户UID
示例:
$ usermod -d /home/harucha haru
$ usermod -e 2019-2-28 haru # 设置haru用户失效日期为2019-2-28
$ usermod -g root haru
$ usermod -s /bin/bash haru
$ usermod -u 1314 haru #修改haru用户的ID为1314
删除用户和组
删除用户命令:userdel
选项:-r
删除账户及相关文件
示例:
$ userdel mori
$ userdel -r syushin # 删除组syushin,并删除/home下的syushin目录
删除组命令:groupdel
示例:groupdel mori
与用户相关的配置文件
$ ll /etc/passwd /etc/shadow /etc/group /etc//gshadow
-rw-r--r--. 1 root root 718 2月 28 14:44 /etc/group
----------. 1 root root 573 2月 28 14:44 /etc//gshadow
-rw-r--r--. 1 root root 1684 2月 28 14:44 /etc/passwd
----------. 1 root root 1081 2月 28 14:55 /etc/shadow
/etc/passwd配置文件详解
$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash # 一一对应的说明如下
用户名:密码占位符:账户UID:组GID:附加信息:用户家目录:用户登录的shell
常见面试题
创建3个用户user1,user2,user3,并设置密码为123456,禁止使用for,while循环。
$ echo user{1..3}|xargs -n1 -exec useradd # 创建用户
$ echo "123456" | passwd --stdin user1 user2 user3 # 设置密码
su命令
su
命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。这个工具可以让你在不登出当前用户的前提下登录为另外一个用户。
这个命令经常被用于切换到超级用户或 root 用户,因为工作中经常需要root权限(生产中比较少会直接使用root用户)。切换到root用户可直接输入$ su
或者$ su root
需要知道root用户的密码。
[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ whoami
mori
[mori@moli_linux1 root]$
[mori@moli_linux1 root]$ su root
密码:
[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$
还有一个命令可用于用户切换,比起su
命令就多了一个-
,这个命令就是su -
。su
命令和su -
命令有什么区别?
-
su
命令在切换到用户之后仍然保持旧的(或者说原始用户的)环境 -
su -
命令则是创建一个新的环境(由 root 用户 ~/.bashrc文件所设置的环境),相当于使用用户正常登录(从登录屏幕登录)。
举个例子:
[root@moli_linux1 ~]$ whoami
root
[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ pwd
/root # 环境依旧是root用户的环境
[mori@moli_linux1 root]$ exit
exit
[root@moli_linux1 ~]$ su - mori # 这里使用了 su -
上一次登录:二 3月 5 10:35:16 CST 2019pts/0 上
[mori@moli_linux1 ~]$ pwd
/home/mori
上面命令,首先使用root用户切换到mori用户,使用su
命令,切换后当前目录仍在/root
目录下,之后退出使用su - mori
切换用户,切换后目录在/home/mori
目录下。
sudo命令
sudo
命令允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。sudo
命令与su
命令有什么区别?
-
sudo
命令需要输入当前用户的密码,而su
命令需要输入root密码。 -
sudo
命令只允许使用提升的权限运行单个命令,而su
命令会开启一个新的shell,同时允许使用root权限运行多个命令。 -
sudo
相比较su
会灵活很多,因为你可以限制sudo用户可以使用哪些命令。
sudo命令配置文件-sudoers
centos7中可直接使用命令$ visudo
打开sudoers配置文件。
打开文件后,找到红线配置的这一行。这一行的意思是,允许root用户在这个操作系统的任何地方允许任何命令。
最后一个ALL为任何命令,我们可以自定义用户使用什么命令。
比如我在root这一行下面添加一行新的配置如下:
mori ALL=(ALL) /usr/bin/ls, /usr/bin/cat
这一行表示,允许mori用户使用sudo
命令执行ls和cat命令。配置后执行wq退出即可,保存成功sudoers文件就自动生效了。
验证:正常情况下,我们使用su切换到mori用户,然后对/root目录执行ls
命令,会提示权限不够,但是使用sudo之后就会获得root用户的权限而能够执行ls命令。
[root@moli_linux1 ~]$ su mori
[mori@moli_linux1 root]$ ls # 无法执行ls命令
ls: 无法打开目录.: 权限不够
[mori@moli_linux1 root]$ sudo ls # sudo提升权限
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] mori 的密码: # 第一次执行sudo命令需要输入当前用户密码
192.168.229 anaconda-ks.cfg git_data server shell-100 test-find
[mori@moli_linux1 root]$ sudo ls # 成功执行
192.168.229 anaconda-ks.cfg git_data server shell-100 test-find
当第一次使用sudo的时候需要使用密码,如何才能不用输入密码就能使用sudo获取权限呢?只需要在上面配置mori用户的配置里添加:NOPASSWD:
即可。这样就可以使用户在用sudo命令时不用键入密码。
mori ALL=(ALL) NOPASSWORD: /usr/bin/ls, /usr/bin/cat
这里需要注意一下格式,NOPASSWD之后需要有分号,每个命令之间用逗号+空格隔开。命令需要使用绝对路径。
限制root远程登录
生产环境下,为了提高系统安全性,通常是限制root用户远程连接登录的,通常是使用秘钥。那么怎么实现限制root用户登录呢?在ssh服务的配置文件中配置。
1、编辑ssh配置文件
$ vim /etc/ssh/sshd_config
2、找到#PermitRootLogin yes
PermitRootLogin no
# 将#PermitRootLogin yes修改为PermitRootLogin no
3、重启shh服务
$ systemctl restart sshd.service
这样使用root连接服务器的时候就会失败了。
我们限制了root用户登录,但是当普通用户需要使用到root权限的时候怎么办呢?
解决:使用sudo命令,在sudoers文件中设置普通用户有执行su命令的权限,可以使用户su
到root用户下。
第一、编即sudo配置文件,添加配置
# 这一行的配置相当于创建一个组,组名为USERS,这个组有三个用户mori,userA,userB
User_Alias USERS = mori, userA, userB
# 然后可以用组名来设置命令权限,只有组内的用户都可以使用sudo来执行su命令
USERS ALL=(ALL) NOPASSWD: /usr/bin/su
第二、普通用户登录服务器,执行sudo命令获取su命令的执行权限,再切换到root用户下
[mori@moli_linux1 ~]$ sudo su -
上一次登录:二 3月 5 10:31:47 CST 2019pts/0 上
最后一次失败的登录:二 3月 5 12:42:11 CST 2019从 192.168.30.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
[root@moli_linux1 ~]$ # 登录成功!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。