SSH, sudo олон улсын тэмцээнд түрүүлсэн тамирчид дахин дэвжээнд гарлаа. Актив лавлахын нэр хүндтэй удирдаачаар удирдуулсан

Түүхийн хувьд sudo зөвшөөрлийг файлын агуулгаар удирддаг байсан /etc/sudoers.d и visudo, мөн гол зөвшөөрлийг ашиглан хийсэн ~/.ssh/authorized_keys. Гэсэн хэдий ч дэд бүтэц хөгжихийн хэрээр эдгээр эрхийг төвлөрсөн байдлаар удирдах хүсэл бий. Өнөөдөр хэд хэдэн шийдлийн сонголт байж болно:

  • Тохиргооны удирдлагын систем - дарга, Тоглоом, Алгасах, Солт
  • Идэвхтэй лавлах + SSSD
  • Скрипт болон гарын авлагын файл засварлах хэлбэрээр янз бүрийн гажуудал

Миний субьектив бодлоор төвлөрсөн удирдлагын хамгийн сайн сонголт бол хослол хэвээр байна Идэвхтэй лавлах + SSSD. Энэ аргын давуу талууд нь:

  • Үнэхээр нэг төвлөрсөн хэрэглэгчийн лавлах.
  • Эрхийн хуваарилалт sudo Энэ нь тодорхой аюулгүй байдлын бүлэгт хэрэглэгч нэмэхэд хүргэдэг.
  • Төрөл бүрийн Линукс системүүдийн хувьд тохиргооны системийг ашиглахдаа үйлдлийн системийг тодорхойлох нэмэлт шалгалтуудыг нэвтрүүлэх шаардлагатай болдог.

Өнөөдрийн иж бүрдэл нь холболтод тусгайлан зориулагдах болно Идэвхтэй лавлах + SSSD эрхийн менежментийн хувьд sudo болон хадгалах SSH нэг репозитор дахь түлхүүрүүд.
Ингээд танхим ширүүн чимээгүй болж, удирдаач бороохойгоо өргөөд найрал хөгжим бэлтгэлд оров.
Яв.

Үүнд:
- Active Directory домэйн testopf.local Windows Server 2012 R2 дээр.
— Centos 7 үйлдлийн системтэй Linux хост
— Зөвшөөрөлийг ашиглан тохируулсан SSSD
Хоёр шийдэл нь схемд өөрчлөлт оруулдаг Идэвхтэй лавлах, тиймээс бид бүх зүйлийг туршилтын орчинд шалгаж, зөвхөн дараа нь ажлын дэд бүтцэд өөрчлөлт оруулдаг. Бүх өөрчлөлтүүд нь зорилтот бөгөөд үнэн хэрэгтээ зөвхөн шаардлагатай шинж чанарууд, ангиудыг нэмдэг гэдгийг тэмдэглэхийг хүсч байна.

Үйлдэл 1: хяналт sudo дамжуулан үүрэг гүйцэтгэдэг Идэвхтэй лавлах.

Хэлхээ тэлэхийн тулд Идэвхтэй лавлах Та хамгийн сүүлийн хувилбарыг татаж авах хэрэгтэй sudo - Өнөөдрийн байдлаар 1.8.27. Файлыг задлаад хуулна уу схем.ActiveDirectory ./doc лавлахаас домэйн хянагч руу. Файлыг хуулсан лавлахаас администраторын эрх бүхий тушаалын мөрөөс дараахыг ажиллуулна уу:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(Үнэт зүйлсээ орлуулахаа бүү мартаарай)
Нээлттэй adsiedit.msc болон үндсэн контексттэй холбогдоно уу:
Домэйн үндэс дээр хэлтэс үүсгэ хөлс. (Хөрөнгөтнүүд энэ нэгжид чөтгөр байдаг гэж зөрүүдлэн мэдэгддэг SSSD зүйлийг хайж байна sudoRole объектууд. Гэсэн хэдий ч нарийвчилсан дибаг хийж, бүртгэлийг судалсны дараа хайлтыг бүхэл бүтэн лавлах модоор хийсэн болох нь тогтоогдсон.)
Бид хэлтэст ангид хамаарах анхны объектыг үүсгэдэг sudoRole. Нэрийг дур зоргоороо сонгож болно, учир нь энэ нь зөвхөн танихад тохиромжтой.
Схемийн өргөтгөлийн боломжит шинж чанаруудын дотроос гол нь дараах байдалтай байна.

  • sudoCommand — хост дээр ямар командыг гүйцэтгэхийг зөвшөөрдөгийг тодорхойлно.
  • sudoHost — энэ үүрэг ямар хостуудад хамаарахыг тодорхойлно. гэж тодорхойлж болно БҮХ, мөн тусдаа хостын нэрээр. Мөн маск хэрэглэх боломжтой.
  • sudoUser — ямар хэрэглэгчид гүйцэтгэхийг зөвшөөрч байгааг заана sudo.
    Хэрэв та аюулгүй байдлын бүлгийг зааж өгсөн бол нэрний эхэнд "%" тэмдэг нэмнэ үү. Хэрэв бүлгийн нэрэнд хоосон зай байгаа бол санаа зовох зүйл байхгүй. Бүртгэлээс харахад орон зайнаас зугтах ажлыг механизм хариуцдаг SSSD.

SSH, sudo олон улсын тэмцээнд түрүүлсэн тамирчид дахин дэвжээнд гарлаа. Актив лавлахын нэр хүндтэй удирдаачаар удирдуулсан
Зураг 1. лавлахын үндэс дэх sudoers дэд хэсэгт байрлах sudoRole объектууд

SSH, sudo олон улсын тэмцээнд түрүүлсэн тамирчид дахин дэвжээнд гарлаа. Актив лавлахын нэр хүндтэй удирдаачаар удирдуулсан
Зураг 2. sudoRole объектуудад заасан хамгаалалтын бүлгүүдийн гишүүнчлэл.

Дараах тохиргоог Линукс тал дээр хийсэн.
Файлд /etc/nsswitch.conf файлын төгсгөлд мөр нэмнэ:

sudoers: files sss

Файлд /etc/sssd/sssd.conf хэсэгт [sssd] үйлчилгээнд нэмэх sudo

cat /etc/sssd/sssd.conf | grep services
services = nss, pam, sudo

Бүх үйлдлүүдийн дараа та sssd демон кэшийг цэвэрлэх хэрэгтэй. Автомат шинэчлэлтүүд 6 цаг тутамд гарч ирдэг, гэхдээ бид одоо хүссэн үедээ яагаад ийм удаан хүлээх ёстой гэж?

sss_cache -E

Кэшийг цэвэрлэх нь тус болохгүй нь ихэвчлэн тохиолддог. Дараа нь бид үйлчилгээг зогсоож, мэдээллийн санг цэвэрлэж, үйлчилгээг эхлүүлнэ.

service sssd stop
rm -rf /var/lib/sss/db/*
service sssd start

Бид анхны хэрэглэгчээр холбогдож, түүнд юу байгааг sudo доор шалгана.

su user1
[user1@testsshad log]$ id
uid=1109801141(user1) gid=1109800513(domain users) groups=1109800513(domain users),1109801132(admins_)
[user1@testsshad log]$ sudo -l
[sudo] password for user1:
Matching Defaults entries for user1 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user1 may run the following commands on testsshad:
    (root) /usr/bin/ls, /usr/bin/cat

Бид хоёр дахь хэрэглэгчтэйгээ ижил зүйлийг хийдэг:

su user2
[user2@testsshad log]$ id
uid=1109801142(user2) gid=1109800513(domain users) groups=1109800513(domain users),1109801138(sudo_root)
[user2@testsshad log]$ sudo -l
Matching Defaults entries for user2 on testsshad:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User user2 may run the following commands on testsshad:
    (root) ALL

Энэ арга нь янз бүрийн хэрэглэгчийн бүлгүүдэд зориулсан sudo үүргийг төвлөрсөн байдлаар тодорхойлох боломжийг танд олгоно.

Active Directory-д ssh түлхүүрүүдийг хадгалах, ашиглах

Уг схемийг бага зэрэг өргөжүүлснээр ssh түлхүүрүүдийг Active Directory хэрэглэгчийн шинж чанаруудад хадгалж, Линукс хостууд дээр зөвшөөрөл олгохдоо ашиглах боломжтой.

Sssd-ээр дамжуулан зөвшөөрлийг тохируулсан байх ёстой.
PowerShell скрипт ашиглан шаардлагатай шинж чанарыг нэмнэ үү.
AddsshPublicKeyAttribute.ps1Функц New-AttributeID {
$Уртгал = "1.2.840.113556.1.8000.2554"
$GUID=[System.Guid]::NewGuid().ToString()
$Parts=@()
$Parts+=[UInt64]::Parse($guid.SubString(0,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(4,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(9,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(14,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(19,4),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(24,6),“AllowHexSpecifier”)
$Parts+=[UInt64]::Parse($guid.SubString(30,6),“AllowHexSpecifier”)
$oid=[String]::Format(«{0}.{1}.{2}.{3}.{4}.{5}.{6}.{7}»,$prefix,$Parts[0],
$Parts[1],$Parts[2],$Parts[3],$Parts[4],$Parts[5],$Parts[6])
$oid
}
$schemaPath = (Get-ADRootDSE).schemaNamingContext
$oid = Шинэ-AttributeID
$attributes = @{
lDAPDisplayName = 'sshPublicKey';
attributeId = $oid;
oMSyntax = 22;
attributeSyntax = "2.5.5.5";
isSingleValued = $true;
adminDescription = 'SSH нэвтрэх хэрэглэгчийн нийтийн түлхүүр';
}

New-ADObject -Нэр sshPublicKey -Type attributeSchema -Path $schemapath -OtherAttributes $attributes
$userSchema = get-adobject -SearchBase $schemapath -Шүүлтүүр 'нэр -eq "хэрэглэгч"'
$userSchema | Set-ADObject -Нэмэх @{mayContain = 'sshPublicKey'}

Атрибут нэмсний дараа та Active Directory Domain Services-ийг дахин эхлүүлэх хэрэгтэй.
Active Directory хэрэглэгчид рүү шилжье. Бид танд тохиромжтой ямар ч аргыг ашиглан ssh холболтын түлхүүрүүдийг үүсгэх болно.
Бид PuttyGen-ийг ажиллуулж, "Үйлдвэрлэх" товчийг дараад хулганыг хоосон газар хөдөлгөж байна.
Процесс дууссаны дараа бид нийтийн болон хувийн түлхүүрүүдийг хадгалж, нийтийн түлхүүрийг Active Directory хэрэглэгчийн шинж чанарт байршуулж, үйл явцыг таашаах боломжтой. Гэхдээ нийтийн түлхүүрийг "-аас ашиглах ёстой.OpenSSH authorized_keys файл руу буулгах нийтийн түлхүүр:".
SSH, sudo олон улсын тэмцээнд түрүүлсэн тамирчид дахин дэвжээнд гарлаа. Актив лавлахын нэр хүндтэй удирдаачаар удирдуулсан
Түлхүүрийг хэрэглэгчийн шинж чанарт нэмнэ үү.
Сонголт 1 - GUI:
SSH, sudo олон улсын тэмцээнд түрүүлсэн тамирчид дахин дэвжээнд гарлаа. Актив лавлахын нэр хүндтэй удирдаачаар удирдуулсан
Сонголт 2 - PowerShell:
get-aduser user1 | set-aduser -add @{sshPublicKey = 'AAAAB...XAVnX9ZRJJ0p/Q=='}
Тиймээс бид одоогоор: sshPublicKey атрибутыг бөглөсөн хэрэглэгч, түлхүүр ашиглан зөвшөөрөл авах тохируулсан Putty клиенттэй байна. Нэг жижиг зүйл үлдэж байна: sshd демоныг хэрэглэгчийн шинж чанараас бидэнд хэрэгтэй нийтийн түлхүүрийг гаргаж авахад хэрхэн хүчлэх вэ. Хөрөнгөтний интернетээс олдсон жижиг скрипт үүнийг амжилттай даван туулж чадна.

cat /usr/local/bin/fetchSSHKeysFromLDAP
#!/bin/sh
ldapsearch -h testmdt.testopf.local -xb "dc=testopf,dc=local" '(sAMAccountName='"${1%@*}"')' -D [email protected] -w superSecretPassword 'sshPublicKey' | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/n *//g;s/sshPublicKey: //gp'

Бид үүн дээрх зөвшөөрлийг root хувьд 0500 болгож тохируулсан.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

Энэ жишээнд администраторын бүртгэлийг директор руу холбоход ашигладаг. Байлдааны нөхцөлд хамгийн бага эрх бүхий тусдаа данс байх ёстой.
Би хувьдаа тогтоосон эрхийг үл харгалзан скрипт дэх нууц үгийг цэвэр хэлбэрээр нь оруулсан нь маш их эргэлзэж байсан.
Шийдлийн сонголт:

  • Би нууц үгийг тусдаа файлд хадгалдаг:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • Би root файлын зөвшөөрлийг 0500 болгож тохируулсан
    chmod 0500 /usr/local/etc/secretpass

  • Ldapsearch эхлүүлэх параметрүүдийг өөрчлөх: параметр -w superSecretPassword Би үүнийг өөрчилдөг -y /usr/local/etc/secretpass

Өнөөдрийн багцын эцсийн хөвч бол sshd_config-г засварлах явдал юм

cat /etc/ssh/sshd_config | egrep -v -E "#|^$" | grep -E "AuthorizedKeysCommand|PubkeyAuthe"
PubkeyAuthentication yes
AuthorizedKeysCommand /usr/local/bin/fetchSSHKeysFromLDAP
AuthorizedKeysCommandUser root

Үүний үр дүнд бид ssh клиент дээр тохируулсан түлхүүрийн зөвшөөрөлтэй дараах дарааллыг авна.

  1. Хэрэглэгч өөрийн нэвтрэх эрхийг зааж серверт холбогддог.
  2. sshd дэмон нь скриптээр дамжуулан Active Directory дахь хэрэглэгчийн атрибутаас нийтийн түлхүүрийн утгыг гаргаж, түлхүүрүүдийг ашиглан зөвшөөрлийг гүйцэтгэдэг.
  3. Sssd дэмон нь бүлгийн гишүүнчлэл дээр үндэслэн хэрэглэгчийг баталгаажуулдаг. Анхаар! Хэрэв үүнийг тохируулаагүй бол ямар ч домэйн хэрэглэгч хост руу хандах эрхтэй болно.
  4. Таныг sudo гэж оролдох үед sssd дэмон нь Active Directory-ээс дүрүүдийг хайдаг. Хэрэв дүрүүд байгаа бол хэрэглэгчийн шинж чанарууд болон бүлгийн гишүүнчлэлийг шалгана (хэрэв sudoRoles нь хэрэглэгчийн бүлгийг ашиглахаар тохируулагдсан бол)

Нийт.

Тиймээс түлхүүрүүд нь Active Directory хэрэглэгчийн шинж чанарууд, sudo зөвшөөрөлд хадгалагддаг - үүнтэй адилаар домэйн бүртгэлээр Линукс хостууд руу нэвтрэх нь Active Directory бүлгийн гишүүнчлэлийг шалгах замаар хийгддэг.
Кондукторын бороохойн сүүлчийн давалгаа - мөн танхим хүндэтгэлтэй нам гүм байдалд хөлдөнө.

Бичлэгт ашигласан эх сурвалжууд:

Active Directory-ээр дамжуулан Sudo
Active Directory-ээр дамжуулан Ssh түлхүүрүүд
Powershell скрипт, Active Directory схемд атрибут нэмж байна
sudo тогтвортой хувилбар

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх