day 13 su命令

3.7 su命令

  • 命令#su -username切换用户,加“-”是为了彻底切换用户,包括切换到该用户自己的配置和环境变量,不加“-”也可切换,但切换后当前目录还是在切换前的目录下,并没有切换到该用户下的环境变量及配置,而加“-”切换后,会改变到切换用户的环境,当前路径会在切换用户的家目录(/home/username)下,在自己家目录下时就会加载其下的一些配置文件; 切换后执行#id可查看当前用户;
  • 命令#su  -  -c "touch  /tmp/file.txt"username在不切换用户情况下以指定用户的身份执行一条命令,注意:如果之前已经在root用户下使用touch创建了file.txt文件,再使用该命令会报错“权限不够” ,例:
  • [[email protected] ~]$ su -    -c    ls                  #注:这是su的参数组合,表示切换到root用户,并且改变到root环境,然后列出root家目录的文件,然后退出root用户
  • 如果一个用户user1没有家目录(#useradd-M user1),那么切换到该用户user1后,由于没有用户的家目录,也没有用户的配置文件可以加载,故其前缀会是“-bash -4.2$”而与常规的不一样,root用户下为其创建家目录:#mkdir /home/user1,并更改家目录的所有者和所属组:#chown user1:user1  /home/user1,但此时切换到user1下时前缀依然不正常(前缀会是"-bash -4.2$"),因为在user1的家目录下没有任何配置文件(正常的用户通过#ls -la可查看到配置文件),系统有一个模板目录(#ls -la /etc/skel)具有配置文件,通过命令#cp /etc/skel/.bash*  /home/user1将所有相应的配置文件拷贝到user1家目录下,并更改家目录下所有文件的所有者和所属组#chmod-R user1:user1  /home/user1
  • 命令#su - 切换到root用户,需要root用户的密码
  • 普通用户之间也可执行命令#su -username进行切换,不过需要切换用户的密码
3.8 sudo命令

sudo命令可以让普通用户临时以指定用户的身份去执行一条命令,通常情况下都是给普通用户授权root用户的身份,执行命令#visudo可以打开sudo的配置文件:/etc/sudoers(最好不要用vi命令去打开和编辑,因为如果有语法错误检测不到,而用visudo可以检测到),找到“root  ALL=(ALL)  ALL”(表示允许root用户在任何地方运行所有命令)在其下添加字段“username  ALL=(ALL)  ALL”,其中第1个ALL表示在任何地方,第2个ALL表示所有用户(也可指定具体某一个用户,如root),第3个ALL表示所有命令(也可列举某些命令如/usr/bin/ls,/usr/bin/mv,/usr/bin/cat等),使用set nu可以查看该文件的行数,实验中让fei用户可执行所有用户(当然包括root用户)的ls,mv和cat命令,配置sudoers:添加字段“fei  ALL=(ALL)  /usr/bin/ls,  /usr/bin/mv,  /usr/bin/cat   
day 13 su命令 
切换到fei用户下,使用$sudo -l可以查看fei用户在本机上可以以root用户的身份执行哪些命令,正常时在fei用户下不能执行$ls /root/,此时执行$sudo ls /root/ 或$sudo /usr/bin/ls /root/ 即可,但第一次执行该命令时要输入fei用户的密码,如果添加字段“fei  ALL=(ALL)  NOPASSWD :  /usr/bin/ls, /usr/bin/mv, /usr/bin/cat”之后就不需再输密码了
day 13 su命令
day 13 su命令
可以在sudoers中给批量命令赋予一个别名,例如在文件“#Comand Aliases”字段处添加字段“Cmnd_Alias FEI_CMD = /usr/bin/ls,/usr/bin/mv,/usr/bin/cat”,然后只添加字段“fei  ALL=(ALL)  FEI_CMD ”;也可以给批量用户或host赋予别名:User_Alias ADMINS = user1, user2; Host_Alias FILESERVERS = fs1, fs2。

也可以让用户组(/etc/group中的用户组)的成员具有root用户的身份执行指定命令,注意用户组名之前要加“%”,比如:“%fei  ALL=(ALL)  FEI_CMD ”
day 13 su命令
day 13 su命令
day 13 su命令
day 13 su命令
扩展
  • sudo-i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码,没有时间限制。执行该命令后提示符变为“#”而不是“$”,想退回普通账户时可以执行“exit”或“logout” , 在root登录情况下运行命令#visudo,添加内容“fei  ALL=(ALL) /bin/bash
  • sudo /bin/bash: 这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限
  • sudo -s : 完全等于sudo  /bin/bash
  • sudo su : 这个命令也是登录到了root,但是并没有切换root的环境变量,比如PATH。
  • sudo su - :  这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了 su - ,这个时候跟使用root登录没有什么区别
3.9 限制root远程登录
禁止root用户远程登录,只允许普通用户登录,普通用户可通过su命令获得root用户的某些权限,但普通用户并不知道root用户的密码,此时使用sudo命令,将root用户的su权限赋予普通用户,那么就使普通用户切换到root用户时就不需要密码了,因为root用户su到root用户自身不需要密码,可以通过sudo给特定普通用户(组)赋予root用户的su命令权限,那么普通用户可通过#sudo su -命令切换到root用户,配置sudoers:添加字段例如“fei  ALL=(ALL)  /usr/bin/su”,该应用的前提是root用户远程登录的功能要被限制(因为普通用户可以不用密码切换到root用户后,可自行更改root用户的密码而后远程登录root,故需要限制root远程登录),运行命令#vi  /etc/ssh/sshd_config配置该配置文件,将其中“#PermitRootLogin  yes”改为“PermitRootLogin no”,改完后执行命令#systemctl restart sshd.service重启服务
day 13 su命令
day 13 su命令