9月21日任务centos
3.7 su命令bash
3.8 sudo命令ssh
3.9 限制root远程登陆centos7
对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言没法执行那些只有root用户才能有效的命令,致使工做没法有效进行;spa
系统管理员又不能将root密码告知普通用户,由于容易致使管理的混乱,并可能形成部分严重后果。经过su命令和sudo命令能够有效的解决这些问题!操作系统
Linux系统是一个多用户的操做系统,经常须要切换不一样用户以实现多个需求。su 命令就是实现用户切换登陆的3d
(root用户切换其余用户不要密码,反过来须要密码)rest
使用方法:su [-] USERcode
添加-参数时,在切换到USER身份登陆的同时,会加载其配置文件、环境变量,并切换到用户家目录;ip
如何在不切换用户的前提下,使用其余用户的身份执行命令
su - -c "command" USER
[root@localhost ~]# su - -c "touch /home/castiel/test.log; ls -l /home/castiel/test.log" castiel -rw-rw-r--. 1 castiel castiel 0 ... /home/castiel/test.log # 执行su命令后,当前用户仍是root,并无切换成castiel [root@localhost ~]# whoami root
使用su -命令切换用户,当该用户家目录不存在时,会切换用户登陆,但不会切换工做目录,且提示符将为 -bash-4.2$
[root@localhost ~]# useradd -M user1 [root@localhost ~]# su - user1 su: 警告:没法更改到 /home/user1 目录: 没有那个文件或目录 -bash-4.2$ pwd /root -bash-4.2$ whoami user1
经过手动建立家目录并拷贝模板配置文件/etc/skel/.bash*,实现用户完整切换
[root@localhost ~]# mkdir /home/user1 [root@localhost ~]# cp /etc/skel/.bash* /home/user1 [root@localhost ~]# chown -R user1.user1 /home/user1 [root@localhost ~]# ls -ld /home/user1 drwxr-xr-x. 2 user1 user1 62 ... /home/user1 # 验证切换 [root@localhost ~]# su - user1 上一次登陆:一 ... CST 2017pts/0 上 [user1@localhost ~]$
系统模板文件 /etc/skel/.bash*
[root@centos7 ~]# ls -l /etc/skel/.bash* -rw-r--r--. 1 root root 18 ... /etc/skel/.bash_logout -rw-r--r--. 1 root root 193 ... /etc/skel/.bash_profile -rw-r--r--. 1 root root 231 ... /etc/skel/.bashrc
编辑sudo的配置文件最好使用visudo命令(会检测语法),不要直接去修改其配置文件 /etc/sudoers
其中修改的最核心的一行代码
## Syntax: ## ## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL # 在这行后新添加用户user1的sudo命令 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/cat
3个ALL的含义:
第一个ALL:主机、ip
小括号内的ALL:user1将以什么用户身份执行
后面的ALL:能够执行的命令
后面的命令必须是绝对路径表示,不然容易出错,多个命令能够以逗号和一个空格链接
# 使用visudo命令,当编辑错误时会校验出来 [root@localhost ~]# visudo visudo:>>> /etc/sudoers:syntax error 在行 92 附近<<< 如今作什么? 选项有: 从新编辑 sudoers 文件(e) 退出,不保存对 sudoers 文件的更改(x) 退出并将更改保存到 sudoers 文件(危险!)(Q) # 输入e编辑修改 如今作什么?e
常规设置的规则,初次执行时须要输入用户user1的密码,短期内再次执行不须要再次输入密码!
经过在command前加"NOPASSWD:",能够实现免密码执行。
user1 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat
须要注意的是:在执行sudo命令时提示输入的密码时执行sudo命令的当前用户的密码,而不是root等其余用户的密码!
主机别名
## Host Aliases # 能够写ip,也能够也主机名 Host_Alias TESTSERVERS = 192.168.65.130, 192.168.65.133 # 配合核心代码使用 user1 TESTSERVERS=(ALL) ALL
## User Aliases User_Alias TESTS = user1, test # 配合核心代码使用 TESTS ALL=(ALL) ALL
## Command Aliases Cmnd_Alias TEST = /usr/bin/ls, /usr/bin/cat # 配合核心代码使用 user1 ALL=(ALL) TEST
## 容许wheel组内的用户执行任意命令;容许test组内的用户执行ls,cat命令 %wheel ALL=(ALL) ALL %test ALL=(ALL) /usr/bin/ls, /usr/bin/cat
sudo -i
避免执行sudo时频繁输入密码。提示输入密码为当前帐户的密码。没有时间限制。
执行后进入root帐户,退回执行“exit”或“logout” 。
[user1@localhost ~]$ sudo -i [sudo] password for user1: [root@localhost ~]# whoami root
sudo /bin/bash
会切换到root的bash下,但不能彻底拥有root的全部环境变量,能够拥有root用户的权限。这个命令等同于sudo -s。
[user1@localhost ~]$ sudo /bin/bash [sudo] password for user1: [root@localhost user1]# whoami root
[user1@localhost ~]$ sudo -s [sudo] password for user1: [root@localhost user1]# whoami root [root@localhost user1]# pwd /home/user1
sudo su
登陆到root,但并未切换到root的环境变量。
[user1@localhost ~]$ sudo su [sudo] password for user1: [root@localhost user1]# whoami root [root@localhost user1]# pwd /home/user1
sudo su -
切换为root,能够使用root环境变量。等价于先切换为root,再执行su -命令。
[user1@localhost ~]$ sudo su - [sudo] password for user1: 上一次登陆:二 ... CST ...从 192.168.65.1pts/1 上 [root@localhost ~]# whoami root [root@localhost ~]# pwd /root
不知道root用户密码,没法登陆root,可是能够经过登陆普通用户user
在visudo内编辑user用户执行su命令时不须要密码
user ALL=(ALL) NOPASSWD: /bin/su
在普通用户下执行 sudo su - root,这样就能够登陆到root了
编辑/etc/sshd/sshd_config文件
找到"#PermitRootLogin yes"这一行(个人文件时第49行)
修改成 “PermitRootLogin no”,保存后退出
重启sshd服务
[root@localhost ~]# systemctl restart sshd.service
这里须要注意的是配置文件是sshd_config,而非ssh_config!
限制了root远程登陆,能够经过登陆普通用户,再结合su命令来执行部分root权限。以此实现root用户权限的合理使用。