su
su命令使用中,加 - 与不加的区别。
[root@chy002 ~]# su chy002 [chy002@chy002 root]$ pwd /root [chy002@chy002 root]$ exit exit [root@chy002 ~]# su - chy002 上一次登录:二 10月 31 04:57:13 CST 2017pts/0 上 [chy002@chy002 ~]$ pwd /home/chy002
[user@localhost ~]$ su 密码: [root@localhost user]# pwd /home/user [root@localhost user]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost user]# exit exit [user@localhost ~]$ su - 密码: 上一次登录:三 7月 4 04:20:13 CST 2018pts/2 上 [root@localhost ~]# pwd /root [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost ~]# exit 登出
-c 以某用户身份去执行某个权限
[root@chy002 chy002]# su - -c "touch /home/chy002/123.txt" chy002 [root@chy002 chy002]# ls -ls 总用量 0 0 -rw-rw-r-- 1 chy002 chy002 0 10月 31 06:03 123.txt [root@chy002 chy002]# id chy002 uid=1000(chy002) gid=1000(chy002) 组=1000(chy002)
[root@chy002 chy002]# su - chy002 上一次登录:二 10月 31 06:06:43 CST 2017pts/0 上 su: 警告:无法更改到 /home/chy002 目录: 没有那个文件或目录 shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory job-working-directory: 获取当前目录时出错: getcwd: 无法访问父目录: 没有那个文件或目录 -bash-4.2$ 登出 #该用户没有家目录,所以前缀与普通用户不同 [root@chy002 chy002]# ls /home/chy002 ls: 无法访问/home/chy002: 没有那个文件或目录
如何进行修改
[root@chy002 ~]# ls /home/chy002 ls: 无法访问/home/chy002: 没有那个文件或目录 [root@chy002 ~]# mkdir /home/chy002 #创建家目录,发现还是不行,家目录缺少配置文件 [root@chy002 ~]# chown chy002:chy002 /home/chy002 [root@chy002 ~]# su - chy002 上一次登录:二 10月 31 06:06:50 CST 2017pts/0 上 -bash-4.2$ pwd /home/chy002 -bash-4.2$ ls -la 总用量 4 drwxr-xr-x 2 chy002 chy002 6 10月 31 06:12 . drwxr-xr-x. 11 root root 4096 10月 31 06:12 .. #/etc/skel有配置文件模板,拷贝后修改权限,可以正常登录 [root@chy002 ~]# ls -la /etc/skel 总用量 24 drwxr-xr-x. 2 root root 59 10月 17 06:16 . drwxr-xr-x. 73 root root 8192 10月 31 03:33 .. -rw-r--r--. 1 root root 18 6月 10 2014 .bash_logout -rw-r--r--. 1 root root 193 6月 10 2014 .bash_profile -rw-r--r--. 1 root root 231 6月 10 2014 .bashrc [root@chy002 ~]# cp /etc/skel/.bash* /home/chy002 [root@chy002 ~]# chown -R chy002:chy002 !$ chown -R chy002:chy002 /home/chy002 [root@chy002 ~]# su - chy002 上一次登录:二 10月 31 06:12:35 CST 2017pts/0 上 [chy002@chy002 ~]$
sudo
可以让普通用户以指定用户的身份去执行一条命令。用用命令 visudo打开 /etc/sudoers.tmp也就是sudo的配置文件,visudo可以检测修改的错误。指定到第92行
91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 93 chy002 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat #第二项 ALL=(ALL) 第一个ALL就写成这样就行了,小括号里面ALL是用户,被授予哪个用户的身份 #第三项 ALL 所有的命令,也可以写一个两个,要写绝对路径,且有空格
[root@chy002 ~]# su - chy002 上一次登录:三 11月 1 05:20:55 CST 2017pts/0 上 [chy002@chy002 ~]$ ls /root #一般情况是不能访问root目录 ls: 无法打开目录/root: 权限不够 [chy002@chy002 ~]$ sudo /usr/bin/ls /root 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1) 尊重别人的隐私。 #2) 输入前要先考虑(后果和风险)。 #3) 权力越大,责任越大。 [sudo] chy002 的密码: anaconda-ks.cfg [chy002@chy002 ~]$ cat /root/anaconda-ks.cfg cat: /root/anaconda-ks.cfg: 权限不够 [chy002@chy002 ~]$ sudo /usr/bin/cat /root/anaconda-ks.cfg #version=RHEL7 # System authorization information ... ... %end
在visudo第92行配置中第三项加上NOPASSWD: .可以通过命令别名、用户别名等,把若干项放到一起配置更方便。
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。
su : 切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。
sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。sudo -i 直接运行sudo命令加-i参数
sudo su 运行sudo命令给su命令提权,运行su命令。
sudo -i 运行结果 PWD=/root
sudo su 运行结果 PWD=/home/用户名(当前用户主目录)
限制root远程登录
本地无法限制,限制远程root登录。远程只允许普通用户登录。
#在root中添加visudo配置 ## Allow root to run any commands anywhere root ALL=(ALL) ALL chy002 ALL=(root) /bin/ls, /bin/cat, /bin/su #这样chy002就可以以root用户身份执行su命令, #就会使得普通用户在不知道root密码情况下,用root登录 [root@chy002 ~]# su chy002 [chy002@chy002 root]$ sudo su [sudo] chy002 的密码: [root@chy002 ~]#
[root@chy002 ~]# vi /etc/ssh/sshd_config 48 PermitRootLogin no #打开配置,把yes改成no [root@chy002 ~]# systemctl restart sshd.service #修改后,重启服务
尝试使用xshell的root登录,发现sshd拒绝了服务
普通用户可以