Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gear/rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
tar: .
spec: .gear/samba_allow_nsupdate.spec
41 changes: 41 additions & 0 deletions .gear/samba_allow_nsupdate.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
%define script_name samba_allow_nsupdate

Name: samba_allow_nsupdate
Version: 0.1
Release: alt1

Summary: Utility for managing the rights of domain computers to their DNS records
License: GPLv3
URL: https://github.com/altlinuxteam/samba_allow_nsupdate
VCS: https://github.com/altlinuxteam/samba_allow_nsupdate

BuildArch: noarch
Group: System/Configuration/Networking
Source: %name-%version.tar

BuildRequires: shellcheck


%description
The %{name} utility allows setting permissions for domain computers
on their DNS records. You can select either individual computers
by their names or SIDs or allow all computers in the domain to update
their DNS records.

%prep
%setup

%install
install -Dm 755 %script_name %buildroot/%_bindir/%script_name
install -Dm 644 doc/samba_allow_nsupdate.1 %buildroot/%_man1dir/samba_allow_nsupdate.1

%check
shellcheck %script_name

%files
%_bindir/%script_name
%_man1dir/samba_allow_nsupdate.1.*

%changelog
* Thu Sep 12 2024 Your Name <kamaevaoi@altlinux.org> 0.1-alt1
- Initial release.
54 changes: 54 additions & 0 deletions doc/samba_allow_nsupdate.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
.TH "SAMBA_ALLOW_NSUPDATE" "1" "Septemper 2024" "samba\-allow\-nsupdate" "Справка по samba_allow_nsupdate"
.SH НАЗВАНИЕ
.B samba\-allow\-nsupdate
\- утилита для управления правами доменных компьютеров на их DNS-записи.

.SH СИНТАКСИС
.B samba\-allow\-nsupdate
[\fI\,options\/\fR] [\fI\, <computer-name/computer-sid>...\/\fR]

.SH ОПИСАНИЕ
.B samba\-allow\-nsupdate
устанавливает права для компьютеров в домене на их DNS-записи.
.br
Утилита позволяет выбрать как конкретные компьютеры по их имени или SID (объектный идентификатор), так и все компьютеры в домене, и разрешить или запретить им обновлять свои DNS-записи в зоне DNS.
.br
Если список компьютеров не указан, утилита автоматически применяет действие ко всем компьютерам, найденным в указанном базовом DN (Distinguished Name) в домене.
.br
.SH ПАРАМЕТРЫ
.TP
.B \-h, \-\-help
Показать справку.
.TP
.B \-v, \-\-version
Вывести версию.
.TP
.B \-a, \-\-action=ACTION
Указать действие: allow для разрешения или deny для запрета. По умолчанию установлено allow.
.TP
.B \-в, \-\-computers\-base\-dn=BASE_DN
Указать базовый DN (Distinguished Name) для поиска компьютеров.
.TP
.B \-n, \-\-domain-dns=DOMAIN_DNS
Указать имя домена DNS. Если не указано, доменное имя будет автоматически получено с помощью команды samba-tool domain info.
.TP
.B \-e, \-\-domain-base-dn=DOMAIN_DN
Указать базовый DN домена. Если не указано, будет сгенерировано автоматически из доменного имени.
.TP
.B \-y, \-\-yes
Не запрашивать подтверждения перед выполнением изменений.
.TP
.B \-v, \-\-verbose
Включить подробный вывод информации в процессе выполнения скрипта.
.TP
.SH АВТОРЫ
Андрей Лимачко <liannnix@altlinux.org>
.br
Ольга Камаева <kamaevaoi@altlinux.org>

.SH АВТОРСКИЕ ПРАВА
Авторское право \(co 2024 Андрей Лимачко <liannnix@altlinux.org>
.br
Авторское право \(co 2024 Ольга Камаева <kamaevaoi@altlinux.org>
.br
Это бесплатное программное обеспечение; условия копирования приведены в источнике. Нет НИКАКИХ гарантий, даже на КОММЕРЧЕСКУЮ пригодность или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.
15 changes: 15 additions & 0 deletions samba_allow_nsupdate
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
set -euo pipefail

# shellcheck source=/bin/shell-getopt
# disable /bin/shell-getopt error
# shellcheck disable=SC1091
. shell-getopt

# main options
Expand Down Expand Up @@ -75,6 +77,12 @@ set_domain_base_dn() {
DOMAIN_DN="$1"
}

log_verbose() {
if [ -n "$VERBOSE" ]; then
echo "[VERBOSE] $1"
fi
}

while :; do
case "$1" in
-h|--help) show_usage
Expand Down Expand Up @@ -108,10 +116,12 @@ done
COMPUTERS_LIST_PARAMS="$*"

generate_defaults() {
log_verbose "Generating default values for DOMAIN_DNS and DOMAIN_DN..."
[ -z "$DOMAIN_DNS" ] && DOMAIN_DNS="$(samba-tool domain info 127.0.0.1 | grep Domain | sed "s/.*: //")"
[ -z "$DOMAIN_DN" ] && DOMAIN_DN="DC=$(echo "$DOMAIN_DNS" | sed "s/\./,DC=/g" | sed "s/,DC=$//")"
[ -z "$COMPUTERS_BASE_DN" ] && COMPUTERS_BASE_DN="$DOMAIN_DN" # "DC=domain,DC=alt"
OBJECT_BASE_DN="DC=$DOMAIN_DNS,CN=MicrosoftDNS,DC=DomainDnsZones,$DOMAIN_DN"
log_verbose "DOMAIN_DNS=$DOMAIN_DNS, DOMAIN_DN=$DOMAIN_DN, COMPUTERS_BASE_DN=$COMPUTERS_BASE_DN"
}

generate_computers_list() {
Expand All @@ -124,10 +134,14 @@ generate_computers_list() {
fi
}


checks() {
local ret=0
log_verbose "Checking for Kerberos ticket..."
klist >/dev/null 2>&1 || ( echo "Error: administrator account kerberos ticket required" && exit 1)
log_verbose "Checking for samba-tool..."
samba-tool -V >/dev/null 2>&1 || ( echo "Error: samba-tool not installed" && exit 1)
log_verbose "Checking if running on a domain controller..."
samba-tool domain info 127.0.0.1 >/dev/null 2>&1 || ( echo "Error: not a domain controller" && exit 1)
}

Expand Down Expand Up @@ -176,6 +190,7 @@ main() {
for computer in "${COMPUTERS_LIST[@]}"; do
ret=0
computer_sid="$(get_computer_sid "$computer")"
log_verbose "Setting DNS dsacl for $computer with SID $computer_sid..."
set_dns_dsacl "$ACTION" "$computer" "$computer_sid" || ret=1
echo -e -n "$computer\t\t\t$computer_sid\t"
if [[ $ret == 0 ]]; then
Expand Down