创建一个用户名为:test
[root@localhost /]# useradd test
为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略:
[root@localhost /]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
个人用户的权限只可以在本home下有完整权限,其他目录要看别人授权。而经常需要root用户的权限,这时候sudo可以化身为root来操作。我记得我曾经sudo创建了文件,然后发现自己并没有读写权限,因为查看权限是root创建的。
新创建的用户并不能使用sudo命令,需要给他添加授权。
sudo命令的授权管理是在sudoers文件里的。可以看看sudoers:
[root@localhost /]# sudoers
-bash: sudoers: command not found
[root@localhost /]# whereis sudoers
sudoers: /etc/sudoers /etc/sudoers.d /usr/share/man/man5/sudoers.5.gz
找到这个文件位置之后再查看权限:
[root@localhost /]# ls -l /etc/sudoers
-r--r-----. 1 root root 4328 Sep 30 2020 /etc/sudoers
是的,只有只读的权限,如果想要修改的话,需要先添加w权限:
[root@localhost /]# chmod -v u+w /etc/sudoers
mode of ‘/etc/sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
然后就可以添加内容了,在下面的一行下追加新增的用户:
[root@localhost ~]# vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test ALL=(ALL) ALL #这个是新增的用户
wq保存退出,这时候要记得将写权限收回:
[root@localhost /]# chmod -v u-w /etc/sudoers
mode of ‘/etc/sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)
[root@localhost /]# ls -l /etc/sudoers
-r--r-----. 1 root root 4349 Jul 29 17:06 /etc/sudoers
这时候使用新用户登录,使用sudo:
[root@localhost /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
[test@localhost /]$ sudo cat /etc/passwd
[sudo] password for test:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
原因分析:
docker进程的socket用户试用了root.root属主和属组,导致需要sudo才可以链接服务端socket
[test@localhost /]$ sudo ls -l /var/run/docker.sock
srw-rw----. 1 root root 0 Jul 29 16:30 /var/run/docker.sock
#此时直接执行docker xxx命令会报以下错误:
[test@localhost system]$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json: dial unix /var/run/docker.sock: connect: permission denied
执行sudo docker xxx命令,会提示输入当前账号密码,然后可以成功:
每次执行docker命令都要输入密码不方便,并且在IDEA中无法启动docker,也么有找到可以sudo的地方;
#检测是否有docker组
[root@localhost /]# grep docker /etc/group
#没有就添加,创建名为docker的组
[test@localhost /]$ sudo groupadd docker
#再次检测是否有docker组
[test@localhost /]$ grep docker /etc/group
docker:x:1001:
#将当前用户添加至docker组
[test@localhost /]$ sudo usermod -aG docker test
#重启docker服务:
sudo systemctl restart docker
#添加访问和执行权限:
[test@localhost system]$ sudo chmod a+rw /var/run/docker.sock
[sudo] password for test:
#操作完毕,验证一下,现在可以不用带sudo了:
[test@localhost system]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vertiv/phoenix_frontend latest 379986ffeb87 2 months ago 413MB
vertiv/phoenix_backend latest 0d09d16536d7 2 months ago 310MB
lsassiteweb latest 9913a8de3bd3 2 months ago 696MB
sitewebwinservicehost latest f3b9f2a5ce6f 2 months ago 192MB
influxdb 2.2 6d3691d1aa45 2 months ago 341MB
datahub latest f1524d3a16e6 2 months ago 352MB
vertiv/phoenix_indicators latest 0efad158bd20 2 months ago 171MB
zookeeper latest fd9ec0e72783 4 months ago 278MB
wurstmeister/kafka latest 2dd91ce2efe1 7 months ago 508MB
vertiv/redisbash latest ce47d4a0a382 8 months ago 110MB
vertiv/robin-m latest 7eef79eaf226 9 months ago 179MB
mysql 8.0.22 d4c3cafb11d5 18 months ago 545MB
参考:
Add the docker group if it doesn’t already exist
sudo groupadd docker
Add the connected user $USER to the docker group
Optionally change the username to match your preferred user.
sudo gpasswd -a $USER docker
IMPORTANT: Log out and log back in so that your group membership is re-evaluated.
Restart the docker daemon
sudo service docker restart
If you are on Ubuntu 14.04-15.10, use docker.io instead:
sudo service docker.io restart