ื”ื–ื•ื›ื™ื ื‘ืชื—ืจื•ื™ื•ืช ื”ื‘ื™ื ืœืื•ืžื™ื•ืช SSH ื•-sudo ืฉื•ื‘ ืขืœ ื”ื‘ืžื”. ื‘ื”ื•ื‘ืœืช Distinguished Active Directory Conductor

ืžื‘ื—ื™ื ื” ื”ื™ืกื˜ื•ืจื™ืช, ื”ืจืฉืื•ืช sudo ื ืฉืœื˜ื• ืขืœ ื™ื“ื™ ื”ืชื•ื›ืŸ ืฉืœ ืงื‘ืฆื™ื ืž /etc/sudoers.d ะธ ื•ื™ืกื•ื“ื•, ื•ื”ืจืฉืืช ืžืคืชื— ื‘ื•ืฆืขื” ื‘ืืžืฆืขื•ืช ~/.ssh/authorized_keys. ืขื ื–ืืช, ื›ื›ืœ ืฉืชืฉืชื™ื•ืช ื’ื“ืœื•ืช, ื™ืฉ ืจืฆื•ืŸ ืœื ื”ืœ ืืช ื”ื–ื›ื•ื™ื•ืช ื”ืœืœื• ื‘ืื•ืคืŸ ืžืจื›ื–ื™. ื›ื™ื•ื ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ืžืกืคืจ ืืคืฉืจื•ื™ื•ืช ืคืชืจื•ืŸ:

  • ืžืขืจื›ืช ื ื™ื”ื•ืœ ืชืฆื•ืจื” - ืฉืึถืฃ, ื‘ึผื•ึผื‘ึผึธื”, ื‘ืœืชื™ ืืคืฉืจื™, ืžืœื—
  • ืฉืœ Active Directory + ssd
  • ืกื˜ื™ื•ืช ืฉื•ื ื•ืช ื‘ืฆื•ืจืช ืกืงืจื™ืคื˜ื™ื ื•ืขืจื™ื›ืช ืงื‘ืฆื™ื ื™ื“ื ื™ืช

ืœื“ืขืชื™ ื”ืกื•ื‘ื™ื™ืงื˜ื™ื‘ื™ืช, ื”ืืคืฉืจื•ืช ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื ื™ื”ื•ืœ ืจื™ื›ื•ื–ื™ ื”ื™ื ืขื“ื™ื™ืŸ ืฉื™ืœื•ื‘ ืฉืœ Active Directory + ssd. ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื’ื™ืฉื” ื–ื• ื”ื:

  • ื‘ืืžืช ืกืคืจื™ื™ืช ืžืฉืชืžืฉื™ื ืžืจื•ื›ื–ืช ืื—ืช.
  • ื—ืœื•ืงืช ื–ื›ื•ื™ื•ืช sudo ืžืกืชื›ื ื‘ื”ื•ืกืคืช ืžืฉืชืžืฉ ืœืงื‘ื•ืฆืช ืื‘ื˜ื—ื” ืกืคืฆื™ืคื™ืช.
  • ื‘ืžืงืจื” ืฉืœ ืžืขืจื›ื•ืช ืœื™ื ื•ืงืก ืฉื•ื ื•ืช, ื™ืฉ ืฆื•ืจืš ืœื”ืฆื™ื’ ื‘ื“ื™ืงื•ืช ื ื•ืกืคื•ืช ื›ื“ื™ ืœืงื‘ื•ืข ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืžืขืจื›ื•ืช ืชืฆื•ืจื”.

ื”ืกื•ื•ื™ื˜ื” ืฉืœ โ€‹โ€‹ื”ื™ื•ื ืชื•ืงื“ืฉ ื‘ืžื™ื•ื—ื“ ืœื—ื™ื‘ื•ืจ ืฉืœ Active Directory + ssd ืœื ื™ื”ื•ืœ ื–ื›ื•ื™ื•ืช sudo ื•ืื—ืกื•ืŸ ssh ืžืคืชื—ื•ืช ื‘ืžืื’ืจ ื™ื—ื™ื“.
ืื–, ื”ืื•ืœื ืงืคื ื‘ื“ืžืžื” ืžืชื•ื—ื”, ื”ืžื ืฆื— ื”ืจื™ื ืืช ืฉืจื‘ื™ื˜ื• ื•ื”ืชื–ืžื•ืจืช ื”ืชื›ื•ื ื ื”.
ื‘ื•ื ื ืœืš.

ื‘ื”ืชื—ืฉื‘ you
- ืชื—ื•ื Active Directory testopf.local ื‘-Windows Server 2012 R2.
- ืžืืจื— ืœื™ื ื•ืงืก ื”ืžืจื™ืฅ ืืช Centos 7
- ื”ืจืฉืื” ืžื•ื’ื“ืจืช ื‘ืืžืฆืขื•ืช ssd
ืฉื ื™ ื”ืคืชืจื•ื ื•ืช ืžื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ื‘ืกื›ื™ืžื” ืฉืœ Active Directory, ืื– ืื ื—ื ื• ื‘ื•ื“ืงื™ื ื”ื›ืœ ื‘ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื” ื•ืจืง ืื– ืžื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ื‘ืชืฉืชื™ืช ื”ืขื‘ื•ื“ื”. ืื ื™ ืจื•ืฆื” ืœืฆื™ื™ืŸ ืฉื›ืœ ื”ืฉื™ื ื•ื™ื™ื ืžืžื•ืงื“ื™ื ื•ืœืžืขืฉื” ืžื•ืกื™ืคื™ื ืจืง ืืช ื”ืชื›ื•ื ื•ืช ื•ื”ืžื—ืœืงื•ืช ื”ื ื“ืจืฉื•ืช.

ืคืขื•ืœื” 1: ืฉืœื™ื˜ื” sudo ืชืคืงื™ื“ื™ื ื“ืจืš ืฉืœ Active Directory.

ื›ื“ื™ ืœื”ืจื—ื™ื‘ ืืช ื”ืžืขื’ืœ ืฉืœ Active Directory ืืชื” ืฆืจื™ืš ืœื”ื•ืจื™ื“ ืืช ื”ืžื”ื“ื•ืจื” ื”ืื—ืจื•ื ื” sudo - 1.8.27 ื ื›ื•ืŸ ืœื”ื™ื•ื. ืคืจืง ื•ื”ืขืชืง ืืช ื”ืงื•ื‘ืฅ schema.ActiveDirectory ืžื”ืกืคืจื™ื™ื” ./doc ืœื‘ืงืจ ื”ืชื—ื•ื. ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ืขื ื–ื›ื•ื™ื•ืช ืžื ื”ืœ ืžื”ืกืคืจื™ื™ื” ืฉืืœื™ื” ื”ืงื•ื‘ืฅ ื”ื•ืขืชืง, ื”ืคืขืœ:
ldifde -i -f schema.ActiveDirectory -c dc=X dc=testopf,dc=local
(ืืœ ืชืฉื›ื— ืœื”ื—ืœื™ืฃ ืืช ื”ืขืจื›ื™ื ืฉืœืš)
ืคืชื•ื— adsiedit.msc ื•ื”ืชื—ื‘ืจ ืœื”ืงืฉืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ:
ืฆื•ืจ ื—ืœื•ืงื” ื‘ืฉื•ืจืฉ ื”ืชื—ื•ื ืžื–ื™ืข. (ื”ื‘ื•ืจื’ื ื•ืช ื˜ื•ืขื ืช ื‘ืขืงืฉื ื•ืช ืฉื‘ื™ื—ื™ื“ื” ื–ื• ื”ืฉื“ ssd ืžื—ืคืฉ ืคืจื™ื˜ sudoRole ื—ืคืฆื™ื. ืขื ื–ืืช, ืœืื—ืจ ื”ืคืขืœืช ื ื™ืคื•ื™ ื‘ืื’ื™ื ืžืคื•ืจื˜ ื•ืœื™ืžื•ื“ ื”ื™ื•ืžื ื™ื, ื”ืชื‘ืจืจ ืฉื”ื—ื™ืคื•ืฉ ื‘ื•ืฆืข ื‘ื›ืœ ืขืฅ ื”ืกืคืจื™ื•ืช.)
ืื ื• ื™ื•ืฆืจื™ื ืืช ื”ืื•ื‘ื™ื™ืงื˜ ื”ืจืืฉื•ืŸ ื”ืฉื™ื™ืš ืœืžื—ืœืงื” ื‘ื—ืœื•ืงื” sudoRole. ื ื™ืชืŸ ืœื‘ื—ื•ืจ ืืช ื”ืฉื ื‘ืื•ืคืŸ ืฉืจื™ืจื•ืชื™ ืœื—ืœื•ื˜ื™ืŸ, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืฉืžืฉ ืืš ื•ืจืง ืœื–ื™ื”ื•ื™ ื ื•ื—.
ื‘ื™ืŸ ื”ืชื›ื•ื ื•ืช ื”ื–ืžื™ื ื•ืช ื”ืืคืฉืจื™ื•ืช ืžื”ืจื—ื‘ืช ื”ืกื›ื™ืžื”, ื”ืขื™ืงืจื™ื•ืช ืฉื‘ื”ืŸ ื”ืŸ ื”ื‘ืื•ืช:

  • sudoCommand - ืงื•ื‘ืข ืื™ืœื• ืคืงื•ื“ื•ืช ืžื•ืชืจ ืœื”ืคืขื™ืœ ืขืœ ื”ืžืืจื—.
  • sudoHost - ืงื•ื‘ืข ืœืื™ืœื• ืžืืจื—ื™ื ืชืคืงื™ื“ ื–ื” ื—ืœ. ื ื™ืชืŸ ืœืฆื™ื™ืŸ ื› ื”ื›ืœ, ื•ืœืžืืจื— ื‘ื•ื“ื“ ื‘ืฉื. ืืคืฉืจ ื’ื ืœื”ืฉืชืžืฉ ื‘ืžืกื›ื”.
  • sudoUser - ืฆื™ื™ืŸ ืื™ืœื• ืžืฉืชืžืฉื™ื ืจืฉืื™ื ืœื‘ืฆืข sudo.
    ืื ืืชื” ืžืฆื™ื™ืŸ ืงื‘ื•ืฆืช ืื‘ื˜ื—ื”, ื”ื•ืกืฃ ืกื™ืžืŸ "%" ื‘ืชื—ื™ืœืช ื”ืฉื. ืื ื™ืฉ ืจื•ื•ื—ื™ื ื‘ืฉื ื”ืงื‘ื•ืฆื”, ืื™ืŸ ืžื” ืœื“ืื•ื’. ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ื™ื•ืžื ื™ื, ืžืฉื™ืžืช ื”ื‘ืจื™ื—ื” ืžื—ืœืœื™ื ื ืฉืœื˜ืช ืขืœ ื™ื“ื™ ื”ืžื ื’ื ื•ืŸ ssd.

ื”ื–ื•ื›ื™ื ื‘ืชื—ืจื•ื™ื•ืช ื”ื‘ื™ื ืœืื•ืžื™ื•ืช SSH ื•-sudo ืฉื•ื‘ ืขืœ ื”ื‘ืžื”. ื‘ื”ื•ื‘ืœืช Distinguished Active Directory Conductor
ืื™ื•ืจ 1. ืื•ื‘ื™ื™ืงื˜ื™ื sudoRole ื‘ืชืช-ื—ืœื•ืงืช sudoers ื‘ืฉื•ืจืฉ ื”ืกืคืจื™ื™ื”

ื”ื–ื•ื›ื™ื ื‘ืชื—ืจื•ื™ื•ืช ื”ื‘ื™ื ืœืื•ืžื™ื•ืช SSH ื•-sudo ืฉื•ื‘ ืขืœ ื”ื‘ืžื”. ื‘ื”ื•ื‘ืœืช Distinguished Active Directory Conductor
ืื™ื•ืจ 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 daemon. ืขื“ื›ื•ื ื™ื ืื•ื˜ื•ืžื˜ื™ื™ื ืžืชืจื—ืฉื™ื ื›ืœ 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 ืขื‘ื•ืจ ืงื‘ื•ืฆื•ืช ืžืฉืชืžืฉื™ื ืฉื•ื ื•ืช.

ืื—ืกื•ืŸ ื•ืฉื™ืžื•ืฉ ื‘ืžืคืชื—ื•ืช ssh ื‘-Active Directory

ืขื ื”ืจื—ื‘ื” ืงืœื” ืฉืœ ื”ืกื›ื™ืžื”, ื ื™ืชืŸ ืœืื—ืกืŸ ืžืคืชื—ื•ืช ssh ื‘ืชื›ื•ื ื•ืช ืžืฉืชืžืฉ ืฉืœ Active Directory ื•ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ืขืช ื”ืจืฉืื” ื‘ืžืืจื—ื™ ืœื™ื ื•ืงืก.

ื™ืฉ ืœื”ื’ื“ื™ืจ ื”ืจืฉืื” ื‘ืืžืฆืขื•ืช sssd.
ื”ื•ืกืฃ ืืช ื”ืชื›ื•ื ื” ื”ื ื“ืจืฉืช ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ PowerShell.
AddsshPublicKeyAttribute.ps1ืคื•ื ืงืฆื™ื” New-AttributeID {
$Prefix="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 = New-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 -Filter 'name -eq "user"'
$userSchema | Set-ADObject -Add @{mayContain = 'sshPublicKey'}

ืœืื—ืจ ื”ื•ืกืคืช ื”ืชื›ื•ื ื”, ืขืœื™ืš ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช Active Directory Domain Services.
ื‘ื•ืื• ื ืขื‘ื•ืจ ืœืžืฉืชืžืฉื™ Active Directory. ืื ื• ื ื™ืฆื•ืจ ื–ื•ื’ ืžืคืชื—ื•ืช ืœื—ื™ื‘ื•ืจ ssh ื‘ื›ืœ ืฉื™ื˜ื” ื”ื ื•ื—ื” ืœืš.
ืื ื• ืžืฉื™ืงื™ื ืืช PuttyGen, ืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ "ื”ืคืง" ื•ืžื–ื™ื–ื™ื ื‘ื˜ื™ืจื•ืฃ ืืช ื”ืขื›ื‘ืจ ื‘ืชื•ืš ื”ืื–ื•ืจ ื”ืจื™ืง.
ื‘ืกื™ื•ื ื”ืชื”ืœื™ืš ื ื•ื›ืœ ืœืฉืžื•ืจ ืืช ื”ืžืคืชื—ื•ืช ื”ืฆื™ื‘ื•ืจื™ื™ื ื•ื”ืคืจื˜ื™ื™ื, ืœื”ืขืœื•ืช ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืœืชื›ื•ื ืช ื”ืžืฉืชืžืฉ ืฉืœ Active Directory ื•ืœื™ื”ื ื•ืช ืžื”ืชื”ืœื™ืš. ืขื ื–ืืช, ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืžื”-"ืžืคืชื— ืฆื™ื‘ื•ืจื™ ืœื”ื“ื‘ืงื” ื‘ืงื•ื‘ืฅ Authorized_keys ืฉืœ OpenSSH:".
ื”ื–ื•ื›ื™ื ื‘ืชื—ืจื•ื™ื•ืช ื”ื‘ื™ื ืœืื•ืžื™ื•ืช SSH ื•-sudo ืฉื•ื‘ ืขืœ ื”ื‘ืžื”. ื‘ื”ื•ื‘ืœืช Distinguished Active Directory Conductor
ื”ื•ืกืฃ ืืช ื”ืžืคืชื— ืœืชื›ื•ื ืช ื”ืžืฉืชืžืฉ.
ืืคืฉืจื•ืช 1 - ืžืžืฉืง ืžืฉืชืžืฉ:
ื”ื–ื•ื›ื™ื ื‘ืชื—ืจื•ื™ื•ืช ื”ื‘ื™ื ืœืื•ืžื™ื•ืช SSH ื•-sudo ืฉื•ื‘ ืขืœ ื”ื‘ืžื”. ื‘ื”ื•ื‘ืœืช Distinguished Active Directory Conductor
ืืคืฉืจื•ืช 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'

ื”ื’ื“ืจื ื• ืืช ื”ื”ืจืฉืื•ืช ืฉืœื• ืœ-0500 ืขื‘ื•ืจ root.

chmod 0500  /usr/local/bin/fetchSSHKeysFromLDAP

ื‘ื“ื•ื’ืžื” ื–ื•, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื—ืฉื‘ื•ืŸ ืžื ื”ืœ ื›ื“ื™ ืœืื’ื“ ืืช ื”ืกืคืจื™ื™ื”. ื‘ืชื ืื™ ืœื—ื™ืžื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื—ืฉื‘ื•ืŸ ื ืคืจื“ ืขื ืกื˜ ืžื™ื ื™ืžืœื™ ืฉืœ ื–ื›ื•ื™ื•ืช.
ืื ื™ ืื™ืฉื™ืช ื”ื™ื™ืชื™ ืžืื•ื“ ืžื‘ื•ืœื‘ืœ ืžืจื’ืข ื”ืกื™ืกืžื” ื‘ืฆื•ืจืชื” ื”ื˜ื”ื•ืจื” ื‘ืชืกืจื™ื˜, ืœืžืจื•ืช ื”ื–ื›ื•ื™ื•ืช ืฉื ืงื‘ืขื•.
ืืคืฉืจื•ืช ืคืชืจื•ืŸ:

  • ืื ื™ ืฉื•ืžืจ ืืช ื”ืกื™ืกืžื” ื‘ืงื•ื‘ืฅ ื ืคืจื“:
    echo -n Supersecretpassword > /usr/local/etc/secretpass

  • ื”ื’ื“ืจืชื™ ืืช ื”ืจืฉืื•ืช ื”ืงื•ื‘ืฅ ืœ-0500 ืขื‘ื•ืจ root
    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
ืžืงืฉื™ Ssh ื“ืจืš Active Directory
ืกืงืจื™ืคื˜ Powershell, ื”ื•ืกืคืช ืชื›ื•ื ื” ืœ- Active Directory Schema
ืฉื—ืจื•ืจ ื™ืฆื™ื‘ ืฉืœ sudo

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”