su,就是switch user,即转换用户的意思。
sudo的出现只是为了让su安全一点,rm命令用起来爽,代价可大了。
gyz是home下的一个用户。
1,先看终端表面上的区别:
a,从普通用户gyz切换到超级用户root(后面不跟root用户名)
a1.........su:(允许操作)
[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su
密码:
[root@archlinux gyz]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#
a2.........su -:(允许操作)
[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su -
密码:
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#
a3.........sudo:(半允许操作)
[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
[command]
usage: sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
[-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-T timeout]
[-u user] file ...
[gyz@archlinux ~]$
b,从普通用户gyz切换到超级用户root(后面跟root用户名)
b1.........su root:(允许操作)
[gyz@archlinux ~]$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[gyz@archlinux ~]$ su root
密码:
[root@archlinux gyz]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 job work
[root@archlinux gyz]# pwd
/home/gyz
[root@archlinux gyz]#
b2.........su - root:(允许操作)
[gyz@archlinux ~]$ ls
job work 下载 公共 图片 文档 桌面 模板 视频 音乐
[gyz@archlinux ~]$ su - root
Password:
[root@archlinux ~]# ls
[root@archlinux ~]# pwd
/root
[root@archlinux ~]#
b3.........sudo root:(无此操作)
[gyz@archlinux ~]$ ls
job work 下载 公共 图片 文档 桌面 模板 视频 音乐
[gyz@archlinux ~]$ sudo root
[sudo] password for gyz:
sudo: root: command not found
[gyz@archlinux ~]$
从上面的a1和b1是等效的,a2和b2也是等效的,事实上,su和su -后面不加root的话,默认就是root。
2,从普通用户gyz到普通用户tester
home下没有tester这个用户的,可以添加一个tester:
[gyz@archlinux home]$ ls
gyz tester
[gyz@archlinux home]$ mkdir tester
mkdir: 无法创建目录 “tester”: 文件已存在
[gyz@archlinux home]$ sudo useradd -d /home/tester -s /bin/bash tester
useradd:用户“tester”已存在
[gyz@archlinux home]$ sudo passwd tester
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
[gyz@archlinux home]$
-d是指定/home/tester 为主目录,-s是指定shell 脚本。
a1.........su tester:(允许操作)
[gyz@archlinux home]$ su tester
密码:
[tester@archlinux home]$ ls
gyz tester
[tester@archlinux home]$ pwd
/home
[tester@archlinux home]$
a2.........su - tester:(允许操作)
[gyz@archlinux home]$ su - tester
Password:
[tester@archlinux ~]$ ls
[tester@archlinux ~]$ pwd
/home/tester
[tester@archlinux ~]$
a3.........sudo tester:(不允许操作)
[gyz@archlinux home]$ sudo tester
sudo: tester:找不到命令
[gyz@archlinux home]$
3,本质区别:
a,“su 用户”只是用户身份切换了,但是环境没有变,比如bash的配置,用的是切换前的用户的,我们pwd的时候,也发现了,切换前后,路径并没有变;
b,“su - 用户”不但用户身份切换了,而且环境也跟着变了,此时bash的配置,使用的root的配置,pwd的时候,发现它跑到了它的主目录下了,即我们cd ~的那个目录;
c,“sudo 命令”只是允许用户以root身份执行该命令,权利仅仅限于此次命令的执行,在/etc/sudoers(这个文件是only read的,可以先给个写权限,写完保存,再取消写权限,不过我看到说sudo visudo会保证该文件的读写安全性,即你在修改时,别人不能修改)里面修改;
d,“su 用户”“su - 用户”这里输入的密码是要切换到的用户的密码(如果是root,则输入root的密码),"sudo 命令"只是当且用户的密码;
e,“sudo 命令”也不牵扯切换用户的说法,所以sudo虽然麻烦,但是比较安全;
f,su -比su多了一些操作,主要是读取了root和系统的bash的配置文件;
g,sudo在部分脚本或者软甲内是不能用的,会看是不是全部的root身份;
h,su -等同于su过去后执行: bash /etc/profile和bash /root/.bashrc;
l,如果切换身份最好使用su - xxx。
推荐一个QQ群:374738050