Я попытался настроить официальный samba-формула с помощью советов, приведенных в pillar.example . А именно, не хранить отдельные версии паролей passwd
и nt
, а генерировать их из простого текста.
столб:
samba:
users:
myuser: secretpassword
anotheruser: anotherpassword
test.sls:
{% for user,pass in salt['pillar.get']('samba:users').items() %}
TEST {{ user }} passwd:
cmd.run:
- name: echo {{ salt['cmd.run']('openssl passwd -1 %s'|format(pass)) }}
TEST {{ user }} NT:
cmd.run:
- name: echo {{ salt['pdbedit.generate_nt_hash'](pass) }}
{% endfor %}
salt \* state.sls test
вывод:
dagobah:
----------
ID: TEST myuser passwd
Function: cmd.run
Name: echo $1$mQ1ZzhKj$WCYoiLCQt.tfv17Ah7Ieo/
Result: True
Comment: Command "echo $1$mQ1ZzhKj$WCYoiLCQt.tfv17Ah7Ieo/" run
Started: 12:37:19.256664
Duration: 6.759 ms
Changes:
----------
pid:
207202
retcode:
0
stderr:
stdout:
.tfv17Ah7Ieo/
----------
ID: TEST myuser NT
Function: cmd.run
Name: echo b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'
Result: True
Comment: Command "echo b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'" run
Started: 12:37:19.263747
Duration: 6.232 ms
Changes:
----------
pid:
207203
retcode:
0
stderr:
stdout:
bDC265511A1D1A7A3CE6F6D2A3FB6BBE1
----------
ID: TEST anotheruser passwd
Function: cmd.run
Name: echo $1$mpgMPMzY$1/oDCGOm16gOs0.mR62YX0
Result: True
Comment: Command "echo $1$mpgMPMzY$1/oDCGOm16gOs0.mR62YX0" run
Started: 12:37:19.270225
Duration: 6.083 ms
Changes:
----------
pid:
207204
retcode:
0
stderr:
stdout:
/oDCGOm16gOs0.mR62YX0
----------
ID: TEST anotheruser NT
Function: cmd.run
Name: echo b'69AA7AD81335466852B12532895FA9A9'
Result: True
Comment: Command "echo b'69AA7AD81335466852B12532895FA9A9'" run
Started: 12:37:19.276565
Duration: 7.01 ms
Changes:
----------
pid:
207205
retcode:
0
stderr:
stdout:
b69AA7AD81335466852B12532895FA9A9
Summary for dagobah
------------
Succeeded: 4 (changed=4)
Failed: 0
------------
Total states run: 4
Total run time: 26.084 ms
Таким образом, пока часть openssl passwd
работает как положено, pdbedit.generate_nt_hash
возвращает строку байтов.
salt \* pdbedit.generate_nt_hash secretpassword
дает DC265511A1D1A7A3CE6F6D2A3FB6BBE1
, но вызов его изнутри jinja дает
b'DC265511A1D1A7A3CE6F6D2A3FB6BBE1'
распознавание кавычек делает его
bDC265511A1D1A7A3CE6F6D2A3FB6BBE1
Я просмотрел список встроенных фильтров Джинджи , но не нашел ничего подходящего.
Лучший обходной путь, который я могу себе представить, - это просто убрать ведущий b
.
- Каким будет солёный подход к решению этой проблемы?
- Есть ли какой-нибудь Джинджа эквивалентен python х
decode('utf-8')
? - Если в решении будет написан мой собственный фильтр Jinja, относительно моей структуры соли
file
и pillar
, где я должен разместить пользовательские фильтры Jinja? Например, есть ли последствия для области действия или пространств имен для рассмотрения? - Я что-то пропустил?
Заранее спасибо!