一、su命令
1.命令格式
- su [选项] [-c 命令] [用户名]
相关参数与选项
- -:单纯使用-,代表使用login-shell的变量文件去读取方式登录系统。如果后面没有加用户名,默认切换为root
- -l:与-类似,也是切换用户,以login-shell方式登录
- -m:-m与-p相同,表示使用目前的环境配置,而不读取新使用者的配置文件
- -c:后面加命令,仅执行一次
2.特点
- 使用su切换账号时一定要输入密码才行,输入的密码是你想要切换的那个账号的密码
3.切换为root
①以non-login shell方式变为root
- 方式:直接输入su
- 特点:这种方式登录root,读取的变量设置方式为未登录shell的方式,所以root的配置文件都没有读取,虽然是root,但是执行很多操作不会被修改
- 第一步:切换为root
①以login shell方式变为root
- 方式:su -
- 特点:这种方式登录root,是以登录的方式变为root,此时bash的环境就位root的环境,读取的配置文件也是root的
4.借助他人身份执行一次命令,之后恢复为原来的身份
- 格式:su - -c '命令'
案例:使用root查看/etc/shadow文件,只执行一次,然后退出
- 第一步:以普通用户读取,不能读取,没权限
- 第二步:借助root身份读取一次,然后恢复为自己的身份
5.直接切换为他人用户
- 格式一:su -l 用户名
- 格式二:su - 用户名
二、sudo命令
1.功能
- su主要用于切换用户身份
- sudo主要用于使用其它用户的身份执行命令,执行完命令之后恢复原本的身份。当然,sudo也可以用来直接切换用户
2.命令格式
- sudo [-b] [-u 使用者账号]
相关参数与选项
- -b:把后续的命令放在后台中让系统自行执行,而不与目前的shell产生影响
- -u:后面接想要切换的账号,若省略-u,则默认切换为root
3.特点
- ①sudo使用他人身份执行命令时,输入的是自己的密码,而不是他人的密码
②sudo的时间间隔问题:
- 如果你第一次使用sudo时,系统会让你输入自己的密码。那么当你再次使用sudo的时候,如果两条命令之间间隔在五分钟之间,系统就不会让你输入密码了(人性化与安全性)
4.sudo搭配su使用
- ①概念:我们知道sudo输入之后是使用他人的身份执行一次命令,命令执行完之后还是恢复为自己的身份,那有没有方法可以直接切换为他人身份哪?就是使用sudo与su的搭配
②用法:(其实与su的用法是一模一样的,不过就是在su之前加了个sudo而已)
- sudo su:切换为root
- sudo su -:切换为root
- sudo su - root:切换为root
- sudo su - 其他用户名:切换为其他用户
- sudo su -l 其他用户名:切换为其他用户
5.演示案例
- 案例一:以一般身份使用sudo查看/etc/shadow的内容(就是切换root身份查看)
- 案例二:切换为sshd用户,在/tmp下建立一个myssh文件,然后再删除
6.etc/sudoers文件
- 概念:一个人是否可以使用sudo与/etc/sudoers文件有关,包含在这个文件中的人才可以使用sudo,并且使用sudo可以执行哪些操作,都在这个文件里记录
- 文件格式:如下
文件中的数据被分为三栏,每一栏的意义如下(ALL代表全部)
- 第一栏:用户账号
- 第二栏:等号左边代表登陆者的来源主机名(从哪里可以登录到你的计算机),等号右边代表你可以切换的身份
- 第三栏:代表你可以执行的命令,如果有要求,一定要使用绝对路径
7.visudo命令
- 功能:/etc/sudoers文件必须使用visudo命令来修改,不能直接通过vi或者其他方式修改
- 用法:使用roor权限在命令行直接输入visudo就可以进入/etc/sudoers文件进行修改
- 特点:当你修改完使用visudo修改完/etc/sudoers文件之后,系统还会提示你,/etc/sudoers文件是否有语法错误
8.etc/sudoers文件设置用户
- 格式:用户名 可以从哪里登录=可以切换为那些用户 可以执行那些命令
- 演示案例:
- 例如:我们让person这个用户可以在任何网络主机上面登录(ALL),并且使用sudo时可以切换为任何用户(ALL:ALL),并且可以执行任何命令(ALL)
9..etc/sudoers文件设置用户组
- 格式:%用户组名 可以从哪里登录=可以切换为那些用户 可以执行那些命令
- 特点:设置了之后,在这个用户组里面的所有成员都可以使用sudo
- 演示案例:下图
- 例如:我们让group_person这个用户组的成员可以在任何网络主机上面登录(ALL),并且使用sudo时可以切换为任何用户(ALL:ALL),并且可以执行任何命令(ALL)
10..etc/sudoers文件设置不要密码就可以使用sudo
- 方法:在可以执行哪些命令之前加上NOPASSWD关键字(没设置之前,在/etc/sudoers中的用户或用户组使用sudo命令,第一次都需要输入自己的密码。加上NOPASSWD之后,该用户使用sudo就不需要输入自己的密码,直接就可以使用sudo了)
- 注意:用户、用户组都可以设置
- 案例:下图
- 将huqiong这个用户设置免密使用sudo的功能
11./etc/sudoers文件设置用户的限制操作(这里有个安全问题)
- 案例:我们设置huqiong这个用户只能切换为root,且只能使用passwd命令(一定要使用绝对路径)
- 第一步:在/etc/sudoers文件中设置下面一行
- 第二步:我们测试一下,使用root才可以查看/etc/shadow文件,但是被拒绝了,因为huqiong只能使用passwd命令
- 第三步:我们测试一下,修改dongshao这个用户的密码,发现可以修改成功
- 第四步:我们只输入passwd(我们知道passwd后面不输入用户名时,默认在修改自己的密码,所以使用sudo passwd,就是在修改root的密码),因此这样会造成不安全的问题,因为这样这个用户就可以修改root的密码了,所以我们要做一下调整(后面代表huqiong不能单独使用passwd,并且不能使用passwd root)
- 第五步:设置完测试一下,果然不能修改
12./etc/sudoers文件设置用户、用户组别名
- 概念:有时候,我们需要一下设置十几个用户,或者十几个用户组设置到/etc/sudoers文件中,如果一行一行写,太麻烦,可以使用别名设置
- 演示案例:下图
- 我们设置user1,user2,user3三个用户(如果user都是用户组,也是相同的原理)
- User_Alias:用户名别名,后面的别名自己设定
- Cmnd_Alias:设置用户能使用的命令别名,后面的别名自己设定
还有一个上面没有用到
- Host_Alias:来源主机名别名设置