su sudo 切换账户

su

su读取/ etc / default / su和/etc/login.defs配置文件

  • / etc / default / su命令特定的logindef配置文件 #可能为空
  • /etc/login.defs全局logindef配置文件 #创建用户和登入用户的一些限制信息

常用功能

  • su - root[test] # 切换到root或test用户(把运行目录也更新到该用户对应主目录)
  • su root[test] #切换到root或test用户(运行目录还是原来的目录)
    用户处为空默认为root用户
    扩展功能:

-s-G-g

  • 切换到指定组
    查看当前用户可以用 id或者whoami
[test@xujb01 passwd]$ su - root
密码:
上一次登录:四 11月  2 05:34:21 CST 2017pts/1 上
[root@xujb01 ~]# pwd              #把运行目录也更新到该用户对应主目录
/root
---------------------------------------------------------------------------------------------------
[test@xujb01 ~]$ su root       
密码:
[root@xujb01 test]# pwd  #没有切换到对应主目录
/home/test

--------------------------------------------------------------------------------------------------
[test@xujb01 ~]$ su -s /bin/sh          # -s 可以切换到指定的shell 并且目录没有切换
密码:
sh-4.2# pwd
/home/test
----------------------------------------------------------------------------------------------------------
[test@xujb01 ~]$ su - root
密码:
上一次登录:四 11月  2 05:43:06 CST 2017pts/1 上
[root@xujb01 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@xujb01 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@xujb01 ~]# su -g test09                #改变用户组
[root@xujb01 ~]# id
uid=0(root) gid=1006(test09) 组=1006(test09) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
------------------------------------------
[root@xujb01 ~]# su -G test09 -G test10       #切换扩充组
[root@xujb01 ~]# id
uid=0(root) gid=1006(test09) 组=1006(test09),1007(test10) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

以上-g-G选项设置后都会进入相应的shell,要回到上一级shell,需要执行exit

sudo

-l

  • 如果未指定命令,请列出当前主机上调用用户(或由-U选项指定的用户)的允许(和禁止)命令。如果多次指定此选项,并且安全策略支持详细的输出格式,则使用较长的列表格式。
    如果命令被指定并被安全策略许可,则显示命令的完全限定路径以及任何命令行参数。如果 命令中指定,但不允许的, 须藤将与状态1的值退出。

-i

  • 直接可以进入root用户

sudo -i

-i  :  
[test@xujb01 ~]$ id      #此时需要给予sudo权限
uid=1000(test) gid=1000(test) 组=1000(test) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[test@xujb01 ~]$ sudo -i
[root@xujb01 ~]# pwd
/root
[root@xujb01 ~]#

-l: 
[test@xujb01 ~]$ sudo -l   #未指定命令 指出在当前主机该用户规则
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
    LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 test 可以在 xujb01 上运行以下命令:
    (ALL) NOPASSWD: ALL, !/bin/cat

[test@xujb01 ~]$ sudo -l cat   #指出命令 sudo没有赋予cat权限 则返回值为1
[test@xujb01 ~]$ echo $?
1
[test@xujb01 ~]$ sudo -l ls     #支持的命令被赋予了权限则返回该命令的路径,返回值为0
/bin/ls
[test@xujb01 ~]$ echo $?
0
  • 编辑

/etc/sudoers

  • ,使用

visudo

  • 命令

test xujb01=(ALL) NOPASSWD: ALL, !/bin/cattest:用户 xujb01:主机 ALL :转换用户 NOPASSWD:登入无需密码 ALL, !/bin/cat可执行命令 (注加!为取反不可以执行命令,并且有ALL 和有!应该把ALL放第一位,因为命令是从左到右执行)

`test xujb01=(ALL) NOPASSWD: ALL, !/bin/cat  #/etc/sudoers 加入该内容 对用户设定规则
[test@xujb01 ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
    LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 test 可以在 xujb01 上运行以下命令:
    (ALL) NOPASSWD: ALL, !/bin/cat

%wheel ALL=(ALL) ALL #对组设定规则,前面需要加‘%’

  • 首先把前面test内容注释掉,在命令行确定已经注释掉
[test@xujb01 ~]$ sudo -l
[sudo] test 的密码:
对不起,用户 test 不能在 xujb01 上运行 sudo。
  • 创建测试组 sudo_test_group

groupadd sudo_test_group

  • 然后编辑/etc/sudoers,加入

%sudo_test_group ALL=(ALL) NOPASSWD: ALL

  • 内容

[root@xujb01 ~]# visudo

test

  • 用户加入到

sudo_test_group

  • 组中
[root@xujb01 ~]# usermod -g sudo_test_group test
[root@xujb01 ~]# id test
uid=1000(test) gid=1008(sudo_test_group) 组=1008(sudo_test_group)
  • 查看用户是否在visudo设置规则内
[test@xujb01 ~]$ sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
    LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 test 可以在 xujb01 上运行以下命令:
    (ALL) NOPASSWD: ALL
  • 以上信息说明规则设置成功

visudo文档中记录可以定义一些别名,可以把各个用户或者命令或者一些服务整合起来以一个别名代替

别名定义分别有:

  • Host Aliases: 既是在主机位置处集合定义
  • User Aliases:在用户位置处的集合定义
  • Command Aliases:在命令出的集合定义

用User Aliases举个例子:
上面是把用户加入组,给组权限,这里可以把用户加入到别名组里(这里暂且叫别名组,因为他可以代表一系列操作或用户的集合其中用’,’隔开)
注:把以上操作都回归为原始值,注释掉%sudo_test_group ALL=(ALL) NOPASSWD: ALL
例子:

  • 在visudo中加入
User_Alias TESTUSERS = test, test01, test02
TESTUSERS       ALL=(ALL)       NOPASSWD: ALL
  • 然后在各个用户内执行

sudo -l

  • ,查看返回值
[test@xujb01 ~]$ sudo -l
....省略
用户 test 可以在 xujb01 上运行以下命令:
    (ALL) NOPASSWD: ALL

[test02@xujb01 ~]$ sudo -l
....省略
用户 test02 可以在 xujb01 上运行以下命令:
    (ALL) NOPASSWD: ALL
[test@xujb01 ~]$ su - test03 #test03没有加入到别名组里所以没有该权限
[sudo] test03 的密码:
对不起,用户 test03 不能在 xujb01 上运行 sudo。

限制root远程登录

  • 编辑

/etc/ssh/sshd_config

  • ,搜索关键字

PermitRootLogin

  • ,
  • 修改到或者添加一下内容

PermitRootLogin no

  • 然后ssh 使用root用户登入,

显示拒绝密码

  • su到root用户查看安全日志:

cat /var/log/secure

[root@xujb01 ~]# tail -n6 /var/log/secure
Nov  2 07:11:25 xujb01 unix_chkpwd[13325]: password check failed for user (root)
Nov  2 07:11:25 xujb01 sshd[13319]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.31.95  user=root
Nov  2 07:11:25 xujb01 sshd[13319]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Nov  2 07:11:27 xujb01 sshd[13319]: Failed password for root from 192.168.31.95 port 56977 ssh2
Nov  2 07:11:30 xujb01 sshd[13319]: error: Received disconnect from 192.168.31.95 port 56977:0:  [preauth]
Nov  2 07:11:30 xujb01 sshd[13319]: Disconnected from 192.168.31.95 port 56977 [preauth]
#用test用户输错密码日志提示:
[root@xujb01 ~]# tail -n6 /var/log/secure
Nov  2 07:11:30 xujb01 sshd[13319]: Disconnected from 192.168.31.95 port 56977 [preauth] #前面的
Nov  2 07:13:10 xujb01 unix_chkpwd[13413]: password check failed for user (test)
Nov  2 07:13:10 xujb01 sshd[13409]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.31.95  user=test
Nov  2 07:13:11 xujb01 sshd[13409]: Failed password for test from 192.168.31.95 port 56988 ssh2
Nov  2 07:13:15 xujb01 sshd[13409]: error: Received disconnect from 192.168.31.95 port 56988:0:  [preauth]
Nov  2 07:13:15 xujb01 sshd[13409]: Disconnected from 192.168.31.95 port 56988 [preauth]

少了一行:
Nov 2 07:11:25 xujb01 sshd[13319]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"