一 su 命令 ---账户之间的切换

普通用户切root用户或者普通用户之间的切换都需要对方输入对方账户登录密码,root用户进普通用户不需要密码验证,这也是权力的体现。
命令格式:

su username
su - username

如果不带用户名,默认root用户
不带 - 的切换是只是在自己家里调用权力,环境变量没有变化。
带 - 直接进入到对方家里,反客为主,使用权力, 当前用户环境变量初始化为对方用户环境变量 。请看下面例子
Linux学习总结(六)-su命令  sudo 命令  限制root远程登录

二 sudo ----获取root权利执行命令

su 命令虽然让普通用户轻松切到root用户下接管root用户的工作,但是需要root用户授权密码,我们知道普通用于不止一个,因此root密码多次下发,一旦不小心泄露,就很不安全。我们有没有不长期下发root密码的办法,还能让普通用户干活呢,当然有,sudo 就是来解决这个难题的

            sudo 用法 ----- sudo + 要执行的命令

sudo ----在自己账户下拿到root权力去干活,每干一次活需要验证当前身份,也就是要输入当前账户密码,前提是该账户已经被事先授权。sudo与su的关系我可以这样举个例子, 假如你是宰相想行使皇帝的权力,su的办法是跑到皇帝跟前索要到权力,su-的办法是篡位自己当皇帝,sudo是皇帝给你发个金牌令箭,让你行使权力。
Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
看上面例子 ,我想借助sudo 来修改我自己test账户的密码,我输入自己密码后提示 test 账户没有在sudoers 这个文件里,意思是需要在该文件里注册备案,才能获取权力,下面我们修改配置文件,添加test账户

                        命令visudo---可以查看sudo配置文件

Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
备注:一定要用visudo去打开文件,不要用vi,因为此文件特别重要,vi无法显示语法错误,visudo可以显示语法错误。中间括号的ALL表示授权的用户,末尾的ALL表示授权的命令
在 root ALL=(ALL) ALL下一行加一行即可,我们再次尝试修改密码,请看结果:
Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
提示我们先输入自己账户密码,然后就可以改密码了
处于当前登录状态,该身份验证只需要一次,你再次用sudo命令就不需要输密码了
下面我举个案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户。
编辑刚才的配置文件 /etc/sudoers 修改两个地方
Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
把sudo权力的下发组 wheel 这行前面的#删掉 ,让这行代码执行,其次在文件尾行假如下面三行:

Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
三行的意思是:第一行 给三个普通账号设置一个组别名,让权力按组下发。 第二行给/bin/su 取别名SU。第三行 免密码登录。
保存配置文件后,使用test, test1, lv 三个账户登陆Linux后,执行命令 sudo su - 切换到root账户,获取root账户的所有权利,结果如下:
Linux学习总结(六)-su命令  sudo 命令  限制root远程登录
那么最后一个问题,如何限制不让root直接登录呢,可以用用工具生成一个非常复杂的随即字符串密码,这样自己也记不住了,那万一要用呢,当然还有办法,用kapss保存密码工具,把密码管理起来

总结:
sudo的工作过程如下:

  • 1 当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
  • 2 确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
  • 3 若密码输入成功,则开始执行sudo后续的命令
  • 4 root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
  • 5 若欲切换的身份与执行者的身份相同,也不需要输入密码

    三 限制ssh远程登录

    /etc/ssh/sshd_config为sshd服务的皮质文件,默认root账户可以通过ssh远程登录linux。要实现不允许登录,修改配置文件即可
    在文件中查找到#PermitRootLogin yes,将yes该为no,保存退出,然后重启sshd服

                    systemctl  restart sshd.service