A-A+

PAM禁止root用户登录,限制普通su切换

2016年02月19日 站长资讯 暂无评论

系统环境是CENTOS6.4, 介绍下PAM(Pluggable Authentication Modules)在ssh服务上的简单配置过程。

必须先添加普通用户,并属于wheel组,保证有除root之外的其它用户能登录到系统 !

useradd -g wheel admin

passwd admin

1、禁止root登录

vim /etc/ssh/sshd_config

添加 UsePAM yes

vim /etc/pam.d/sshd 行首添加:

auth required pam_listfile.so item=user sense=deny file=/etc/ssh/denyuser onerr=succeed

echo "root" >> /etc/ssh/denyuser

列在/etc/ssh/denyuser中的用户, 都会被拒绝使用密码登录!!

2、只允许wheel组用户(root默认也不属于wheel的)使用su:
vim /etc/pam.d/su 行首添加

auth required pam_wheel.so use_uid

3、附shell:

使用须知:

A. 需要你先安全地生成自己的密钥对,并妥善保管!!将“mykey”替换为你的公钥串

B. 脚本包括了创建普通用户"admin",可以修改为你自己需要的用户,它可以使用su切换到root

C.脚本执行结果为,限制root使用密码登录系统,但若设置了使用密钥,仍可以登录(安全性好)

D.add_my_key root $1(脚本中标红色),后面参数为你想添加公钥认证的所有用户,可以自己补充。

E.脚本供大家学习交流,生产环境使用前,请先在测试环境中测试效果,作者不对任何结果负任何责任。

  1. #!/bin/sh  
  2. LOG_FILE=$0.log  
  3. wr_log(){  
  4.        TIME=`date +"%Y-%m-%d %H:%M:%S"`  
  5.        if [ $1 -eq 0 ];then  
  6.        echo "[$TIME] $2 success"   
  7.                echo "[$TIME] $2 success" >> ${LOG_FILE}  
  8.        else  
  9.        echo "[$TIME] $2 error"  
  10.   
  11.   
  12.                echo "[$TIME] $2 error">>${LOG_FILE}  
  13.                exit 1  
  14.        fi  
  15. }  
  16. gsed(){  
  17. #用于修改配置文件,后接3个参数:1.要修改的行2.修改后的行3.被修改的文件  
  18. #若找不到匹配的行, 会将$2添加到文件的首行  
  19. `/bin/grep -E "^$1" $3 >/dev/null`  
  20. ret1=$?  
  21. `/bin/grep -E "^$2" $3 >/dev/null`  
  22. ret2=$?  
  23. ret=10  
  24. if [ $ret1 -eq 0  ] ; then  
  25.    /bin/sed -i -r 's/^'"$1"'/'"$2"'/g' $3  
  26.    ret=$?  
  27. elif [ $ret1 -ne 0 -a $ret2 -ne 0 ];then      
  28.    /bin/sed -i '1i '"$2"'' $3  
  29.    ret=$?  
  30. else  
  31.    ret=0  
  32. fi  
  33. return $ret  
  34. }  
  35. add_my_key(){  
  36. mykey='ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtCgu1KvU/YMkPSnlEB4hyVWCc9/a5X3rqafGr7dPMdiMXXcyBpBd2t8NE/4rQ33rnd6GGUIlv3+2wPI8hFc5zU13G//jKseVS0hbY8XIq8zq8NhKzk/uX8m5ZE'  
  37. for user in $@;  
  38. do   
  39.    if test $user = 'root';then  
  40.        dir='/root/.ssh'  
  41.    else  
  42.        dir="/home/$user/.ssh"  
  43.    fi  
  44.    if  ! test -d $dir;then  
  45.        /bin/mkdir -p $dir   
  46.    fi  
  47.    chmod 700 $dir&&echo $mykey >>$dir/authorized_keys&&chown -R $user $dir&&chmod 600 $dir/authorized_keys  
  48.    wr_log $? "add ssh key for $user"  
  49. done  
  50. }  
  51. add_user(){  
  52.   
  53. /usr/sbin/useradd -g wheel $1 &&echo "$2" |/usr/bin/passwd $1 --stdin  
  54. wr_log $? "add user $1 "  
  55. }  
  56. deny_root_login(){  
  57. #用于修改PAM的su和sshd配置,禁止root远程登录,禁止非wheel组用户登录(su)到root用户  
  58. if test $# -ne 2;then  
  59.    echo "usage: deny_root_login normal_user user_password"  
  60.    wr_log 1 "wrong usage:$@ "  
  61. fi  
  62. add_user $1 $2  
  63. add_my_key root $1  
  64.   
  65. gsed "auth[ \t]+required[ \t]+pam_wheel\.so use_uid" "auth    required    pam_wheel\.so use_uid" /etc/pam.d/su &&\  
  66. gsed "UsePAM[ \t]+no" "UsePAM yes" /etc/ssh/sshd_config &&\  
  67. gsed "auth[ \t]+required[ \t]+pam_listfile\.so item=user sense=deny file=\/etc\/ssh\/denyuser onerr=succeed" "auth   required        pam_listfile.so item=user sense=deny file=\/etc\/ssh\/denyuser onerr=succeed" /etc/pam.d/sshd  &&echo "root>> /etc/ssh/denyuser&&/sbin/service sshd restart  
  68.   
  69. wr_log $? "deny_root_login"  
  70. }  
  71.   
  72. deny_root_login admin  "yourpassword"  
标签:

给我留言