su sudo 切换账户
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
指定切换到用户指定shell 后可接用户-G
此选项只能root用户使用,切换到指定扩充组-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/cat
添加该内容 允许用户有相应的sudo权限
test
:用户 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"