CentOS7--su和sudo
在某些情况下, 以root
用户身份访问系统有潜在危险,并可能导致系统和数据损害。我们可以用setuid程序,例如su和sudo解决。
su命令#
1 | [app01rot@app-01 ~]$ su - root |
一旦在使用su
命令登录root,用户获取了系统的绝对管理权限
只允许特定用户使用该su
命令
要做到这一点,编辑插入式验证模块为(PAM)配置文件/etc/pam.d/su
在文本编辑器中打开该文件,取消注释:
1 | #auth required pam_wheel.so use_uid |
将用户添加到名为wheel的特殊管理组
1 | usermod -a -G wheel username |
sudo命令#
只有/etc/sudoers
配置文件中列出的用户才可以使用该sudo
命令,命令在用户的 shell中执行,而不是在root
shell中执行。这意味着root
可以完全禁用shell。
1 | sudo ls /root |
每个使用该sudo
命令的成功身份验证都会记录到/var/log/messages
,并将的用户和发出的命令记录到文件/var/log/secure中
。
/var/log/secure
1 | Nov 7 17:09:49 app-01 sudo: root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/bin/ls /root/ |
如果需要额外的日志记录,请使用该pam_tty_audit
模块为指定用户启用TTY审计,方法是将以下行添加到/etc/pam.d/system-auth
文件中:
1 | session required pam_tty_audit.so disable=pattern enable=pattern |
其中pattern表示逗号分隔的用户列表,以下配置将启用root
用户的TTY审计,并禁用所有其他用户
1 | session required pam_tty_audit.so disable=* enable=root |
权限管理
要赋予某人完全的管理权限:
用visudo命令编辑/etc/sudoers
1 | juan ALL =(ALL)ALL #允许juan使用sudo执行任何命令 |
赋予部分管理权限
1 | %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom #允许users组中的成员执行执行的挂载磁盘命令 |
不需要输入sudo密码执行一组命令
1 2 | Cmnd_Alias SYS_BACKUP = /bin/su - root -c /usr/locale/sbin/sys_backup.sh,/mnt/cdrom insmsop1 ALL=(ALL) NOPASSWD: SYS_BACKUP |
配置sudo记录密码的时间
sudo
将密码保存五分钟的超时时间。在此期间对该命令的任何后续使用都不会提示用户输入密码。添加下面的一行将修改时间
1 | Defaults timestamp_timeout=value #value=0,每次sudo都需要输入密码 |
如果某个帐户遭到入侵,攻击者可以使用以下sudo
管理权限打开一个新的shell:
1 | sudo /bin/bash #绕过/etc/sudoers文件中指定的超时时间,并且永远不要求攻击者sudo再次输入密码 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了