首页 > 其他分享 >账号安全和引导登录控制

账号安全和引导登录控制

时间:2022-10-23 09:13:38浏览次数:51  
标签:引导 登录 账号 root sudo 用户 密码 zhangsan localhost

账号安全基本措施

 

将非登录用户的Shell设为/sbin/nologin

查看/etc/passwd 文件,可以看到多个程序用户

 

 

使用usermod命令修改登录shell

 usermod -s /sbin/nologin 用户名

示例

将用户的登录shell修改为/sbin/nologin,修改后user02无法登录系统

[root@localhost ~]# grep "jlx" /etc/passwd     //查看用户的登录shell,为bash
jlx:x:1000:1000:jlx:/home/jlx:/bin/bash
[root@localhost ~]# usermod -s /sbin/nologin jlx   //将的登录shell修改为/sbin/nologin
[root@localhost ~]# grep "jlx" /etc/passwd
jlx:x:1000:1000:jlx:/home/jlx:/sbin/nologin

锁定长期不使用的账号

命令

复制代码
 方法一:
 passwd -l 用户名      //锁定用户
 passwd -u 用户名      //解锁用户
 
 方法二:
 usermod -L 用户名     //锁定用户
 usermod -U 用户名     //解锁用户
复制代码

示例

passwd -l 用户名,锁定用户。锁定后用户无法登录。

复制代码
[root@localhost ~]# passwd -l zhangsan      //锁定用户zhangsan的密码
锁定用户 zhangsan 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S zhangsan        //查看zhangsan状态
zhangsan LK 2022-07-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u zhangsan       //解锁用户zhangsan的密码
解锁用户 zhangsan 的密码。         //由于用户zhangsan密码为空
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
复制代码

 

usermod -L 用户名,锁定用户。锁定后用户无法登录

[root@localhost ~]# usermod -L zhangsan        //锁定用户zhangsan
[root@localhost ~]# passwd -S zhangsan        //查看用户222的状态
zhangsan LK 2022-08-12 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan        //解锁用户zhangsan
[root@localhost ~]# passwd -S zhangsan        //查看用户zhangsan的状态
zhangsan PS 2022-08-12 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

 

 

 

删除无用的账号

命令

 userdel 用户名        //删除用户,但不删除用户的家目录
 userdel -r 用户名     //删除用户的同时,删除他的家目录

示例

userdel 用户名。删除用户,但不删除用户的家目录。

用户被删除后,他的家目录会变成无主文件,文件的属主和属组位显示的是原主人的UID和GID。

[root@localhost ~]# userdel zhangsan
[root@localhost ~]# ls /home/
zhangsan 
[root@localhost ~]# ls -d1 /home/zhangsan
/home/zhangsan

 

 userdel -r 用户名。删除用户的同时删除他的家目录。

[root@localhost ~]# ls /home/
zhangsan
[root@localhost ~]# userdel -r zhangsan
[root@localhost ~]# ls /home/

 

 

密码安全控制——设置密码规则

一般通过设置密码规则来控制密码安全,主要设置以下两点:

  • 设置密码有效期
  • 要求用户下次登录时修改密码

对于新建用户——修改/etc/login.defs文件

对于新建用户,可以修改/etc/login.defs文件里的内容来设置密码规则。

查看/etc/login.defs文件:

 

 

参数说明:

  • PASS_MAX_DAYS #密码最大有效期
  • PASS_MIN_DAYS #两次修改密码的最小间隔时间
  • PASS_MIN_LEN #密码最小长度,对于root无效
  • PASS_WARN_AGE #密码过期前多少天开始提醒 示例:

修改/etc/login.defs文件,将密码最大有效期修改为30天。


复制代码
 [root@localhost ~]# vim /etc/login.defs    //修改配置文件
 ----------------------------
 PASS_MAX_DAYS   30    //将密码最大有效期修改为30天
 PASS_MIN_DAYS   0
 PASS_MIN_LEN    5
 PASS_WARN_AGE   7
 
 [root@localhost ~]# useradd zhangsan   //创建新用户zhangsan
 [root@localhost ~]# grep "zhangsan" /etc/shadow
zhangsan:!!:19274:0:99999:7:::         //密码有效期默认30天
复制代码

 

 

 

 

对于现有用户——chage命令

命令格式:

 chage  [选项]  用户名

选项:

-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码。

-M:密码保持有效的最大天数。

-W:用户密码到期前,提前收到警告信息的天数。

-E:帐号到期的日期。过了这天,此帐号将不可用。

-d:设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。

-i:停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用。

-l:例出当前的设置。

示例:

chage -M ,设置用户密码的有效期。

复制代码
[root@localhost ~]# chage -M 50 zhangsan          //将111用户的密码有效期设置为50天
[root@localhost ~]# grep "zhangsan" /etc/shadow
zhangsan:!!:19216:0:50:7:::
[root@localhost ~]# cha
chacl       chardetect  chat        
chage       charmap     chattr      
[root@localhost ~]# chage -l zhangsan     //查看当前设置
最近一次密码修改时间                    :8月 12, 2022
密码过期时间                    :10月 01, 2022
密码失效时间                    :从不
帐户过期时间                        :从不
两次改变密码之间相距的最小天数        :0
两次改变密码之间相距的最大天数        :50
在密码过期之前警告的天数    :7
复制代码

 

 

 

chage -d 0,强制要求用户下次登录时必须修改密码。 复制代码

[root@localhost ~]# grep zhangsan /etc/shadow
zhangsan:!!:19274:0:99999:7:::
[root@localhost ~]# chage -d 0 zhangsan
[root@localhost ~]# grep zhangsan /etc/shadow
zhangsan:!!:0:0:99999:7:::
[root@localhost ~]# chage -l zhangsan
最近一次密码修改时间 :密码必须更改
密码过期时间 :密码必须更改
密码失效时间 :密码必须更改
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7

复制代码

 

 

 

 

命令历史限制

一般使用两种方式控制命令历史:

  • 减少记录的命令条数。
  • 注销时自动清空命令历史,或登录时自动清空命令历史。

家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。

命令:

复制代码
 1. 临时修改历史命令条数。只针对当前用户,退出登录后失效。
 [root@localhost ~]# export HISTSIZE=200
 
 2. 永久修改历史命令条数。编辑配置文件,设置历史命令条数。
 [root@localhost ~]# vim /etc/profile        //设置历史命令条数记录为200条
     HISTSIZE=200 
 [root@localhost ~]# source /etc/profile     //刷新配置文件,使文件立即生效
 
 3. 注销时自动清空历史命令 
 [root@localhost ~]# vim ~/.bash_logout
 echo "" > ~/.bash_history
 
 4. 登录时自动清空历史命令
 [root@localhost ~]# vim ~/.bashrc
 echo "" > ~/.bash_history
复制代码

示例:

临时修改历史命令条数。注销后失效。

 

 永久修改历史命令条数。编辑/etc/profile 文件,设置命令记录为200条。

 

 

编辑 ~/.bashrc 文件,在登录时清空命令历史。

 

 

 

用户切换和提权

su(用户切换)

查看su操作记录:

系统安全日志/var/log/secure,是记录ssh登陆服务器的日志文件。

命令格式:

 su [options...] [-] [user [args...]]
复制代码

 

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

密码验证:

  • root 切换到任意用户,不验证密码。
  • 普通用户切换到其他用户,需要验证目标用户的密码。

注意:

su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

复制代码
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ pwd
/root
[zhangsan@localhost root]$ exit
exit
[root@localhost ~]# su - zhangsan
上一次登录:六 8月 13 14:48:54 CST 2022pts/1 上
[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ whoami 
zhangsan
复制代码

 

 

 

 普通用户切换到其他用户,需要验证目标用户的密码。

[root@localhost ~]# su - zhangsan
密码:

 

 

 

限制使用su命令的用户

su 命令的安全隐患

  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。
  • 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su 命令进行切换。

限制使用su命令的用户(通过修改/etc/pam.d/su 文件):

  • 将允许使用su命令的用户加入wheel组。
  • 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户。

查看 /etc/pam.d/su 文件:

 

 

  • 以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
  • 两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
  • 如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
  • 如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

示例:

编辑 /etc/pam.d/su 文件,将第二行和第六行都开启,则只有root和wheel组内的用户才能使用 su 命令。

 [root@localhost ~]# vim /etc/pam.d/su      //开启第二行和第六行
 .................................
 2 auth sufficient pam_ rootok.so
 6 auth required pam_ wheel.so use_ _uid

 

 

 用户不在wheel组内,使用su命令时拒绝权限。

复制代码

[zhangsan@localhost ~]$ id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) 组=1000(zhangsan)
[zhangsan@localhost ~]$ su zhangsan
密码:

su: 拒绝权限

复制代码

 

 

 

 

 

将用户加入wheel组内,则可以成功使用su 命令。 复制代码

[root@localhost ~]# gpasswd -a zhangsan wheel
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]# su - zhangsan
上一次登录:三 9月 14 17:10:07 CST 2022:0 上
[zhangsan@localhost ~]$ whoami
zhangsan
[zhangsan@localhost ~]$ su - zhangsan
密码:
上一次登录:日 10月 9 12:17:56 CST 2022pts/0 上

复制代码

sudo(用户提权)

查看sudo操作记录:

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo.log

sudo特性:

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,权限必须为0440。

使用visudo命令,可编辑配置文件/etc/sudoers:


复制代码
 #用户    登入主机 = (代表用户)     命令
 #user     host=(username)       command
   root       ALL=(ALL)          ALL
  %wheel      ALL=(ALL)         NOPASSWD:ALL
  
 #root表示允许哪个用户。%wheel表示wheel组。
 #第一个ALL表示通过哪些主机登入。
 #第二个ALL表示以哪个用户身份。
 #最后一个ALL表示允许运行哪些命令。
 #NOPASSWD表示使用sudo命令不需要验证密码。
 ​
 举例说明:
 1.111    ALL=(root)   /bin/mount
 #表示111用户通过任何主机登入系统后,可以以root的身份运行mount命令(命令前必须加sudo)。
 ​
 2.%wheel    ALL=(ALL)   ALL
 #表示wheel组内的成员通过任何主机登入系统后,可以以任何用户的身份运行所有命令(命令前必须加sudo)。
 ​
 ​
 字段填写说明:
 1.user:可以写用户名或UID。
 2.group:可以写组名或GID。
 3.host:可以写ip或hostname(IP地址或主机名)。
 4.command:
  command name  (命令)
  directory     (文件夹里的命令)
  sudoedit      (可以编辑sudoers这个文件,变相变成管理员)
  Cmnd_Alias    (命令别名)
  
 注:配置文件内支持使用通配符,例如"/sbin/*"表示/sbin/目录下的所有命令。
复制代码

sudo基本语法:

 sudo  [-u username]  [command]     //-u:以哪个用户的身份运行命令
 ​
 sudo -V    //查看相关配置信息          
复制代码

示例:

(1)允许 yuji 用户以任何用户的身份运行所有命令。

允许nancy用户以root用户的身份运行mount命令。

复制代码
# 1.普通用户nancy不允许使用mount命令。
 [111@localhost ~]$ whoami
 111
 [111@localhost ~]$ mount /dev/sr0 /mnt
 mount: 只有 root 能执行该操作
 ​
 # 2.编辑配置文件,将yuji用户和nancy用户加入文件。
 [root@localhost ~]# visudo            //编辑配置文件/etc/sudoers
 ---------------------------
 222    ALL=(ALL)       ALL
 111   ALL=(root)      /bin/mount
 ​
 # 3.允许111用户以roo身份运行mount命令。
 [111@localhost ~]$ whoami
 nancy
 [111@localhost ~]$ sudo mount /dev/sr0 /mnt
 [sudo] nancy 的密码:
 mount: /dev/sr0 写保护,将以只读方式挂载
 ​
 # 4.222用户以root身份创建文件,文件属主是root。
 [222@localhost ~]$ whoami
 222
 [222@localhost ~]$ sudo touch 1.txt
 [sudo] 222 的密码:
 [222@localhost ~]$ ll 1.txt
 -rw-r--r-- 1 root root 0 3月   7 16:52 1.txt
复制代码

sudo别名

sudo别名有四种类型:

  • User_Alias(用户)
  • Runas_Alias(代表用户)
  • Host_Alias(登录主机)
  • Cmnd_Alias(命令)

参数说明

  • -V 显示版本编号
  • -h 会显示版本编号及指令的使用方式说明
  • -l 显示出自己(执行 sudo 的使用者)的权限
  • -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
  • -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
  • -b 将要执行的指令放在背景执行
  • -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
  • -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
  • -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
  • -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
  • command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

实例

sudo命令使用

 


$ sudo ls
[sudo] password for hnlinux: 
hnlinux is not in the sudoers file. This incident will be reported.
 ​

 

以root权限执行上一条命令
$ sudo !!

以特定用户身份进行编辑文本

$ sudo -u uggc vi ~www/index.html
//以 uggc 用户身份编辑  home 目录下www目录中的 index.html 文件

列出目前的权限

sudo -l

列出 sudo 的版本资讯

sudo -V

sudo子目录

如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。

 [root@localhost ~]# vim /etc/sudoers.d/test          //创建子目录
 zhangsan  ALL=(root)  /bin/mount
 [root@localhost ~]# chmod 440 /etc/sudoers.d/test    //设置权限,加固安全
 [root@localhost ~]# ll /etc/sudoers.d/test
 -r--r----- 1 root root 33 3月   7 17:51 /etc/sudoers.d/test

 

 

 

注:

如果允许用户使用sudoedit命令,则该用户能够修改配置文件/etc/sudoers。变相变成管理员,十分危险,建议不要设置该命令。

 

 [root@localhost sudoers.d]#vim /etc/sudoers.d/hr
 lisi ALL=(root)  sudoedit
 [root@localhost ~]#su lisi
 [lisi@localhost root]$ sudoedit /etc/sudoers   //sudoedit可以修改配置文件,十分危险

查看sudo操作记录

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo
[root@localhost log]# visudo          //修改配置文件
-----------------------------
Default logfile="/var/log/sudo"       //在最后一行添加 Default logfile 配置

标签:引导,登录,账号,root,sudo,用户,密码,zhangsan,localhost
From: https://www.cnblogs.com/ponyton/p/16817889.html

相关文章

  • SSH远程登录协议
    一、SSH服务1.1SSH基础(1)SSH:是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的......
  • 树莓派4B使用串口登录的设置方法
    -特别提示-本文具有时效性。当前我使用的是pi4硬件,镜像版本raspberrypi5.15.6132位。在我解决该问题的时候,在网上查找了很多方法,有些方法被实际测试发现是不行的......
  • apipost动态获取登录token,其他接口同步调用
    1、新增登录接口,接口返回值包含token信息接口信息   返回值   2、在登录接口的后执行脚本,添加环境变量 apt.environment.set("accessToken",response.js......
  • MySQL服务启动和关闭、 MySQL登录和退出
    MySQL服务启动和关闭配置MySQL服务启动1、手动2、cmd—>services.msc打开服务的窗口3、使用管理员打开cmdnetstartmysql:启动mysql的服务netstop......
  • C语言实现模拟用户登录
    一.问题要求模拟用户登录情况,用户输入密码,如果密码正确就提示登陆成功,错误就显示登录失败,且只能有三次机会,输入错误三次就退出程序二.解决思路我们可以先确定一个密码,然后用......
  • android实现登录注册界面
    创建一个androidstudio工程在drawable中添加main_left:<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/andr......
  • 某某某某招某某某 网站js登录加密方式。
    1.135分析后为AES加密。加密流程constCryptoJS=require('crypto-js');//引用AES源码jsconste=JSON.parse('{"data":{"password":"123456"},"key":"pigxpigxpi......
  • JDBC练习_登录案例和JDBC事务管理
    JDBC练习_登录案例练习:需求:1.通过键盘录入用户名和密码  2.判断用户是否登录成功"select*fromuserwhereusername="" andpassword="......
  • JDBC工具类和JDBC登录案例
    JDBC工具类:抽取JDBC工具类:JDBCUtils目的:简化书写分析∶1.注册驱动也抽取2.抽取一个方法获取连接对象3.抽取一个方法释放资源代码实现:/***JDBC工具类*/publicc......
  • xshell,xftp无法用root用户登录
    默认情况下不允许使用root用户通过ssh登录服务器。编辑vim/etc/ssh/sshd_config文件。#修改前PermitRootLoginProhibit-password#修改后PermitRootLoginyes......