第五章 Linux系统用户与用户组管理
5.1
cat /etc/passwd | head或者cat /etc/shadow | head -n 3可以查看系统存在的用户有哪些
但下面这行命令更加简洁可以查看有哪些用户
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
直接在命令行输入w回车可以直接查看目前在Linux活跃的用户
Last 查询当前和过去登录的用户信息 输出的有用户名、登录终端、登录ip、登陆时间、登出时间(在线时间)
lastlog 查看所有用户最后一次登录时间 输出的有用户名、登录终端、登录ip、最后一次登陆时间
5.2
groupadd 增加一个组,格式为groupadd [-g GID] groupname 。如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的。
groupdel 删除一个组,格式为groupdel groupname。如果组中有用户存在则不能删除这个组,必须要删除这个用户才能删除组
useradd 增加用户,格式为useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
-u表示自定义UID。-g表示新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。-d表示自定义用户的家目录。-M表示不建立家目录。-s表示自定义shell
userdel 删除用户,格式为userdel [-r] username,-r的作用是当删除用户时,一并删除该用户的家目录
chfn(change finger)用于改变用户的finger,finger就是在/etc/passwd文件第5个字段中显示的信息,格式为chfn username
5.3
passwd 设置密码,格式passwd username ,该命令后面不加用户名就是为自己设定密码,当登录的是root账户时,该命令后面跟去他账户名则可以修改指定账户的密码,只有root用户可以修改其他用户的密码,普通用户只能修改自己的密码。
mkpasswd 用于生成密码。默认的Linux是没有这个命令的,可以使用安装命令来安装,
yum install -y except
mkpasswd -l 12 -s 0 -d 3 这条命令-l 表示生成12个长度的密码,-s指定特殊字符的个数,-d指定数字的个数
5.4
su 用户之间的切换命令,格式为su [-] username ,su 后面可以跟-也可以不跟-。-意味着初始化当前用户的各种环境变量,简单来说就是如果加了-,然后再输入pwd就是切换用户的家目录,不加就是被切换用户的家目录。
su 后面什么都不跟默认切换到root用户,切换到root用户后如果想退出这个用户输入exit回车即可退出到原来的账户
sudo 为了改进经常使用root账户进行操作造成的密码丢失的情况下,Linux系统工程师设计了sudo这个命令。使用sudo执行一个只有root才能执行的命令是可以办到的,但是需要输入密码。这个密码并不是root的密码,而是用户自己的密码。默认情况下,只有root用户能使用sudo命令,普通用户要想使用sudo是需要root预先设定的。我们可以使用visudo命令编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令先使用yum install -y sudo安装。
默认root支持sudo,是因为这个文件中有一行 root ALL=(ALL) ALL。在该行下面加入 test ALL=(ALL ) ALL,就可以让test用户拥有sudo的特权。从左到右,第一段test这里为一个用户,指定让哪个用户有sudo特权;第二段ALL=(ALL)比较难理解,左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,第二段几乎都不用配置;第三段设定可以使用sudo的命令有哪些。
使用 visudo命令编辑/etc/sudoers配置文件(必须要使用root用户),它的使用方法和前面阿铭介绍
的vi命令一样,即输入i进人编辑模式,编辑完成后,按Esc键,再输入:wq完成保存。具体操作方法如下所示
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test ALL=(ALL) ALL
此时可以验证一下test账户的权限了,方法如下(如下操作是在root账号下进行的)
su test
$ls //当前目录是在root下
ls:无法打开目录,:权限不够
$ sudo Is
We trust you have received the usual lecture from the local system
Administrator. It usually boils down to these three things:
#1)Respect the privacy of others
#2)Think before you type
#3)With great power comes great responsibility
[sudo) password for test:
123 456 anaconda-ks cfg Desktop Documents Downloads initial-setup-kscfg Music Pictures Public
Templates Videos
由于切换到test账户后当前目录还是/root,test账户没有任何权限,所以使用命令ls查看时,提示
权限不够。然而使用命令sudo ls输人test账户自身的密码后,就有权限了。初次使用sudo命令时,会出现上面一大堆提示,当再次使用sudo就不会在提示了。
大批量增加用户使用sudo的权限的方法,就是设置一个组都可以使用sudo。方法:把# %wheel ALL=(ALL) ALL前面的#去掉,让这一行生效。他的意思就是wheel这个组的所有用户都有了sudo权力,接下来只要把需要sudo权限的所有用户加入到这个wheel组中就可以了。
配置文件/etc/sudoers 包含了许多配置项,可以使用命令 man sudoers来获得帮助信息。下面绍一个很实用的案例,我们们的需求是把 Linux服务器设置成这个样子:只允许使用普通账户登录,而普通账户登录后,可以不输入密码就能用sudo切换到root账户。配置方法是,输入如下命令:
#visudo
然后在文件的最后加入如下3行:
User _Alias USER_SU =test, test1, aming
Cmnd_Alias SU = /usr/bin/su
USER_SU All=(ALL) NOPASSWD:SU
第一行设定了一个user别名,其实这个USER_SU相当于是test、 testl和 aming三个账户;第二行设定了一个命令别名,SU相当于/usr/bin/su;第三行我们刚刚介绍过。保存配置文件后,使用test、 testl、aming这3个账户登录 Linux。执行命令sudo su-切换到root账户,获取root账户的所有权利,如下所示
# su - test
$ sudo su -
# whoami
root
不允许root直接登录,即设置一个复杂得连自己都记不住的密码。不过这样也会有一个问题,就是普通用户可以使用su命令切换到 Root,然后他再修改简单的密码就能直接登录root了。其实还有一个更好的办法。
不允许root远程登录 Linux
/etc/ssh/sshd_config为sshd服务的配置文件,默认允许roo账户通过ssh远程登录 Linux。要想不允许root用户远程登录linux,具体操作方法为:修改配置文件/ etc/ssh/sshd_ config,在文件中查找 #PermitRoot Login yes并修改为 PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下所: #systemctl restart sshd.service,需要注意的是,这个方法只适用于通过ssh远程登录Linux的情况。