Chciałbym stworzyć użytkownika, który może zrobić tylko jedną rzecz: poprzez ssh podaj skrypt (i argumenty wiersza polecenia do skryptu), który znajduje się w jednym określonym folderze (na potrzeby tego pytania nazwijmy go /local/remote_only_scripts/foo
) i niech ten skrypt zostanie wykonany i zwraca wynik.
Aby wyjaśnić niektóre przykłady rzeczy, których nie chcę, aby użytkownik mógł:
- Lokalnie zaloguj się na konto. Aplikacja do logowania to
/bin/login
. To nie jest skrypt w/local/remote_only_scripts/foo
folderze, więc użytkownik nie powinien go wywoływać. - Zdalne logowanie do konta. Znowu logowanie (czy to się nazywa ssh?) Nie jest skryptem w odpowiednim folderze.
- Wyświetl zawartość katalogu. Ls jest w środku
/bin/ls
. To nie jest skrypt w odpowiednim katalogu. - Edytuj plik w tym katalogu. emacs, vi, gedit większość innych edytorów nie jest skryptami w tym directoy.
- Wyświetl zawartość pliku w tym katalogu.
- Wykonaj plik w tym katalogu, którego nie ma uprawnień do wykonania.
Zauważ, że są to przykłady, istnieje wiele innych działań, których nie chcę, aby użytkownik mógł wykonać. Zastanawiając się nad działaniem, zapytaj „czy robi to skrypt w /local/remote_only_scripts/foo
?” jeśli odpowiedź jest przecząca, użytkownik nie powinien być w stanie tego zrobić. Jeśli odpowiedź brzmi „tak”, użytkownik powinien móc to zrobić.
PS: Pozwól mi wyjaśnić, co rozumiem przez „dodanie użytkownika”. Nie mam na myśli dodawania użytkownika do jakiegoś podsystemu ssh. Chodzi mi raczej o dodanie użytkownika do systemu komputerowego. Na przykład mam system z stabilną wersją Debiana, nazwij go jego adresem, www.hg.bar.com. Chcę dodać użytkownika (przez kuser, users-admin lub useradd lub w podobny sposób) nazwać go hg_guest. hg_guest nie może zalogować się lokalnie ani wykonać żadnej z powyższych czynności. Wszystko, co może zrobić hg_guest, to wykonywanie skryptów „zdalnie”. Powiedziałem, że powinien być w stanie to zrobić za pośrednictwem ssh, ale myślenie o tym teraz, być może pozwolenie mu na użycie ssh może pozwolić mu zalogować się lokalnie, więc może być wymagany jakiś inny mechanizm.
źródło
command=
tymno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
potrzebne są opcje , aby naprawdę ograniczyć konto.Spróbuj tego jako powłoki logowania dla użytkownika:
Prawdopodobnie zechcesz również mieć to w
authorized_keys
pliku jawnie, jak w odpowiedzi Corena; ale zamień „... / foo; z programem tutaj. Które będą zapobiegać poleceń SSH jaksftp
,scp
issh hostname command
.źródło
W przypadku, gdy potrzebują tylko dostępu do jednego skryptu, działa to naprawdę dobrze dla mnie. Dodaj użytkownika i zmień domyślną powłokę na ścieżkę skryptu. Kiedy połączą się przez ssh, wykona skrypt i zamknie sesję.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: x: 2002: 100 :: / home / hg_guest: /local/remote_only_scripts/foo/script.sh
źródło