su和sudo这两个命令是Linux运维必须要会的,通常在生产环境中都是使用普通帐号来登录,再使用su或sudo来执行一些管理命令。su命令 su:runashellwithsubstituteuserandgroupids ,l,login切换后使用指定用户的的shell。〔rootns2〕suuser4〔user4ns2〕这里的shell环境是user4的〔user4ns2〕exitlogout〔rootns2〕suluser4〔user4ns2〕〔user4ns2〕exitlogout〔rootns2〕 c,commandCOMMAND可以在不切换当前shell的情况下,用指定的用户来执行一个命令;〔rootns2〕suuser4cwhoamiuser4〔rootns2〕 如果在su的时候没有加或l或login那么默认的会使用当前用户的shell来执行;sudo命令 sudo的配置文件是:etcsudoers,该文件可以定义哪个用户可以在哪个机器上以哪个用户的身份来执行哪些命令; 在配置sudo时必须使用visudo来编辑配置文件,因为使用visudo可以检查修改后的文件的语法是否正确;whowhere(runas)pathtocommand1, 可以将上面的配置行分成四部分:part1part2part3part4part1:表示哪个用户part2:表示运行该sudo命令的机器,也就是用户执行命令的机器;可以使用ALL来匹配所有;part3:表示该用户要切换到的目标用户;part4:表示要执行的命令;这里的命令必须使用绝对路径,如果只指定了一个目录的话,那么该用户就可以执行该目录下的所有的文件; 例如:xfzhou192。168。1。024(root)usrsbinuseradd,usrsbinusermodxfzhouALL(root)usrsbinsetup 那么如果用户的数量过多的时候是不是要为每个用户来创建一个条目呢,很显示这样做是不科学的。所以sudo就引入了别名的概念,其实和组也差不多;sudoers中定义了四种alias:UserAliasRunasAliasHostAliasCmndAlias alias定义的语法:AliasTypeNAMEitem1,item2, 要注意的是,这个Alias的名称一定要大写;UserAliasADMINuser1,user2 user1是一个用户,user2是一个组,所以user2的前面要加上HostAliasPERMITwww。xfzhou。com,192。168。10。40,192。168。20。024 可以使用主机名,IP地址,网段(网段的掩码可以写成255。255。255。0,也可以写成24)CmndAliasCREATEUSERusrsbinuseradd,usersbinusermod 命令必须使用绝对路径。如果只指定了一个目录,那么用户就可以执行该目录下的所有的文件;上面的右边的都可以使用!来取反。表示除了xxx以外; 例子:请允许user1,user2,user3在192。168。20。44和192。168。10。024网段的机器上使用sudo切换到root用户来执行useradd和setup命令;testforsudoUserAliasTESTUSERSuser1,user2,user3HostAliasPERMITHOST192。168。10。024,192。168。20。44CmndAliasCREATEUSERusrsbinuseradd,usrsbinsetupTESTUSERSPERMITHOST(root)CREATEUSER 然后就可以使用user1,user2,user3这三个用户去测试了;普通用户查看自己可以使用的sudo命令:〔user1ns2〕sudolMatchingDefaultsentriesforuser1onthishost:requiretty,!visiblepw,envreset,envkeepCOLORSDISPLAYHOSTNAMEHISTSIZEINPUTRCKDEDIRLSCOLORSMAILPS1PS2QTDIRUSERNAMELANGLCADDRESSLCCTYPELCCOLLATELCIDENTIFICATIONLCMEASUREMENTLCMESSAGESLCMONETARYLCNAMELCNUMERICLCPAPERLCTELEPHONELCTIMELCALLLANGUAGELINGUASXKBCHARSETXAUTHORITYRunasandCommandspecificdefaultsforuser1:Useruser1mayrunthefollowingcommandsonthishost:(root)usrsbinuseradd,usrsbinsetup〔user1ns2〕 注意:当用户第一次执行sudo命令的时候是需要用户输入自己的密码的。当第一次输入正确后,这个密码就会被缓存5分钟,在5分钟内用户再次使用sudo来切换身份执行命令的时候就不需要再次输入自己的密码。 这样呢有些时候会有一个安全隐患,所以为了去掉这个5分钟,可以在使用sudo命令的时候加上k参数,这样用户在每次执行sudo命令的时候都会让用户输入自己的密码。sudo无密码执行命令 如果想让某个用户在执行sudo的时候不需要输入自己的密码,那么可以在命令的前面添加NOPASSWD。etcsudoers的内容如下:testforsudoUserAliasTESTUSERSuser1,user2,user3HostAliasPERMITHOST192。168。10。024,192。168。20。44CmndAliasCREATEUSERusrsbinuseradd,usrsbinsetupTESTUSERSPERMITHOST(root)NOPASSWD:CREATEUSER 这样的话,user1,user2,user3这三个用户在执行指定的命令的时候就不需要输入自己的密码了。 如果其中的命令有的需要输入密码,有的不需要输入密码的话,那就把PASSWD:写在那些命令的前面。或是把NOPASSWD:写在最后一个命令中;user1192。168。10。44(root)NOPASSWD:usrsbinuseradd,PASSWD:usrsbinusermod 例子:让用户user4使用passwd来管理用户的密码,但是不能给root用户设置密码:user4ALL(root)usrbinpasswd〔AZaz〕,!usrbinpasswdroot 注意:如果最后不加上!usrbinpasswdroot的话,那么会有很大的漏洞,user4可以修改root用户的密码;当添加上后,user4再次执行sudopasswdroot的时候就会提示:〔user4ns2〕sudopasswdroot〔sudo〕passwordforuser4:Sorry,useruser4isnotallowedtoexecuteusrbinpasswdrootasrootonns2。xfzhou。com。〔user4ns2〕