通过pam限制普通用户无密码登陆



1.  修改所有计算节点的 /etc/security/access.conf ,

    加入这一句

    - : ALL EXCEPT root @root : ALL

 

     如果需要恢复的话,只需要将 - : ALL EXCEPT root @root : ALL 注释掉即可。

 


 


2.  修改所有计算节点的/etc/pam.d/sshd

     #account    required     pam_nologin.so  注释掉这句
     account    required     pam_access.so     加入这句

         

      重启机器

      会发现只有root能够无密码登陆,换成普通用户,则提示:

      Connection closed by 192.168.1.1

   

   

<think>嗯,用户的问题是关于如何配置backups.sh脚本,使得root用户能够无密码切换到普通用户。首先,我需要回想一下Linux系统中权限切换的相关知识。通常,切换到另一个用户需要密码,但用户希望避免这一步,尤其是在脚本中自动执行的时候。 我记得有几种方法可以实现无密码切换。首先想到的是使用sudoers文件配置,允许特定用户无需密码执行某些命令。这可能涉及到visudo编辑,添加NOPASSWD选项。例如,在/etc/sudoers中添加一行如“username ALL=(ALL) NOPASSWD: ALL”,但这可能会有安全风险,需要谨慎处理。用户的需求是root切换到普通用户,可能需要同的方法。 另一个方法是使用su命令的权限设置。在Linux中,su命令默认需要目标用户密码,但如果是root用户,可以修改PAM(Pluggable Authentication Modules)配置来绕过密码验证。具体来说,可以编辑/etc/pam.d/su文件,调整认证规则。比如,注释掉或修改相关的auth required pam_wheel.so行,但这可能太安全,或者需要结合用户组设置。 还有一种方法是使用expect脚本来自动输入密码,但用户可能希望硬编码密码在脚本中,这样会有安全隐患。所以这是最佳选择。 然后想到的是利用ssh密钥认证。如果脚本需要在远程执行命令,可以配置SSH密钥登录,但如果是本地用户切换,可能太适用。过,结合sudo和ssh可能会有帮助。 用户提供的引用中提到修改HOME变量和PATH,这可能与脚本中环境变量有关,需要确保切换用户时环境正确。比如,在su命令中保持环境变量,可能需要使用“-”参数,比如“su - username -c command”。 综合这些思路,最合适的解决方案应该是通过修改sudoers文件,允许root用户无需密码切换到普通用户,或者配置PAM规则。过具体步骤需要详细说明,比如使用visudo添加规则,或者设置wheel组权限。同时需要注意安全性,避免过度授权。 另外,引用中的内容提到crontab的配置和脚本路径问题,这可能与脚本执行时的环境变量有关,需要确保在cron任务中正确设置路径和HOME变量,否则可能导致su或sudo命令找到。所以在脚本中可能需要显式设置环境变量,或者使用绝对路径。 最终,步骤可能包括:1. 配置sudoers允许root无需密码执行su到普通用户;2. 在脚本中使用sudo或su命令切换用户;3. 确保环境变量正确设置,如HOME和PATH。同时,需要提醒用户注意安全风险,避免给普通用户过多的权限。</think>### 如何配置脚本无密码切换到普通用户? #### 1. **使用 `sudo` 配置免密切换** 通过修改 `/etc/sudoers` 文件,允许 `root` 用户无需密码即可切换到普通用户。 **操作步骤:** - 执行 `visudo` 命令编辑配置文件,添加以下内容: ``` root ALL=(普通用户名) NOPASSWD: ALL ``` - 在脚本中使用 `sudo -u 普通用户 命令` 实现切换: ```bash #!/bin/bash sudo -u username /path/to/command # 无需密码直接执行 ``` #### 2. **通过 `su` 命令结合 PAM 配置** 修改 PAM(Pluggable Authentication Modules)规则,允许 `root` 用户免密切换到普通用户。 **操作步骤:** - 编辑 `/etc/pam.d/su` 文件,注释或修改以下行(需谨慎操作): ``` #auth required pam_wheel.so use_uid ``` - 在脚本中使用 `su - username -c "command"` 切换用户: ```bash #!/bin/bash su - username -c "/path/to/command" # 无需输入密码 ``` #### 3. **使用 SSH 密钥认证(适用于远程场景)** 若需远程执行命令,可通过 SSH 密钥实现无密码登录。 **操作步骤:** - 生成密钥对:`ssh-keygen -t rsa` - 将公钥追加到普通用户的 `~/.ssh/authorized_keys` 文件 - 在脚本中使用 `ssh` 命令: ```bash #!/bin/bash ssh username@localhost "/path/to/command" # 基于密钥认证执行 ``` #### 4. **环境变量注意事项** 确保脚本中 `HOME` 和 `PATH` 变量正确指向目标用户的配置,例如: ```bash #!/bin/bash export HOME=/home/username # 关键配置,避免权限问题[^1] sudo -u username /path/to/command ``` #### 安全风险提示 - 避免过度授权:`NOPASSWD: ALL` 可能导致安全漏洞,建议限制具体命令[^3] - 定期审计权限:检查 `/etc/sudoers` 和 PAM 配置的合理性 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值