账号安全基本措施
将非登录用户的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