vagrant
.ʻUser01 a le droit d'accès sous ʻuser02
,
ʻUser02 veut réaliser un état où il n'y a pas d'autorité d'accès sous ʻuser01
.
Ajoutez ʻuser01 au groupe
sample2`.
[root@websvr ~]# usermod -aG sample2 user01
Vérification
[root@websvr ~]# groups user01
user01 : sample1 sample2
[root@websvr ~]# groups user02
user02 : sample2
De plus, puisque je veux définir l'autorité d'accès pour ʻuser01 sous ʻuser02
sur une autorisation de lecture uniquement pour les fichiers et les répertoires,
Pour le répertoire user02
, procédez comme suit:
[root@websvr ~]# chmod 750 /home/user02
[root@websvr ~]# ll /home/
total 4
drwx------. 3 user01 sample1 78 Jan 1 14:56 user01
drwxr-x---. 3 user02 sample2 78 Jan 1 14:56 user02
drwx------. 17 vagrant vagrant 4096 Dec 31 19:31 vagrant
Si vous ne donnez pas x
au groupe, ʻuser01 ne peut pas se déplacer vers
/ home / user02`.
J'ai pu confirmer que ʻuser01 ne peut pas supprimer le fichier créé par ʻuser02
.
[user01@websvr user02]$ whoami
user01
[user01@websvr user02]$ pwd
/home/user02
[user01@websvr user02]$ ll
total 0
-rw-r--r--. 1 user02 sample2 0 Jan 1 15:03 test.txt
[user01@websvr user02]$ rm test.txt
rm: remove write-protected regular empty file ‘test.txt’? y
rm: cannot remove ‘test.txt’: Permission denied
Je veux réaliser une telle chose avec ʻansible`.
Depuis le nœud de contrôle (environnement hôte), configurez pour vous connecter au nœud cible (environnement invité) avec ssh
sans mot de passe.
Enregistrez la clé publique créée dans le nœud de contrôle dans le nœud cible.
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key ($HOME/.ssh/id_rsa):
$HOME/.ssh/id_rsa already exists.
Overwrite (y/n)? n
Je l'ai déjà créé, je vais donc l'interrompre. Enregistrez la clé publique avec le nœud cible.
ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "$HOME/.ssh/id_rsa.pub"
The authenticity of host '192.168.33.10 (192.168.33.10)' can't be established.
ECDSA key fingerprint is SHA256:mjGym7gkqWjPvW2JXhKjqWl4XC6wuhgNIukldSVtkFk.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
Assurez-vous que vous pouvez vous connecter sans mot de passe.
ssh [email protected]
Last login: Tue Dec 31 18:41:18 2019 from 10.0.2.2
[vagrant@websvr ~]$ exit
Se déconnecter
Connection to 192.168.33.10 closed.
Préparez ʻansible.cfg du côté du nœud de contrôle. Puisque ʻansible.cfg
peut être défini individuellement, créez-le ci-dessous.
pwd
$HOME/Desktop/workspace/ansible/ansible-study
touch ansible.cfg
Définissez comme suit dans .ansible.cfg
.
[defaults]
forks = 10
log_path = $HOME/.ansible/ansible.log
host_key_checking = False
gathering = smart
inventory = ./inventory.ini
remote_user = vagrant
private_key_file = /path/vagrant_private_key
[ssh_connection]
Le fichier private_key_file
ci-dessus est obtenu à partir du fichier d'identité
suivant.
cd $HOME/Desktop/workspace/vagrant
vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /path/vagrant_private_key
IdentitiesOnly yes
LogLevel FATAL
Décrivez les informations du nœud cible dans ʻinventory.ini`.
touch inventory.ini
cat inventory.ini
[test_servers]
192.168.33.10
Exécutez la commande ping
sur le nœud cible.
$ ansible -i inventory.ini test_servers -m ping -u vagrant
192.168.33.10 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Puisque les informations nécessaires sont décrites dans ʻansible.cfg`, la commande suivante peut être utilisée.
$ ansible test_servers -m ping
192.168.33.10 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Pour pouvoir restaurer le nœud cible, procédez comme suit: Même si vous faites une erreur lors de l'exécution du playbook, vous pouvez recommencer.
$ vagrant sandbox status
[default] Sandbox mode is off
Activer les paramètres
$ vagrant sandbox on
[default] Starting sandbox mode...
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Vérifier les paramètres
$ vagrant sandbox status
[default] Sandbox mode is on
Le livre de lecture qui réalise ce que vous voulez faire ci-dessus est le suivant.
create_user.yml
---
- hosts: test_servers
become: yes
vars_files:
- user_list.yml
tasks:
- name: Create group
group:
name: "{{ item.name }}"
with_items:
- "{{ group_list }}"
when: group_list
- name: Create user
user:
name: "{{ item.name }}"
group: "{{ item.group }}"
groups: "{{ item.groups }}"
password: "{{ item.password }}"
shell: /bin/bash
state: present
with_items:
- "{{ users_list }}"
when: users_list
- name: Permission of directory /home/user02 is '0750'
file:
dest: /home/{{ item.name }}
mode: "0750"
with_items:
- "{{ subordinate_authority }}"
user_list.yml
group_list:
- { name: sample1 }
- { name: sample2 }
users_list:
- {
name: "user01",
group: "sample1",
groups: "sample1, sample2",
password: "{{ 'password'|password_hash('sha512') }}",
comment: "user01",
}
- {
name: "user02",
group: "sample2",
groups: "sample2",
password: "{{ 'password'|password_hash('sha512') }}",
comment: "user02",
}
superior_authority:
- { name: user01 }
subordinate_authority:
- { name: user02 }
Exécuter.
ansible-playbook create_user.yml
PLAY [test_servers] *************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [192.168.33.10]
TASK [Create group] *************************************************************************************************************************************************************************************************************************
[DEPRECATION WARNING]: evaluating [{'name': 'sample1'}, {'name': 'sample2'}] as a bare variable, this behaviour will go away and you might need to add |bool to the expression in the future. Also see CONDITIONAL_BARE_VARS configuration
toggle.. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [192.168.33.10] => (item={'name': 'sample1'})
changed: [192.168.33.10] => (item={'name': 'sample2'})
TASK [Create user] **************************************************************************************************************************************************************************************************************************
[DEPRECATION WARNING]: evaluating [{'name': 'user01', 'group': 'sample1', 'groups': 'sample1, sample2', 'password': '$6$cuuPF7HsudjoJ9/v$G1zztM4ZLPs6UJk/fxwgjbOAkXJ32pszjjw.J.M2t.KTlO99Bus2D1AzucT.872WBs7oqp.RfOIEjf187X6cR1', 'comment':
'user01'}, {'name': 'user02', 'group': 'sample2', 'groups': 'sample2', 'password': '$6$cuuPF7HsudjoJ9/v$G1zztM4ZLPs6UJk/fxwgjbOAkXJ32pszjjw.J.M2t.KTlO99Bus2D1AzucT.872WBs7oqp.RfOIEjf187X6cR1', 'comment': 'user02'}] as a bare variable,
this behaviour will go away and you might need to add |bool to the expression in the future. Also see CONDITIONAL_BARE_VARS configuration toggle.. This feature will be removed in version 2.12. Deprecation warnings can be disabled by
setting deprecation_warnings=False in ansible.cfg.
changed: [192.168.33.10] => (item={'name': 'user01', 'group': 'sample1', 'groups': 'sample1, sample2', 'password': '$6$VpS/Wgs9fy5KDTI8$ZXwfSsnz4jeQ6rAOX4X8HP4xu3ndeVtasHiY0SOaeZoYUvPU3CQQQ4ww3y6VfEJAlS4jJPpXn7rRxUljY.Sc60', 'comment': 'user01'})
[DEPRECATION WARNING]: evaluating [{'name': 'user01', 'group': 'sample1', 'groups': 'sample1, sample2', 'password': '$6$wjPKJca0K2oKgwFY$5JzcugEn1.kc1KXN9XYBJVub9e.AzUT28S4ZOGy.vwKhRVkSB9dqUjUcs/sqRPf8kDG94nqAT3.S8YaA3cime1', 'comment':
'user01'}, {'name': 'user02', 'group': 'sample2', 'groups': 'sample2', 'password': '$6$wjPKJca0K2oKgwFY$5JzcugEn1.kc1KXN9XYBJVub9e.AzUT28S4ZOGy.vwKhRVkSB9dqUjUcs/sqRPf8kDG94nqAT3.S8YaA3cime1', 'comment': 'user02'}] as a bare variable,
this behaviour will go away and you might need to add |bool to the expression in the future. Also see CONDITIONAL_BARE_VARS configuration toggle.. This feature will be removed in version 2.12. Deprecation warnings can be disabled by
setting deprecation_warnings=False in ansible.cfg.
changed: [192.168.33.10] => (item={'name': 'user02', 'group': 'sample2', 'groups': 'sample2', 'password': '$6$VpS/Wgs9fy5KDTI8$ZXwfSsnz4jeQ6rAOX4X8HP4xu3ndeVtasHiY0SOaeZoYUvPU3CQQQ4ww3y6VfEJAlS4jJPpXn7rRxUljY.Sc60', 'comment': 'user02'})
TASK [Permission of directory /home/user02 is '0750'] ***************************************************************************************************************************************************************************************
changed: [192.168.33.10] => (item={'name': 'user02'})
PLAY RECAP **********************************************************************************************************************************************************************************************************************************
192.168.33.10 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Le résultat de l'exécution du nœud cible est le suivant.
[root@websvr ~]# ll /home/
total 4
drwx------. 3 user01 sample1 78 Jan 1 15:11 user01
drwxr-x---. 3 user02 sample2 78 Jan 1 15:11 user02
drwx------. 17 vagrant vagrant 4096 Dec 31 19:31 vagrant
[root@websvr ~]# cat /etc/group | grep user01
sample1:x:1002:user01
sample2:x:1003:user01,user02
Créez un fichier avec ʻuser02. Après cela, il devient ʻuser01
et le droit d'accès est confirmé.
[root@websvr ~]# su - user02
[user02@websvr ~]$ touch test.txt
[user02@websvr ~]$ ll
total 0
-rw-r--r--. 1 user02 sample2 0 Jan 1 15:32 test.txt
[user02@websvr ~]$ su - user01
Password:
Last login: Wed Jan 1 15:32:11 UTC 2020 on pts/0
[user01@websvr ~]$ cd /home/user02/
[user01@websvr user02]$ ll
total 0
-rw-r--r--. 1 user02 sample2 0 Jan 1 15:32 test.txt
Je ne peux pas non plus supprimer le fichier.
[user01@websvr user02]$ rm test.txt
rm: remove write-protected regular empty file ‘test.txt’? y
rm: cannot remove ‘test.txt’: Permission denied
Recommended Posts