重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
什么是su?
创新互联公司:于2013年开始为各行业开拓出企业自己的“网站建设”服务,为上1000家公司企业提供了专业的成都网站制作、做网站、网页设计和网站推广服务, 按需求定制网站由设计师亲自精心设计,设计的效果完全按照客户的要求,并适当的提出合理的建议,拥有的视觉效果,策划师分析客户的同行竞争对手,根据客户的实际情况给出合理的网站构架,制作客户同行业具有领先地位的。
su的全称并不是super user,而是switch user,是不是就突然明白了?是切换用户的意思。su的一般使用方法是su或者su -,两种方法虽然只差了1个字符,但也是有比较大的差异的。
加入了-参数,就是login-shell的方式,也就是说切换到另一个用户之后,当前的shell会加载对应的环境变量和各种设置;
如果没有加入-参数,就是non-login-shell的方式,也就是说当前的shell还是加载切换之前的那个用户的环境变量以及各种设置。
如果不想因为切换到另一个用户导致自己在当前用户下的设置不可用,那么就可以用non-login-shell的方式;如果切换用户后,需要用到该用户的各种环境变量,那么使用login-shell方式即可。
什么是sudo?
全称为super user do,即以超级用户的方式执行命令,这里的超级用户指的就是root用户,我们在Linux中有时会遇到permission
denied的情况,如以ubuntu用户的身份查看/etc/shadow的内容,因为它是只有root用户才能查看的,这个时候就可以使用sudo。
两者的区别在于:
使用su - 提供root账号的密码,可以切换到root用户;
使用sudo su -,提供当前用户的密码,也可以切换到root用户。
如果我们的Linux系统有很多用户需要使用的话,前者要求所有用户都知道root用户的密码,显然是非常危险的;后者是不需要暴露root账户密码的,用户只需要输入自己的账户密码就可以。
su和sudo都是Linux操作系统里面比较常见的命令,而且sudo命令很多方面类似于su命令,所以有的时候大家分不清楚它们,那么Linux中su和sudo命令有什么区别?如果你还不清楚,这篇文章千万别错过!
定义上的区别:
su为switch
user,即切换用户的简写。su是最简单的身份切换名,用su我们能够进行不论什么用户的切换,一般都是su-username,然后输入password就OK了,可是root用su切换到其他身份的时候是不需要输入password的。
sudo是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的管理命令。
格式上的区别:
su格式有两种:su -l USERNAME、su USERNAME。
sudo格式:sudo -u USERNAME COMMAND。
密码上的区别:
两个命令的最大区别是:sudo命令需要输入当前用户的密码,su命令需要输入root用户的密码。
日志记录上的区别:
尽管sudo命令以目标用户的身份执行命令,但是它们会使用sudoer所配置的用户名来记录是谁执行的命令。而su命令是无法直接跟踪记录用户切换到root用户之后执行了什么操作。
灵活性上的区别:
sudo命令比su命令灵活很多,甚至可以限制sudo用户可以访问哪些命令。换句话来讲,用户通过sudo命令只能访问他们工作需要的命令,而su命令让用户有权限做任何事情。
su和sudo这两个命令是Linux运维必须要会的,通常在生产环境中都是使用普通帐号来登录,再使用su或sudo来执行一些管理命令。
su:run a shell with substitute user and group ids
-,-l,--login 切换后使用指定用户的的shell。
-c,--command=COMMAND 可以在不切换当前shell的情况下,用指定的用户来执行一个命令;
如果在su的时候没有加”-“或“-l”或“--login”那么默认的会使用 当前用户 的shell来执行 ;
sudo的配置文件是: /etc/sudoers ,该文件可以定义哪个用户可以在哪个机器上以哪个用户的身份来执行哪些命令;
在配置sudo时必须使用 visudo 来编辑配置文件,因为使用visudo可以检查修改后的文件的语法是否正确;
可以将上面的配置行分成四部分:part1 part2 part3 part4
例如:
那么如果用户的数量过多的时候是不是要为每个用户来创建一个条目呢,很显示这样做是不科学的。所以sudo就引入了别名的概念,其实和组也差不多;
alias定义的语法:
要注意的是,这个Alias的名称一定要大写;
user1是一个用户,user2是一个组,所以user2的前面要加上%
可以使用主机名,IP地址,网段(网段的掩码可以写成255.255.255.0,也可以写成/24)
命令必须使用绝对路径。如果只指定了一个目录,那么用户就可以执行该目录下的所有的文件;上面的“=”右边的都可以使用“!”来取反。表示除了xxx以外;
例子 :请允许user1,user2,user3在192.168.20.44和192.168.10.0/24网段的机器上使用sudo切换到root用户来执行useradd和setup命令;
然后就可以使用user1,user2,user3这三个用户去测试了;
注意:当用户第一次执行sudo命令的时候是需要用户输入自己的密码的。当第一次输入正确后,这个密码就会被缓存5分钟,在5分钟内用户再次使用sudo来切换身份执行命令的时候就不需要再次输入自己的密码。
这样呢有些时候会有一个安全隐患,所以为了去掉这个5分钟,可以在使用sudo命令的时候加上“-k”参数,这样用户在每次执行sudo命令的时候都会让用户输入自己的密码。
如果想让某个用户在执行sudo的时候不需要输入自己的密码,那么可以在命令的前面添加NOPASSWD。/etc/sudoers的内容如下:
这样的话,user1,user2,user3这三个用户在执行指定的命令的时候就不需要输入自己的密码了。
如果其中的命令有的需要输入密码,有的不需要输入密码的话,那就把PASSWD:写在那些命令的前面。或是把NOPASSWD:写在最后一个命令中;
例子:让用户user4使用passwd来管理用户的密码,但是不能给root用户设置密码:
注意:如果最后不加上!/usr/bin/passwd root的话,那么会有很大的漏洞,user4可以修改root用户的密码;当添加上后,user4再次执行sudo passwd root的时候就会提示:
sudo 表示 “superuser do”。 它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来以提升的权限来运行命令。
apt 是Linux下的一款安装包管理工具,是一个客户/服务器系统。sudo apt-get是用来安装linux下的各种工具包的。
扩展资料:
注意事项:
编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi(vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,而使用visudo命令去配置保存时会进行语法检查,有错会有提示。
命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
参考资料来源:百度百科-sudo