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

账号安全和引导登录控制

时间:2022-10-09 12:33:05浏览次数:47  
标签:引导 登录 账号 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/fengxia6/p/16771558.html

相关文章

  • win10加入域后登录不显示本地帐户
    win10加入域后登录不显示本地帐户前言加入域后登录其他账户不显示原来的本地账户,需要输入本地账户的账户名等繁琐操作;通过改设置来简化操作,直接输入密码来登录本地账户。......
  • drf自动生成路由、on_delete、登录认证
    目录回顾一、drf入门1.前后端开发模式2.API接口:前后端交互的媒介3.接口测试工具:postman4.restful规范十条5.drf快速入门6.必须继承APIView写视图类二、序列化组件1.功能三......
  • 自动生成路由、登录接口与登录认证
    路由自己写的路由path('books/',views.BookView.as_view({'get':'list','post':'create'})),path('admin/<int:pk>',views.BookView.as_view({'get':'retrieve',......
  • 【Django-rest-framework框架】第06回 路由、登录、认证
    目录1.自动生成路由1.1本质1.2使用步骤1.3SimpleRouter与DefaultRouter区别1.4自动生成的路由映射关系其实定死了1.5action装饰器的使用1.6action装饰器的使用1.7......
  • 自动生成路由,action装饰器,登录接口,认证
    自动生成路由action装饰器的使用登录接口编写认证自动生成路由补充:  1.只要继承了ModelViewSet就要在路由中as_view()内添加字典的形式#path('book......
  • Linux操作系统引导过程及排障
    1.Linux操作系统引导过程1.1引导过程图解1.2引导过程详解1.2.1开机自检:bios检测硬件服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行......
  • 今日内容 路由与登录认证
    路由自动生成路由步骤:1导入:fromrest_framework.routersimportSimpleRouter,DefaultRouter2实例化:router=SimpleRouter()3注册:router.registe......
  • Linux引导过程及排除故障
    一、Linux引导过程1、引导过程2、引导过程详解2.1开机自检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设......
  • 防止SSH暴力登录
    #!/bin/bash#DenyhostsSHELLSCRIPT#2022-9-27#可以添加定时任务crontab-lcrontab-e*/1****sh/home/shell-code/secure_check.sh#如果担心自己密码输......
  • linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号
    linux前端jenkins打包失败permission权限安装root安装nodejs,没有权限,另一个账号,需要chkmod将文件权限打开开始以为nodejs版本问题最后发现是安装nodejs是一个账......