3.7:su命令:(切换后无时间限制)
1.1、su命令是来切换用户:变更为其他使用者的身份:变更时需要输入用户名及密码:
语法: su [ - ] 用户名
“-”加上后:表示同时切换到用户的环境变量下,如下:
“-”不加:不切换用户的环境的变量:半切换:
[root@localhost ~]# su yuanhh #半切换到yuanhh用户:
[yuanhh@localhost root]$ pwd #查看当前用户的所属目录还是root.
/root
[yuanhh@localhost root]$ su root #当普通用户切换至root用户,则需要输入密码:
密码:
[root@localhost ~]# pwd #切换到root后。
/root
[root@localhost ~]# su - yuanhh #全切换到yuanhh用户:
上一次登录:四 11月 2 01:10:33 CST 2017pts/0 上
[yuanhh@localhost ~]$ pwd #则用户的所属目录则变成了用户的家目录。
/home/yuanhh
注:普通用户是无法查看root用户的文件:
1.2、在root用户登录的时候,以某个用户的身份去执行某一条命令,并且不登录用户:
[root@localhost ~]# su - -c "touch /tmp/zzz" yuanhh #以yuanhh用户的身份来执行。
[root@localhost ~]# ls -ld /tmp/zzz #用ls命令来查看:则属于yuanhh这个用户:
-rw-rw-r-- 1 yuanhh yuanhh 0 11月 2 01:22 /tmp/zzz
注:su - yuanhh -c "ls /tmp/"
1.3、在创建用户的同时,未创建用户的家目录,则需要手动创建家目录,并且拷贝环境变量:
[root@localhost ~]# useradd -M user3 #创建用户user3,不创建用户的家目录:
[root@localhost ~]# su - user3 #切换到用户user3下:
su: 警告:无法更改到 /home/user3 目录: 没有那个文件或目录 #提示家目录不存在,无法切换:
[root@localhost~]#mkdir /home/user3;chown user3:user3 /home/user3 #创建家目录并更改权限,很重要,否则无法使用:
[root@localhost ~]# ls -a /etc/skel/.bash #此目录的.bash开头的为系统默认的环境变量:
.bash_logout .bash_profile .bashrc
[root@localhost ~]# cp /etc/skel/.bash* /home/user3 #拷贝至家目录yuanhh目录下:
[root@localhost ~]# chown -R user3:user3 /home/user3 #更改user3家目录下文件级联:
[root@localhost ~]# su - user3 #切换user3.
[user3@localhost~]$ pwd #所属组正常:
/home/user3
3.8:sudo命令: 只有超级用户root可以使用:(切换后有时间限制)
1.1:语法:su [ 选项 ] 参数
选项如下:
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息
1.2:sudo命令:让其他用户来执行命令,预设用户为root,使用时需输入密码,5分钟后超时重新输入密码:
由于sudo的配置文件为sudoers比较重要,不建议直接编辑,可以用visudo(可检测语法错误)来操作,如下:
[root@localhost ~]# visudo #编辑visudo
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere #核心的配置文件:修改此处即可:
##授权的用户 授权客户端IP=(赋予它系统中哪些用户) 赋予哪些命令给他使用。
root ALL=(ALL) ALL(绝对路径)
yuanhh ALL=(ALL) /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
#注:命令要使用绝对路径,否则会报错,如下:
>>> /etc/sudoers: 语法错误 near line 93 <<<
现在做什么?
选项有:
重新编辑 sudoers 文件(e)
退出,不保存对 sudoers 文件的更改(x)
退出并将更改保存到 sudoers 文件(危险!)(Q)
以上信息表示:授予yuanhh用户(任何地方的主机IP),系统中所有用户的权限,可以用ls,cp,cat等命令:
测试如下:
[root@localhost ~]# su - yuanhh #第一次用su全切换到yuanhh下。
[yuanhh@localhost ~]$ ls /root/ #查看时权限不足:
ls: 无法打开目录/root/: 权限不够
[yuanhh@localhost ~]$ sudo /usr/bin/ls /root/ #
[sudo] yuanhh 的密码: #第一次使用时需要输入密码:此处为yuanhh的用户密码:
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
1.3:如果不想让普通用户使用时输入密码:可以修改如下:
[root@localhost ~]# visudo #编辑
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yuanhh ALL=(ALL) /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
user3 ALL=(ALL) NOPASSWD: /usr/bin/ls,/usr/bin/cp,/usr/bin/cat
#加上"NOPASSWD:" 则下次使用时不需要输入密码:
[root@localhost ~]# su - user3
[user3@localhost ~]$ sudo ls /root/
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
1.4:在配置文件里面三个非常重要的配置文件分别是
Host Alias :通过主机名别名称来限制:
User Alias :通过用户名别名称限制:
Command Alias :通过命令别名来限制。
编辑visudo:添加如下内容:
Cmnd_Alias YUANHH_CMD = /usr/bin/ls, /usr/bin/cat
修改用户的配置:
yuanhh ALL=(ALL) YUANHH_CMD
测试:
[root@localhost ~]# su - yuanhh
[yuanhh@localhost ~]$ sudo ls /root/
[sudo] yuanhh 的密码:
txt 1.txt.bak 2.txt.bak anaconda-ks.cfg yuanhh 重要事宜.txt
3.9:限制root用户的登录:
注:该方法只适用于来root用户的登录:
思路如下:
1、首先修改sshd的配置文件,限制root用户登录系统:
2、给普通用户sudo授权,通过让普通用户临时拥有root的权限来执行:
3、通过普通用户直接sudo su - root下即可:
注:当时普通用户sudo到root用户下,必须要知道root用户的密码我们可以通NOPASSWD设置,如下
1、需要修改配置文件:/etc/ssh/sshd_config #限制root用户登录
vi /etc/ssh/sshd_config
PermitRootLogin yes #将yes修改为no,
systemctl restart sshd.service #重启服务即可:
#修改后则不允许root用户登录,只能先登录普通用户,然后su过来。
2、修改visudo文件:
[root@localhost ~]# visudo
# User_Alias ADMINS = jsmith, mikem
User_Alias YUANHHS = yuanhh, user1 #通过用户名别名来添加多个用户:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yuanhh ALL=(ALL) YUANHH_CMD
YUANHHS ALL=(ALL) NOPASSWD: /usr/bin/su #让普通用户无密码使用su命令:
测试:此时会发现root用户无法登录,登录普通用户,并跳转到root用户来测试。
[yuanhh@localhost ~]$ sudo su - root
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# pwd
/root
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)
测试结果如上:
附记:以下内容网上查找整理:
扩展
sudo与su比较 http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件样例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo -i 也可以登录到root吗? http://www.apelearn.com/bbs/thread-6899-1-1.html
1、su的优缺点;
su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;
2、sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。
3、
sudo su - 约等于 sudo -i
sudo -s 完全等于 sudo /bin/bash 约等于 sudo su